Files
swift-mirror/test/expr/cast/array_downcast_Foundation.swift
Vinicius Vendramini 39d3963131 Fix broken tests
- Many tests got broken because of two things:
  - AST dump now outputs to stdout, but many tests expected stderr. This was a straightforward fix.
  - Many tests call swift with specific parameters; specifically, many call `swift frontend` directly. This makes them go through the compiler in unexpected ways, and specifically it makes them not have primary files, which breaks the new AST dump implementation. This commit adds the old implementation as a fallback for those cases, except it dumps to `stdout` to maintain some consistence.

Finally, the `/test/Driver/filelists.swift` failed for unknown reasons. It seems its output now had some lines out of order, and fixing the order made the test pass. However, as the reasons why it failed are unknown, this fix might not have been a good idea. Corrections are welcome.
2018-11-14 13:38:01 -02:00

69 lines
3.5 KiB
Swift

// RUN: %empty-directory(%t)
// FIXME: BEGIN -enable-source-import hackaround
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-module -o %t %clang-importer-sdk-path/swift-modules/Darwin.swift
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-module -o %t %clang-importer-sdk-path/swift-modules/Foundation.swift
// FIXME: END -enable-source-import hackaround
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -typecheck %s -verify
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -dump-ast -verify | %FileCheck %s
// REQUIRES: objc_interop
import Foundation
func testDowncastObjectToArray(obj: AnyObject, objImplicit: AnyObject!) {
var nsstrArr1 = (obj as! [NSString])! // expected-error{{cannot force unwrap value of non-optional type '[NSString]'}}{{39-40=}}
var strArr1 = (obj as! [String])! // expected-error{{cannot force unwrap value of non-optional type '[String]'}}{{35-36=}}
var nsstrArr2 = (objImplicit as! [NSString])! // expected-error{{cannot force unwrap value of non-optional type '[NSString]'}}{{47-48=}}
var strArr2 = (objImplicit as! [String])! // expected-error{{cannot force unwrap value of non-optional type '[String]'}}{{43-44=}}
}
func testArrayDowncast(arr: [AnyObject], arrImplicit: [AnyObject]!) {
var nsstrArr1 = (arr as! [NSString])! // expected-error{{cannot force unwrap value of non-optional type '[NSString]'}} {{39-40=}}
var strArr1 = (arr as! [String])! // expected-error{{cannot force unwrap value of non-optional type '[String]'}} {{35-36=}}
var nsstrArr2 = (arrImplicit as! [NSString])! // expected-error{{cannot force unwrap value of non-optional type '[NSString]'}} {{47-48=}}
var strArr2 = (arrImplicit as! [String])! // expected-error{{cannot force unwrap value of non-optional type '[String]'}} {{43-44=}}
}
func testDowncastNSArrayToArray(nsarray: NSArray) {
_ = nsarray as! [NSString]
_ = nsarray as! [String]
}
// CHECK-LABEL: testDowncastOptionalObject
func testDowncastOptionalObject(obj: AnyObject?!) -> [String]? {
// CHECK: (optional_evaluation_expr implicit type='[String]?'
// CHECK-NEXT: (inject_into_optional implicit type='[String]?'
// CHECK: (forced_checked_cast_expr type='[String]'{{.*value_cast}}
// CHECK: (bind_optional_expr implicit type='AnyObject'
// CHECK-NEXT: (force_value_expr implicit type='AnyObject?'
// CHECK-NEXT: (declref_expr type='AnyObject??'
return obj as! [String]?
}
// CHECK-LABEL: testDowncastOptionalObjectConditional
func testDowncastOptionalObjectConditional(obj: AnyObject?!) -> [String]?? {
// CHECK: (optional_evaluation_expr implicit type='[String]??'
// CHECK-NEXT: (inject_into_optional implicit type='[String]??'
// CHECK-NEXT: (optional_evaluation_expr implicit type='[String]?'
// CHECK-NEXT: (inject_into_optional implicit type='[String]?'
// CHECK-NEXT: (bind_optional_expr implicit type='[String]'
// CHECK-NEXT: (conditional_checked_cast_expr type='[String]?' {{.*value_cast}} writtenType='[String]?'
// CHECK-NEXT: (bind_optional_expr implicit type='AnyObject'
// CHECK-NEXT: (bind_optional_expr implicit type='AnyObject?'
// CHECK-NEXT: (declref_expr type='AnyObject??'
return obj as? [String]?
}
// Do not crash examining the casted-to (or tested) type if it is
// invalid (null or error_type).
class rdar28583595 : NSObject {
public func test(i: Int) {
if i is Array {} // expected-error {{generic parameter 'Element' could not be inferred}}
// expected-note@-1 {{explicitly specify the generic arguments to fix this issue}}
}
}