1
0

testRunner.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import '../monaco.contribution';
  6. import {loadLanguage} from '../_.contribution';
  7. import * as test from 'tape';
  8. // Allow for running under nodejs/requirejs in tests
  9. const _monaco: typeof monaco = (typeof monaco === 'undefined' ? (<any>self).monaco : monaco);
  10. export interface IRelaxedToken {
  11. startIndex: number;
  12. type: string;
  13. }
  14. export interface ITestItem {
  15. line: string;
  16. tokens: IRelaxedToken[];
  17. }
  18. export function testTokenization(_language:string|string[], tests:ITestItem[][]): void {
  19. let languages:string[];
  20. if (typeof _language === 'string') {
  21. languages = [_language];
  22. } else {
  23. languages = _language;
  24. }
  25. let mainLanguage = languages[0];
  26. test(mainLanguage + ' tokenization', (t: test.Test) => {
  27. Promise.all(languages.map(l => loadLanguage(l))).then(() => {
  28. // clean stack
  29. setTimeout(() => {
  30. runTests(t, mainLanguage, tests);
  31. t.end();
  32. });
  33. }).then(null, () => t.end());
  34. });
  35. }
  36. function runTests(t: test.Test, languageId:string, tests:ITestItem[][]): void {
  37. tests.forEach((test) => runTest(t, languageId, test));
  38. }
  39. function runTest(t: test.Test, languageId:string, test:ITestItem[]): void {
  40. let text = test.map(t => t.line).join('\n');
  41. let actualTokens = _monaco.editor.tokenize(text, languageId);
  42. let actual = actualTokens.map((lineTokens, index) => {
  43. return {
  44. line: test[index].line,
  45. tokens: lineTokens.map((t) => {
  46. return {
  47. startIndex: t.offset,
  48. type: t.type
  49. };
  50. })
  51. };
  52. });
  53. t.deepEqual(actual, test);
  54. }