Skip to content

Commit 7773819

Browse files
authored
Decouple more tests from dart:io (#255)
1 parent 595b81e commit 7773819

9 files changed

+776
-718
lines changed

pkgs/io_file/test/copy_file_test.dart

Lines changed: 275 additions & 273 deletions
Large diffs are not rendered by default.

pkgs/io_file/test/create_directory_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ void tests(FileUtils utils, FileSystem fs) {
2121
late String cwd;
2222

2323
setUp(() {
24-
tmp = createTemp('createDirectory');
24+
tmp = utils.createTestDirectory('createDirectory');
2525
cwd = fs.currentDirectory;
2626
fs.currentDirectory = tmp;
2727
});
2828

2929
tearDown(() {
3030
fs.currentDirectory = cwd;
31-
deleteTemp(tmp);
31+
utils.deleteDirectoryTree(tmp);
3232
});
3333

3434
test('success', () {

pkgs/io_file/test/create_temporary_directory_test.dart

Lines changed: 175 additions & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -13,181 +13,184 @@ import 'package:test/test.dart';
1313
import 'package:win32/win32.dart' as win32;
1414

1515
import 'errors.dart' as errors;
16+
import 'file_system_file_utils.dart' hide fileUtils;
1617
import 'test_utils.dart';
1718

18-
void main() {
19-
group('createTemporaryDirectory', () {
20-
late String tmp;
21-
late String cwd;
22-
23-
setUp(() {
24-
tmp = createTemp('createTemporaryDirectory');
25-
cwd = fileSystem.currentDirectory;
26-
fileSystem.currentDirectory = tmp;
27-
});
28-
29-
tearDown(() {
30-
fileSystem.currentDirectory = cwd;
31-
deleteTemp(tmp);
32-
});
33-
34-
test('no arguments', () {
35-
final tmp1 = fileSystem.createTemporaryDirectory();
36-
addTearDown(() => io.Directory(tmp1).deleteSync());
37-
final tmp2 = fileSystem.createTemporaryDirectory();
38-
addTearDown(() => io.Directory(tmp2).deleteSync());
39-
40-
expect(fileSystem.same(tmp1, tmp2), isFalse);
41-
expect(io.Directory(tmp1).existsSync(), isTrue);
42-
expect(io.Directory(tmp2).existsSync(), isTrue);
43-
});
44-
45-
test('prefix', () {
46-
final tmp1 = fileSystem.createTemporaryDirectory(prefix: 'myprefix');
47-
addTearDown(() => io.Directory(tmp1).deleteSync());
48-
final tmp2 = fileSystem.createTemporaryDirectory(prefix: 'myprefix');
49-
addTearDown(() => io.Directory(tmp2).deleteSync());
50-
51-
expect(tmp1, contains('myprefix'));
52-
expect(tmp2, contains('myprefix'));
53-
expect(fileSystem.same(tmp1, tmp2), isFalse);
54-
expect(io.Directory(tmp1).existsSync(), isTrue);
55-
expect(io.Directory(tmp2).existsSync(), isTrue);
56-
});
57-
58-
test('prefix is empty string', () {
59-
final tmp1 = fileSystem.createTemporaryDirectory(prefix: '');
60-
addTearDown(() => io.Directory(tmp1).deleteSync());
61-
final tmp2 = fileSystem.createTemporaryDirectory(prefix: '');
62-
addTearDown(() => io.Directory(tmp2).deleteSync());
63-
64-
expect(fileSystem.same(tmp1, tmp2), isFalse);
65-
expect(io.Directory(tmp1).existsSync(), isTrue);
66-
expect(io.Directory(tmp2).existsSync(), isTrue);
67-
});
68-
69-
test('prefix contains XXXXXX', () {
70-
final tmp1 = fileSystem.createTemporaryDirectory(
71-
prefix: 'myprefix-XXXXXX',
72-
);
73-
addTearDown(() => io.Directory(tmp1).deleteSync());
74-
final tmp2 = fileSystem.createTemporaryDirectory(
75-
prefix: 'myprefix-XXXXXX',
76-
);
77-
addTearDown(() => io.Directory(tmp2).deleteSync());
78-
79-
expect(tmp1, contains('myprefix-'));
80-
expect(tmp2, contains('myprefix-'));
81-
expect(fileSystem.same(tmp1, tmp2), isFalse);
82-
expect(io.Directory(tmp1).existsSync(), isTrue);
83-
expect(io.Directory(tmp2).existsSync(), isTrue);
84-
});
85-
86-
test('parent', () {
87-
final tmp1 = fileSystem.createTemporaryDirectory(parent: tmp);
88-
final tmp2 = fileSystem.createTemporaryDirectory(parent: tmp);
89-
90-
expect(tmp1, startsWith(tmp));
91-
expect(tmp2, startsWith(tmp));
92-
expect(fileSystem.same(tmp1, tmp2), isFalse);
93-
expect(io.Directory(tmp1).existsSync(), isTrue);
94-
expect(io.Directory(tmp2).existsSync(), isTrue);
95-
});
96-
97-
test('parent has a long directory name', () {
98-
// On Windows:
99-
// When using an API to create a directory, the specified path cannot be
100-
// so long that you cannot append an 8.3 file name (that is, the directory
101-
// name cannot exceed MAX_PATH minus 12).
102-
final dirname = 'd' * (io.Platform.isWindows ? win32.MAX_PATH - 12 : 255);
103-
final parent = p.join(tmp, dirname);
104-
io.Directory(parent).createSync();
105-
106-
final tmp1 = fileSystem.createTemporaryDirectory(parent: parent);
107-
final tmp2 = fileSystem.createTemporaryDirectory(parent: parent);
108-
109-
expect(tmp1, startsWith(tmp));
110-
expect(tmp2, startsWith(tmp));
111-
expect(fileSystem.same(tmp1, tmp2), isFalse);
112-
expect(io.Directory(tmp1).existsSync(), isTrue);
113-
expect(io.Directory(tmp2).existsSync(), isTrue);
114-
});
115-
116-
test('parent is empty string', () {
117-
final tmp1 = fileSystem.createTemporaryDirectory(parent: '');
118-
addTearDown(() => io.Directory(tmp1).deleteSync());
119-
final tmp2 = fileSystem.createTemporaryDirectory(parent: '');
120-
addTearDown(() => io.Directory(tmp2).deleteSync());
121-
122-
expect(p.isRelative(tmp1), isTrue);
123-
expect(p.isRelative(tmp2), isTrue);
124-
expect(fileSystem.same(tmp1, tmp2), isFalse);
125-
expect(io.Directory(tmp1).existsSync(), isTrue);
126-
expect(io.Directory(tmp2).existsSync(), isTrue);
127-
});
128-
129-
test('parent does not exist', () {
130-
expect(
131-
() => fileSystem.createTemporaryDirectory(parent: '/foo/bar/baz'),
132-
throwsA(
133-
isA<PathNotFoundException>().having(
134-
(e) => e.errorCode,
135-
'errorCode',
136-
io.Platform.isWindows ? win32.ERROR_PATH_NOT_FOUND : errors.enoent,
137-
),
19+
void tests(FileUtils utils, FileSystem fs) {
20+
late String tmp;
21+
late String cwd;
22+
23+
setUp(() {
24+
tmp = utils.createTestDirectory('createTemporaryDirectory');
25+
cwd = fs.currentDirectory;
26+
fs.currentDirectory = tmp;
27+
});
28+
29+
tearDown(() {
30+
fs.currentDirectory = cwd;
31+
utils.deleteDirectoryTree(tmp);
32+
});
33+
34+
test('no arguments', () {
35+
final tmp1 = fs.createTemporaryDirectory();
36+
addTearDown(() => utils.deleteDirectory(tmp1));
37+
final tmp2 = fs.createTemporaryDirectory();
38+
addTearDown(() => utils.deleteDirectory(tmp2));
39+
40+
expect(fs.same(tmp1, tmp2), isFalse);
41+
expect(utils.isDirectory(tmp1), isTrue);
42+
expect(utils.isDirectory(tmp2), isTrue);
43+
});
44+
45+
test('prefix', () {
46+
final tmp1 = fs.createTemporaryDirectory(prefix: 'myprefix');
47+
addTearDown(() => utils.deleteDirectory(tmp1));
48+
final tmp2 = fs.createTemporaryDirectory(prefix: 'myprefix');
49+
addTearDown(() => utils.deleteDirectory(tmp2));
50+
51+
expect(tmp1, contains('myprefix'));
52+
expect(tmp2, contains('myprefix'));
53+
expect(fs.same(tmp1, tmp2), isFalse);
54+
expect(utils.isDirectory(tmp1), isTrue);
55+
expect(utils.isDirectory(tmp2), isTrue);
56+
});
57+
58+
test('prefix is empty string', () {
59+
final tmp1 = fs.createTemporaryDirectory(prefix: '');
60+
addTearDown(() => utils.deleteDirectory(tmp1));
61+
final tmp2 = fs.createTemporaryDirectory(prefix: '');
62+
addTearDown(() => utils.deleteDirectory(tmp2));
63+
64+
expect(fs.same(tmp1, tmp2), isFalse);
65+
expect(utils.isDirectory(tmp1), isTrue);
66+
expect(utils.isDirectory(tmp2), isTrue);
67+
});
68+
69+
test('prefix contains XXXXXX', () {
70+
final tmp1 = fs.createTemporaryDirectory(prefix: 'myprefix-XXXXXX');
71+
addTearDown(() => utils.deleteDirectory(tmp1));
72+
final tmp2 = fs.createTemporaryDirectory(prefix: 'myprefix-XXXXXX');
73+
addTearDown(() => utils.deleteDirectory(tmp2));
74+
75+
expect(tmp1, contains('myprefix-'));
76+
expect(tmp2, contains('myprefix-'));
77+
expect(fs.same(tmp1, tmp2), isFalse);
78+
expect(utils.isDirectory(tmp1), isTrue);
79+
expect(utils.isDirectory(tmp2), isTrue);
80+
});
81+
82+
test('parent', () {
83+
final tmp1 = fs.createTemporaryDirectory(parent: tmp);
84+
final tmp2 = fs.createTemporaryDirectory(parent: tmp);
85+
86+
expect(tmp1, startsWith(tmp));
87+
expect(tmp2, startsWith(tmp));
88+
expect(fs.same(tmp1, tmp2), isFalse);
89+
expect(utils.isDirectory(tmp1), isTrue);
90+
expect(utils.isDirectory(tmp2), isTrue);
91+
});
92+
93+
test('parent has a long directory name', () {
94+
// On Windows:
95+
// When using an API to create a directory, the specified path cannot be
96+
// so long that you cannot append an 8.3 file name (that is, the directory
97+
// name cannot exceed MAX_PATH minus 12).
98+
final dirname = 'd' * (io.Platform.isWindows ? win32.MAX_PATH - 12 : 255);
99+
final parent = p.join(tmp, dirname);
100+
utils.createDirectory(parent);
101+
102+
final tmp1 = fs.createTemporaryDirectory(parent: parent);
103+
final tmp2 = fs.createTemporaryDirectory(parent: parent);
104+
105+
expect(tmp1, startsWith(tmp));
106+
expect(tmp2, startsWith(tmp));
107+
expect(fs.same(tmp1, tmp2), isFalse);
108+
expect(utils.isDirectory(tmp1), isTrue);
109+
expect(utils.isDirectory(tmp2), isTrue);
110+
});
111+
112+
test('parent is empty string', () {
113+
final tmp1 = fs.createTemporaryDirectory(parent: '');
114+
addTearDown(() => utils.deleteDirectory(tmp1));
115+
final tmp2 = fs.createTemporaryDirectory(parent: '');
116+
addTearDown(() => utils.deleteDirectory(tmp2));
117+
118+
expect(p.isRelative(tmp1), isTrue);
119+
expect(p.isRelative(tmp2), isTrue);
120+
expect(fs.same(tmp1, tmp2), isFalse);
121+
expect(utils.isDirectory(tmp1), isTrue);
122+
expect(utils.isDirectory(tmp2), isTrue);
123+
});
124+
125+
test('parent does not exist', () {
126+
expect(
127+
() => fs.createTemporaryDirectory(parent: '/foo/bar/baz'),
128+
throwsA(
129+
isA<PathNotFoundException>().having(
130+
(e) => e.errorCode,
131+
'errorCode',
132+
io.Platform.isWindows ? win32.ERROR_PATH_NOT_FOUND : errors.enoent,
138133
),
139-
);
140-
});
141-
142-
test('prefix is absolute path inside of parent', () {
143-
final subdir1 = '$tmp/dir1';
144-
io.Directory(subdir1).createSync();
145-
146-
final tmp1 = fileSystem.createTemporaryDirectory(
147-
parent: subdir1,
148-
prefix: '$subdir1/file',
149-
);
150-
151-
expect(tmp1, startsWith(subdir1));
152-
});
153-
154-
test('prefix is absolute path outside of parent', () {
155-
final subdir1 = '$tmp/dir1';
156-
final subdir2 = '$tmp/dir2';
157-
io.Directory(subdir1).createSync();
158-
io.Directory(subdir2).createSync();
159-
160-
final tmp1 = fileSystem.createTemporaryDirectory(
161-
parent: subdir1,
162-
prefix: '$subdir2/file',
163-
);
164-
165-
expect(tmp1, startsWith(subdir2));
166-
});
167-
168-
test('prefix is non-existant path inside temp directory', () {
169-
expect(
170-
() => fileSystem.createTemporaryDirectory(prefix: 'subdir/file'),
171-
throwsA(
172-
isA<PathNotFoundException>().having(
173-
(e) => e.errorCode,
174-
'errorCode',
175-
io.Platform.isWindows ? win32.ERROR_PATH_NOT_FOUND : errors.enoent,
176-
),
134+
),
135+
);
136+
});
137+
138+
test('prefix is absolute path inside of parent', () {
139+
final subdir1 = '$tmp/dir1';
140+
utils.createDirectory(subdir1);
141+
142+
final tmp1 = fs.createTemporaryDirectory(
143+
parent: subdir1,
144+
prefix: '$subdir1/file',
145+
);
146+
147+
expect(tmp1, startsWith(subdir1));
148+
});
149+
150+
test('prefix is absolute path outside of parent', () {
151+
final subdir1 = '$tmp/dir1';
152+
final subdir2 = '$tmp/dir2';
153+
utils
154+
..createDirectory(subdir1)
155+
..createDirectory(subdir2);
156+
157+
final tmp1 = fs.createTemporaryDirectory(
158+
parent: subdir1,
159+
prefix: '$subdir2/file',
160+
);
161+
162+
expect(tmp1, startsWith(subdir2));
163+
});
164+
165+
test('prefix is non-existant path inside temp directory', () {
166+
expect(
167+
() => fs.createTemporaryDirectory(prefix: 'subdir/file'),
168+
throwsA(
169+
isA<PathNotFoundException>().having(
170+
(e) => e.errorCode,
171+
'errorCode',
172+
io.Platform.isWindows ? win32.ERROR_PATH_NOT_FOUND : errors.enoent,
177173
),
178-
);
179-
});
180-
181-
test('prefix is existant path inside temp directory', () {
182-
final subdir1 = '$tmp/dir1';
183-
io.Directory(subdir1).createSync();
184-
185-
final tmp1 = fileSystem.createTemporaryDirectory(
186-
parent: tmp,
187-
prefix: 'dir1/file',
188-
);
189-
expect(p.canonicalize(tmp1), startsWith(p.canonicalize(subdir1)));
190-
expect(io.Directory(tmp1).existsSync(), isTrue);
191-
});
174+
),
175+
);
176+
});
177+
178+
test('prefix is existant path inside temp directory', () {
179+
final subdir1 = '$tmp/dir1';
180+
utils.createDirectory(subdir1);
181+
182+
final tmp1 = fs.createTemporaryDirectory(parent: tmp, prefix: 'dir1/file');
183+
expect(p.canonicalize(tmp1), startsWith(p.canonicalize(subdir1)));
184+
expect(utils.isDirectory(tmp1), isTrue);
185+
});
186+
}
187+
188+
void main() {
189+
group('createTemporaryDirectory', () {
190+
group('dart:io verification', () => tests(fileUtils(), fileSystem));
191+
group(
192+
'self verification',
193+
() => tests(FileSystemFileUtils(fileSystem), fileSystem),
194+
);
192195
});
193196
}

0 commit comments

Comments
 (0)