Catch failure to create directory in cache (#37871)
diff --git a/packages/flutter_tools/test/general.shard/cache_test.dart b/packages/flutter_tools/test/general.shard/cache_test.dart index f4a8ef4..aa9d940 100644 --- a/packages/flutter_tools/test/general.shard/cache_test.dart +++ b/packages/flutter_tools/test/general.shard/cache_test.dart
@@ -243,6 +243,27 @@ Platform: () => fakePlatform, }); }); + + testUsingContext('throws tool exit on fs exception', () async { + final FakeCachedArtifact fakeCachedArtifact = FakeCachedArtifact( + cache: MockCache(), + requiredArtifacts: <DevelopmentArtifact>{ + DevelopmentArtifact.android, + } + ); + final Directory mockDirectory = MockDirectory(); + when(fakeCachedArtifact.cache.getArtifactDirectory(any)) + .thenReturn(mockDirectory); + when(mockDirectory.existsSync()).thenReturn(false); + when(mockDirectory.createSync(recursive: true)) + .thenThrow(const FileSystemException()); + + expect(() => fakeCachedArtifact.update(<DevelopmentArtifact>{ + DevelopmentArtifact.android, + }), throwsA(isInstanceOf<ToolExit>())); + }, overrides: <Type, Generator>{ + FileSystem: () => MemoryFileSystem(), + }); } class FakeCachedArtifact extends EngineCachedArtifact { @@ -271,6 +292,7 @@ class MockFileSystem extends Mock implements FileSystem {} class MockFile extends Mock implements File {} +class MockDirectory extends Mock implements Directory {} class MockRandomAccessFile extends Mock implements RandomAccessFile {} class MockCachedArtifact extends Mock implements CachedArtifact {}