@@ -12,35 +12,47 @@ class PathExtensionsTest extends Specification {
12
12
@Shared
13
13
private Path tmpdir = Path . of(System . getProperty(" java.io.tmpdir" ))
14
14
@Shared
15
- private Path unwritable = tmpdir. resolve(" coder-gateway-test/path-extensions/unwritable" )
15
+ private Path unwritableFile = tmpdir. resolve(" coder-gateway-test/path-extensions/unwritable/file" )
16
+ @Shared
17
+ private Path writableFile = tmpdir. resolve(" coder-gateway-test/path-extensions/writable-file" )
16
18
17
19
void setupSpec () {
18
- if (unwritable. parent. toFile(). exists()) {
19
- unwritable. parent. toFile(). setWritable(true )
20
- unwritable. parent. toFile(). deleteDir()
20
+ // TODO: On Windows setWritable() only sets read-only; how do we set
21
+ // actual permissions? Initially I tried an existing dir like WINDIR
22
+ // which worked locally but in CI that is writable for some reason.
23
+ if (unwritableFile. parent. toFile(). exists()) {
24
+ unwritableFile. parent. toFile(). setWritable(true )
25
+ unwritableFile. parent. toFile(). deleteDir()
21
26
}
22
- Files . createDirectories(unwritable. parent)
23
- unwritable. toFile(). write(" text" )
24
- unwritable. toFile(). setWritable(false )
25
- unwritable. parent. toFile(). setWritable(false )
27
+ Files . createDirectories(unwritableFile. parent)
28
+ unwritableFile. toFile(). write(" text" )
29
+ writableFile. toFile(). write(" text" )
30
+ unwritableFile. toFile(). setWritable(false )
31
+ unwritableFile. parent. toFile(). setWritable(false )
26
32
}
27
33
28
- def " canWrite " () {
34
+ def " canCreateDirectory " () {
29
35
expect :
30
36
use(PathExtensionsKt ) {
31
- path. canWrite () == expected
37
+ path. canCreateDirectory () == expected
32
38
}
33
39
34
40
where :
35
- path | expected
36
- unwritable | false
37
- unwritable. resolve(" probably/nonexistent" ) | false
38
- Path . of(" relative to project" ) | true
39
- tmpdir. resolve(" ./foo/bar/../.." ) | true
40
- tmpdir | true
41
- tmpdir. resolve(" some/nested/non-existent/path" ) | true
42
- tmpdir. resolve(" with space" ) | true
43
- CoderCLIManager . getConfigDir() | true
44
- CoderCLIManager . getDataDir() | true
41
+ path | expected
42
+ unwritableFile | false
43
+ unwritableFile. resolve(" probably/nonexistent" ) | false
44
+ // TODO: Java reports read-only directories on Windows as writable.
45
+ unwritableFile. parent. resolve(" probably/nonexistent" ) | System . getProperty(" os.name" ). toLowerCase(). contains(" windows" )
46
+ writableFile | false
47
+ writableFile. parent | true
48
+ writableFile. resolve(" nested/under/file" ) | false
49
+ writableFile. parent. resolve(" nested/under/dir" ) | true
50
+ Path . of(" relative to project" ) | true
51
+ tmpdir. resolve(" ./foo/bar/../../coder-gateway-test/path-extensions" ) | true
52
+ tmpdir | true
53
+ tmpdir. resolve(" some/nested/non-existent/path" ) | true
54
+ tmpdir. resolve(" with space" ) | true
55
+ CoderCLIManager . getConfigDir() | true
56
+ CoderCLIManager . getDataDir() | true
45
57
}
46
58
}
0 commit comments