@@ -334,6 +334,33 @@ enum PlainEnum {}
334
334
protocol ProtocolA { }
335
335
protocol ProtocolB { }
336
336
337
+ class OuterClass {
338
+
339
+ private class PrivateGeneric < T, U> {
340
+ class InnerGeneric < X> {
341
+ class Inner { }
342
+ }
343
+ }
344
+
345
+ static func getPrivateGenericName( ) -> String {
346
+ return NSStringFromClass ( OuterClass . PrivateGeneric< Int, Bool> . self )
347
+ }
348
+ static func getInnerGenericName( ) -> String {
349
+ return NSStringFromClass ( OuterClass . PrivateGeneric < Int , Bool > . InnerGeneric< Float> . self )
350
+ }
351
+ static func getInnerName( ) -> String {
352
+ return NSStringFromClass ( OuterClass . PrivateGeneric < Int , Bool > . InnerGeneric < Float > . Inner. self)
353
+ }
354
+ }
355
+
356
+ // The private discriminator is not deterministic.
357
+ // Replace it with a constant string.
358
+ func removePrivateDiscriminator( _ symbol: String ) -> String {
359
+ let regexp = try ! NSRegularExpression ( pattern: " P[0-9]+ \\ $[0-9a-f]+ " )
360
+ let range = NSRange ( 0 ..< symbol. count)
361
+ return regexp. stringByReplacingMatches ( in: symbol, range: range, withTemplate: " XXX " )
362
+ }
363
+
337
364
Runtime . test ( " Generic class ObjC runtime names " ) {
338
365
expectEqual ( " _TtGC1a12GenericClassSi_ " ,
339
366
NSStringFromClass ( GenericClass< Int> . self ) )
@@ -385,6 +412,13 @@ Runtime.test("Generic class ObjC runtime names") {
385
412
expectEqual ( " _TtGC1a17MultiGenericClassGVS_13GenericStructSi_GOS_11GenericEnumGS2_Si___ " ,
386
413
NSStringFromClass ( MultiGenericClass < GenericStruct < Int > ,
387
414
GenericEnum < GenericEnum < Int > > > . self) )
415
+
416
+ expectEqual ( " _TtGCC1a10OuterClassXXXPrivateGeneric_SiSb_ " ,
417
+ removePrivateDiscriminator ( OuterClass . getPrivateGenericName ( ) ) )
418
+ expectEqual ( " _TtGCCC1a10OuterClassXXXPrivateGeneric12InnerGeneric_SiSb_Sf_ " ,
419
+ removePrivateDiscriminator ( OuterClass . getInnerGenericName ( ) ) )
420
+ expectEqual ( " _TtGCCCC1a10OuterClassXXXPrivateGeneric12InnerGeneric5Inner_SiSb_Sf__ " ,
421
+ removePrivateDiscriminator ( OuterClass . getInnerName ( ) ) )
388
422
}
389
423
390
424
@objc protocol P { }
0 commit comments