diff --git a/packages/compiler-cli/src/ngtsc/file_system/testing/src/mock_file_system_native.ts b/packages/compiler-cli/src/ngtsc/file_system/testing/src/mock_file_system_native.ts index 4528a62f60..f4539fb048 100644 --- a/packages/compiler-cli/src/ngtsc/file_system/testing/src/mock_file_system_native.ts +++ b/packages/compiler-cli/src/ngtsc/file_system/testing/src/mock_file_system_native.ts @@ -5,11 +5,15 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ +/// +import * as os from 'os'; import {NodeJSFileSystem} from '../../src/node_js_file_system'; import {AbsoluteFsPath, PathSegment, PathString} from '../../src/types'; import {MockFileSystem} from './mock_file_system'; +const isWindows = os.platform() === 'win32'; + export class MockFileSystemNative extends MockFileSystem { constructor(cwd: AbsoluteFsPath = '/' as AbsoluteFsPath) { super(undefined, cwd); } @@ -41,6 +45,15 @@ export class MockFileSystemNative extends MockFileSystem { } normalize(path: T): T { + // When running in Windows, absolute paths are normalized to always include a drive letter. This + // ensures that rooted posix paths used in tests will be normalized to real Windows paths, i.e. + // including a drive letter. Note that the same normalization is done in emulated Windows mode + // (see `MockFileSystemWindows`) so that the behavior is identical between native Windows and + // emulated Windows mode. + if (isWindows) { + path = path.replace(/^[\/\\]/i, 'C:/') as T; + } + return NodeJSFileSystem.prototype.normalize.call(this, path) as T; }