@@ -20,18 +20,18 @@ import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/is
2020
2121class WrapJavaTests : XCTestCase {
2222
23- let JavaSource : String =
24- """
25- package com.example;
26-
27- class ExampleSimpleClass {}
28- """
29-
3023 func testWrapJavaFromCompiledJavaSource( ) async throws {
31- let classpathURL = try await compileJava ( JavaSource)
24+ let classpathURL = try await compileJava (
25+ """
26+ package com.example;
27+
28+ class ExampleSimpleClass {}
29+ """ )
3230
3331 try assertWrapJavaOutput (
34- javaClassName: " com.example.ExampleSimpleClass " ,
32+ javaClassNames: [
33+ " com.example.ExampleSimpleClass "
34+ ] ,
3535 classpath: [ classpathURL] ,
3636 expectedChunks: [
3737 """
@@ -45,6 +45,58 @@ class WrapJavaTests: XCTestCase {
4545 ]
4646 )
4747 }
48+
49+ /*
50+ /Users/ktoso/code/voldemort-swift-java/.build/plugins/outputs/voldemort-swift-java/VoldemortSwiftJava/destination/SwiftJavaPlugin/generated/CompressingStore.swift:6:30: error: reference to generic type 'AbstractStore' requires arguments in <...>
51+ 4 |
52+ 5 | @JavaClass("voldemort.store.compress.CompressingStore")
53+ 6 | open class CompressingStore: AbstractStore {
54+ | `- error: reference to generic type 'AbstractStore' requires arguments in <...>
55+ 7 | @JavaMethod
56+ 8 | open override func getCapability(_ arg0: StoreCapabilityType?) -> JavaObject!
57+
58+ /Users/ktoso/code/voldemort-swift-java/.build/plugins/outputs/voldemort-swift-java/VoldemortSwiftJava/destination/SwiftJavaPlugin/generated/AbstractStore.swift:6:12: note: generic type 'AbstractStore' declared here
59+ 4 |
60+ 5 | @JavaClass("voldemort.store.AbstractStore", implements: Store<JavaObject, JavaObject, JavaObject>.self)
61+ 6 | open class AbstractStore<K: AnyJavaObject, V: AnyJavaObject, T: AnyJavaObject>: JavaObject {
62+ | `- note: generic type 'AbstractStore' declared here
63+ 7 | @JavaMethod
64+ 8 | @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil)
65+ */
66+ func testGenericSuperclass( ) async throws {
67+ let classpathURL = try await compileJava (
68+ """
69+ package com.example;
70+
71+ class ByteArray {}
72+ // class CompressingStore extends AbstractStore<ByteArray, byte[], byte[]> {}
73+ abstract class AbstractStore<K, V, T> implements Store<K, V, T> {}
74+ interface Store<K, V, T> {}
75+
76+ """ )
77+
78+ try assertWrapJavaOutput (
79+ javaClassNames: [
80+ " com.example.ByteArray " ,
81+ " com.example.Store " ,
82+ ] ,
83+ classpath: [ classpathURL] ,
84+ expectedChunks: [
85+ """
86+ import CSwiftJavaJNI
87+ import SwiftJava
88+ """ ,
89+ """
90+ @JavaClass( " com.example.ByteArray " )
91+ open class ByteArray: JavaObject {
92+ """ ,
93+ """
94+ @JavaInterface( " com.example.Store " )
95+ public struct Store<K: AnyJavaObject, V: AnyJavaObject, T: AnyJavaObject> {
96+ """
97+ ]
98+ )
99+ }
48100}
49101
50102fileprivate func createTemporaryDirectory( in directory: URL ) throws -> URL {
@@ -84,11 +136,10 @@ func compileJava(_ sourceText: String) async throws -> URL {
84136 return classesDirectory
85137}
86138
87-
88139/// Translate a Java class and assert that the translated output contains
89140/// each of the expected "chunks" of text.
90141func assertWrapJavaOutput(
91- javaClassName : String ,
142+ javaClassNames : [ String ] ,
92143 classpath: [ URL ] ,
93144 expectedChunks: [ String ] ,
94145 function: String = #function,
@@ -109,27 +160,32 @@ func assertWrapJavaOutput(
109160 let classLoader = try ! JavaClass < JavaClassLoader > ( environment: environment)
110161 . getSystemClassLoader ( ) !
111162
163+
164+ // FIXME: deduplicate this
165+ translator. startNewFile ( )
166+
167+ var swiftCompleteOutputText = " "
168+
112169 var javaClasses : [ JavaClass < JavaObject > ] = [ ]
113- guard let javaClass = try classLoader. loadClass ( javaClassName) else {
114- fatalError ( " Could not load Java class ' \( javaClassName) ' in test \( function) @ \( file) : \( line) ! " )
115- }
116- javaClasses. append ( javaClass)
170+ for javaClassName in javaClassNames {
171+ guard let javaClass = try classLoader. loadClass ( javaClassName) else {
172+ fatalError ( " Could not load Java class ' \( javaClassName) ' in test \( function) @ \( file) : \( line) ! " )
173+ }
174+ javaClasses. append ( javaClass)
117175
118- // FIXME: deduplicate this with SwiftJava.WrapJavaCommand.runCommand !!!
119- // TODO: especially because nested classes
120- // WrapJavaCommand().<TODO>
176+ // FIXME: deduplicate this with SwiftJava.WrapJavaCommand.runCommand !!!
177+ // TODO: especially because nested classes
178+ // WrapJavaCommand().<TODO>
121179
122- let swiftUnqualifiedName = javaClassName. javaClassNameToCanonicalName
123- . defaultSwiftNameForJavaClass
124- translator. translatedClasses [ javaClassName] =
125- . init( module: nil , name: swiftUnqualifiedName)
180+ let swiftUnqualifiedName = javaClassName. javaClassNameToCanonicalName
181+ . defaultSwiftNameForJavaClass
182+ translator. translatedClasses [ javaClassName] =
183+ . init( module: nil , name: swiftUnqualifiedName)
126184
127- try translator. validateClassConfiguration ( )
185+ try translator. validateClassConfiguration ( )
128186
129- // FIXME: deduplicate this
130- translator. startNewFile ( )
131- let swiftClassDecls = try translator. translateClass ( javaClass)
132- let importDecls = translator. getImportDecls ( )
187+ let swiftClassDecls = try translator. translateClass ( javaClass)
188+ let importDecls = translator. getImportDecls ( )
133189
134190 let swiftFileText =
135191 """
@@ -138,12 +194,18 @@ func assertWrapJavaOutput(
138194 \( swiftClassDecls. map { $0. description } . joined ( separator: " \n " ) )
139195
140196 """
197+ swiftCompleteOutputText += swiftFileText
198+ }
141199
142200 for expectedChunk in expectedChunks {
143- if swiftFileText . contains ( expectedChunk) {
201+ if swiftCompleteOutputText . contains ( expectedChunk) {
144202 continue
145203 }
146204
147- XCTFail ( " Expected chunk ' \( expectedChunk) ' not found in ' \( swiftFileText) ' " , file: file, line: line)
205+ XCTFail ( " Expected chunk ' \( expectedChunk) ' not found in ' \( swiftCompleteOutputText) ' " ,
206+ file: file, line: line)
148207 }
208+
209+ print ( " ============================================= " )
210+ print ( swiftCompleteOutputText)
149211}
0 commit comments