From 3d6c220d2400ee80cd7211e4a852f6808715dea6 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 26 Oct 2016 12:33:18 +0200 Subject: [PATCH] CSS autocomplete in html files not working on Windows.Fixes #14467 --- .../css/client/src/embeddedContentUri.ts | 2 +- .../css/server/src/embeddedContentUri.ts | 2 +- .../html/client/src/embeddedContentUri.ts | 2 +- .../src/test/embeddedContentUri.test.ts | 27 +++++++++++++++++++ .../server/src/test/embeddedContentUri.ts | 27 +++++++++++++++++++ 5 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 extensions/html/server/src/test/embeddedContentUri.test.ts create mode 100644 extensions/html/server/src/test/embeddedContentUri.ts diff --git a/extensions/css/client/src/embeddedContentUri.ts b/extensions/css/client/src/embeddedContentUri.ts index 8fccadaf83e..3d7b012a0fd 100644 --- a/extensions/css/client/src/embeddedContentUri.ts +++ b/extensions/css/client/src/embeddedContentUri.ts @@ -13,7 +13,7 @@ export function isEmbeddedContentUri(virtualDocumentUri: Uri): boolean { } export function getEmbeddedContentUri(parentDocumentUri: string, embeddedLanguageId: string): Uri { - return Uri.parse(EMBEDDED_CONTENT_SCHEME + '://' + embeddedLanguageId + '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId); + return new Uri().with({ scheme: EMBEDDED_CONTENT_SCHEME, authority: embeddedLanguageId, path: '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId }); }; export function getHostDocumentUri(virtualDocumentUri: Uri): string { diff --git a/extensions/css/server/src/embeddedContentUri.ts b/extensions/css/server/src/embeddedContentUri.ts index c2751a0825f..8a305a85908 100644 --- a/extensions/css/server/src/embeddedContentUri.ts +++ b/extensions/css/server/src/embeddedContentUri.ts @@ -13,7 +13,7 @@ export function isEmbeddedContentUri(virtualDocumentUri: Uri): boolean { } export function getEmbeddedContentUri(parentDocumentUri: string, embeddedLanguageId: string): Uri { - return Uri.parse(EMBEDDED_CONTENT_SCHEME + '://' + embeddedLanguageId + '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId); + return Uri.from({ scheme: EMBEDDED_CONTENT_SCHEME, authority: embeddedLanguageId, path: '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId }); }; export function getHostDocumentUri(virtualDocumentUri: Uri): string { diff --git a/extensions/html/client/src/embeddedContentUri.ts b/extensions/html/client/src/embeddedContentUri.ts index 8fccadaf83e..3d7b012a0fd 100644 --- a/extensions/html/client/src/embeddedContentUri.ts +++ b/extensions/html/client/src/embeddedContentUri.ts @@ -13,7 +13,7 @@ export function isEmbeddedContentUri(virtualDocumentUri: Uri): boolean { } export function getEmbeddedContentUri(parentDocumentUri: string, embeddedLanguageId: string): Uri { - return Uri.parse(EMBEDDED_CONTENT_SCHEME + '://' + embeddedLanguageId + '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId); + return new Uri().with({ scheme: EMBEDDED_CONTENT_SCHEME, authority: embeddedLanguageId, path: '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId }); }; export function getHostDocumentUri(virtualDocumentUri: Uri): string { diff --git a/extensions/html/server/src/test/embeddedContentUri.test.ts b/extensions/html/server/src/test/embeddedContentUri.test.ts new file mode 100644 index 00000000000..c4c09cfb934 --- /dev/null +++ b/extensions/html/server/src/test/embeddedContentUri.test.ts @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- + * 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 {getEmbeddedContentUri, getEmbeddedLanguageId, getHostDocumentUri, isEmbeddedContentUri} from './embeddedContentUri'; + +suite('Embedded URI', () => { + + test('URI', function (): any { + let resourceUri1 = 'file:///c%3A/workspaces/samples/foo.html'; + let resourceUri2 = 'file://Users/joe/samples/foo.html'; + + let uri = getEmbeddedContentUri(resourceUri1, 'css'); + assert(isEmbeddedContentUri(uri)); + assert.equal(getEmbeddedLanguageId(uri), 'css'); + assert.equal(getHostDocumentUri(uri), resourceUri1); + + let uri2 = getEmbeddedContentUri(resourceUri2, 'css'); + assert(isEmbeddedContentUri(uri2)); + assert.equal(getEmbeddedLanguageId(uri2), 'css'); + assert.equal(getHostDocumentUri(uri2), resourceUri2); + }); + +}); \ No newline at end of file diff --git a/extensions/html/server/src/test/embeddedContentUri.ts b/extensions/html/server/src/test/embeddedContentUri.ts new file mode 100644 index 00000000000..8a305a85908 --- /dev/null +++ b/extensions/html/server/src/test/embeddedContentUri.ts @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- + * 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 Uri from 'vscode-uri'; + +export const EMBEDDED_CONTENT_SCHEME = 'embedded-content'; + +export function isEmbeddedContentUri(virtualDocumentUri: Uri): boolean { + return virtualDocumentUri.scheme === EMBEDDED_CONTENT_SCHEME; +} + +export function getEmbeddedContentUri(parentDocumentUri: string, embeddedLanguageId: string): Uri { + return Uri.from({ scheme: EMBEDDED_CONTENT_SCHEME, authority: embeddedLanguageId, path: '/' + encodeURIComponent(parentDocumentUri) + '.' + embeddedLanguageId }); +}; + +export function getHostDocumentUri(virtualDocumentUri: Uri): string { + let languageId = virtualDocumentUri.authority; + let path = virtualDocumentUri.path.substring(1, virtualDocumentUri.path.length - languageId.length - 1); // remove leading '/' and new file extension + return decodeURIComponent(path); +}; + +export function getEmbeddedLanguageId(virtualDocumentUri: Uri): string { + return virtualDocumentUri.authority; +} \ No newline at end of file