/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import 'mocha'; import * as assert from 'assert'; import * as embeddedSupport from '../modes/embeddedSupport'; import { getLanguageService } from 'vscode-html-languageservice'; import { TextDocument } from '../modes/languageModes'; suite('HTML Embedded Support', () => { const htmlLanguageService = getLanguageService(); function assertLanguageId(value: string, expectedLanguageId: string | undefined): void { const offset = value.indexOf('|'); value = value.substr(0, offset) + value.substr(offset + 1); const document = TextDocument.create('test://test/test.html', 'html', 0, value); const position = document.positionAt(offset); const docRegions = embeddedSupport.getDocumentRegions(htmlLanguageService, document); const languageId = docRegions.getLanguageAtPosition(position); assert.equal(languageId, expectedLanguageId); } function assertEmbeddedLanguageContent(value: string, languageId: string, expectedContent: string): void { const document = TextDocument.create('test://test/test.html', 'html', 0, value); const docRegions = embeddedSupport.getDocumentRegions(htmlLanguageService, document); const content = docRegions.getEmbeddedDocument(languageId); assert.equal(content.getText(), expectedContent); } test('Styles', function (): any { assertLanguageId('|', 'html'); assertLanguageId('', 'html'); assertLanguageId('foo { }', 'html'); assertLanguageId('', 'css'); assertLanguageId('', 'css'); assertLanguageId('', 'css'); assertLanguageId('', 'css', ' foo { } '); assertEmbeddedLanguageContent('', 'css', ' '); assertEmbeddedLanguageContent('Hello', 'css', ' foo { } foo { } '); assertEmbeddedLanguageContent('\n \n\n', 'css', '\n \n foo { } \n \n\n'); assertEmbeddedLanguageContent('
', 'css', ' __{color: red} '); assertEmbeddedLanguageContent('
', 'css', ' __{color:red} '); }); test('Scripts', function (): any { assertLanguageId('|', 'html'); assertLanguageId('', 'html'); assertLanguageId('var i = 0;', 'html'); assertLanguageId('', 'javascript'); assertLanguageId('', 'javascript'); assertLanguageId('', 'javascript'); assertLanguageId('', 'javascript'); assertLanguageId('', 'javascript'); assertLanguageId('', 'javascript'); assertLanguageId('', 'javascript'); assertLanguageId('', undefined); assertLanguageId('', 'javascript'); }); test('Scripts in attribute', function (): any { assertLanguageId('
', 'html'); assertLanguageId('
', 'html'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'html'); assertLanguageId('
', 'html'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'html'); assertLanguageId('
', 'html'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'javascript'); assertLanguageId('
', 'html'); assertLanguageId('