// RUN: %target-run-simple-swift | %FileCheck %s // REQUIRES: executable_test // REQUIRES: objc_interop import Foundation // Add a method to String to make sure a value is really a String and not // implicitly converted from an NSString, since method lookup doesn't see through // implicit conversions. extension String { func reallyAString() -> String { return self } } func printString(_ x: String) { print(x) } func printDescription(_ o: AnyObject) { print(o.description!.reallyAString()) } class Pootie : NSObject { override var description : String { return "cole me down on the panny sty" } func sinePittyOnRunnyKine(_ x: String) -> String { return "\(x). sa-da-tay" } } var a:NSNumber = 2001 printDescription(a) // CHECK: 2001 var p = Pootie() printDescription(p) // CHECK: cole me down on the panny sty var s1:String = "wa-da-ta" // We don't say 'var s2:NSString = "..."' in order to keep this test independent of the // ABI of NSString.convertFromStringLiteral. var s2s:String = "kappa-chow" var s2 = s2s as NSString printDescription(s2) // CHECK: kappa-chow printDescription(p.sinePittyOnRunnyKine(s2 as String) as NSString) // CHECK: kappa-chow. sa-da-tay var s3:String = s2.appendingPathComponent(s1).reallyAString() printDescription(s3 as NSString) // CHECK: kappa-chow/wa-da-ta // Unicode conversion var s4 = NSString(string: "\u{f8ff}\u{fffd}") as String printDescription(s4 as NSString) // CHECK: � // NSCFConstantString conversion var s5 : String = NSExceptionName.rangeException.rawValue as String printDescription(s5 as NSString) // CHECK: NSRangeException // Check conversions to AnyObject var s6: NSString = "foo" var ao: Any = s6.copy() var s7 = ao as! NSString var s8 = ao as? String // CHECK-NEXT: done print("done")