1 package com.google.devtools.ksp.processing.impl
2 
3 import com.google.devtools.ksp.AnyChanges
4 import com.google.devtools.ksp.processing.Dependencies
5 import org.junit.Assert
6 import org.junit.Before
7 import org.junit.Test
8 import java.io.File
9 import java.nio.file.Files
10 
11 class CodeGeneratorImplTest {
12 
13     lateinit var codeGenerator: CodeGeneratorImpl
14     lateinit var baseDir: File
15 
16     @Before
setupnull17     fun setup() {
18         baseDir = Files.createTempDirectory("project").toFile()
19         val classesDir = File(baseDir, "classes")
20         classesDir.mkdir()
21         val javaDir = File(baseDir, "java")
22         javaDir.mkdir()
23         val kotlinDir = File(baseDir, "kotlin")
24         kotlinDir.mkdir()
25         val resourcesDir = File(baseDir, "resources")
26         resourcesDir.mkdir()
27         codeGenerator = CodeGeneratorImpl(
28             classesDir,
29             javaDir,
30             kotlinDir,
31             resourcesDir,
32             baseDir,
33             AnyChanges(baseDir),
34             emptyList(),
35             true
36         )
37     }
38 
39     @Test
testCreatingAFilenull40     fun testCreatingAFile() {
41         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a.b.c", "Test", "java")
42         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a.b.c", "Test", "kt")
43         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a.b.c", "Test", "class")
44         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a.b.c", "Test", "")
45 
46         val files = codeGenerator.generatedFile.toList()
47         Assert.assertEquals(File(baseDir, "java/a/b/c/Test.java"), files[0])
48         Assert.assertEquals(File(baseDir, "kotlin/a/b/c/Test.kt"), files[1])
49         Assert.assertEquals(File(baseDir, "classes/a/b/c/Test.class"), files[2])
50         Assert.assertEquals(File(baseDir, "resources/a/b/c/Test"), files[3])
51 
52         try {
53             codeGenerator.outputs
54         } catch (e: Exception) {
55             Assert.fail("Failed to get outputs: ${e.message}")
56         }
57     }
58 
59     @Test
testCreatingAFileWithSlashnull60     fun testCreatingAFileWithSlash() {
61         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a/b/c", "Test", "java")
62         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a/b/c", "Test", "kt")
63         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a/b/c", "Test", "class")
64         codeGenerator.createNewFile(Dependencies.ALL_FILES, "a/b/c", "Test", "")
65 
66         val files = codeGenerator.generatedFile.toList()
67         Assert.assertEquals(File(baseDir, "java/a/b/c/Test.java"), files[0])
68         Assert.assertEquals(File(baseDir, "kotlin/a/b/c/Test.kt"), files[1])
69         Assert.assertEquals(File(baseDir, "classes/a/b/c/Test.class"), files[2])
70         Assert.assertEquals(File(baseDir, "resources/a/b/c/Test"), files[3])
71 
72         try {
73             codeGenerator.outputs
74         } catch (e: Exception) {
75             Assert.fail("Failed to get outputs: ${e.message}")
76         }
77     }
78 
79     @Test
testCreatingAFileWithPathnull80     fun testCreatingAFileWithPath() {
81         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/Test", "java")
82         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/Test")
83         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/Test", "class")
84         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/Test", "")
85 
86         val files = codeGenerator.generatedFile.toList()
87         Assert.assertEquals(File(baseDir, "java/a/b/c/Test.java"), files[0])
88         Assert.assertEquals(File(baseDir, "kotlin/a/b/c/Test.kt"), files[1])
89         Assert.assertEquals(File(baseDir, "classes/a/b/c/Test.class"), files[2])
90         Assert.assertEquals(File(baseDir, "resources/a/b/c/Test"), files[3])
91 
92         try {
93             codeGenerator.outputs
94         } catch (e: Exception) {
95             Assert.fail("Failed to get outputs: ${e.message}")
96         }
97     }
98 
99     @Test
testCreatingAFileWithPathAndDotsnull100     fun testCreatingAFileWithPathAndDots() {
101         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/dir.with.dot/Test", "java")
102         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/dir.with.dot/Test")
103         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/dir.with.dot/Test", "class")
104         codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "a/b/c/dir.with.dot/Test", "")
105 
106         val files = codeGenerator.generatedFile.toList()
107         Assert.assertEquals(File(baseDir, "java/a/b/c/dir.with.dot/Test.java"), files[0])
108         Assert.assertEquals(File(baseDir, "kotlin/a/b/c/dir.with.dot/Test.kt"), files[1])
109         Assert.assertEquals(File(baseDir, "classes/a/b/c/dir.with.dot/Test.class"), files[2])
110         Assert.assertEquals(File(baseDir, "resources/a/b/c/dir.with.dot/Test"), files[3])
111 
112         try {
113             codeGenerator.outputs
114         } catch (e: Exception) {
115             Assert.fail("Failed to get outputs: ${e.message}")
116         }
117     }
118 
119     @Test
testCreatingAFileByPathWithInvalidPathnull120     fun testCreatingAFileByPathWithInvalidPath() {
121         try {
122             codeGenerator.createNewFileByPath(Dependencies.ALL_FILES, "../../b/c/Test", "java")
123             Assert.fail()
124         } catch (e: java.lang.IllegalStateException) {
125             Assert.assertEquals(e.message, "requested path is outside the bounds of the required directory")
126         }
127     }
128 }
129