@@ -12,35 +12,47 @@ class PathExtensionsTest extends Specification {
1212 @Shared
1313 private Path tmpdir = Path . of(System . getProperty(" java.io.tmpdir" ))
1414 @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" )
1618
1719 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()
2126 }
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 )
2632 }
2733
28- def " canWrite " () {
34+ def " canCreateDirectory " () {
2935 expect :
3036 use(PathExtensionsKt ) {
31- path. canWrite () == expected
37+ path. canCreateDirectory () == expected
3238 }
3339
3440 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
4557 }
4658}
0 commit comments