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