/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; import * as assert from 'assert'; import * as embeddedSupport from '../modes/embeddedSupport'; import { TextDocument } from 'vscode-languageserver-types'; import { getLanguageService } from 'vscode-html-languageservice'; suite('HTML Embedded Support', () => { var htmlLanguageService = getLanguageService(); function assertLanguageId(value: string, expectedLanguageId: string): void { let offset = value.indexOf('|'); value = value.substr(0, offset) + value.substr(offset + 1); let document = TextDocument.create('test://test/test.html', 'html', 0, value); let position = document.positionAt(offset); let docRegions = embeddedSupport.getDocumentRegions(htmlLanguageService, document); let languageId = docRegions.getLanguageAtPosition(position); assert.equal(languageId, expectedLanguageId); } function assertEmbeddedLanguageContent(value: string, languageId: string, expectedContent: string): void { let document = TextDocument.create('test://test/test.html', 'html', 0, value); let docRegions = embeddedSupport.getDocumentRegions(htmlLanguageService, document); let 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('', void 0); 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('