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;
}