blob: dfc06a3dfcb328fd8f75b26f8a785ac42891dc0f [file] [log] [blame]
// RUN: %{swiftc} %s -o %T/Asynchronous-Predicates
// RUN: %T/Asynchronous-Predicates > %t || true
// RUN: %{xctest_checker} %t %s
#if os(macOS)
import SwiftXCTest
#else
import XCTest
#endif
// CHECK: Test Suite 'All tests' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Suite '.*\.xctest' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Suite 'PredicateExpectationsTestCase' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
class PredicateExpectationsTestCase: XCTestCase {
// CHECK: Test Case 'PredicateExpectationsTestCase.test_immediatelyTruePredicate_passes' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Case 'PredicateExpectationsTestCase.test_immediatelyTruePredicate_passes' passed \(\d+\.\d+ seconds\)
func test_immediatelyTruePredicate_passes() {
let predicate = NSPredicate(value: true)
expectation(for: predicate)
waitForExpectations(timeout: 0.1)
}
// CHECK: Test Case 'PredicateExpectationsTestCase.test_immediatelyFalsePredicate_fails' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: .*/Tests/Functional/Asynchronous/Predicates/Expectations/main.swift:[[@LINE+5]]: error: PredicateExpectationsTestCase.test_immediatelyFalsePredicate_fails : Asynchronous wait failed - Exceeded timeout of 0.1 seconds, with unfulfilled expectations: Expect predicate `<NSPredicate: 0x[0-9A-Fa-f]{1,16}>`
// CHECK: Test Case 'PredicateExpectationsTestCase.test_immediatelyFalsePredicate_fails' failed \(\d+\.\d+ seconds\)
func test_immediatelyFalsePredicate_fails() {
let predicate = NSPredicate(value: false)
expectation(for: predicate)
waitForExpectations(timeout: 0.1)
}
// CHECK: Test Case 'PredicateExpectationsTestCase.test_delayedTruePredicate_passes' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Case 'PredicateExpectationsTestCase.test_delayedTruePredicate_passes' passed \(\d+\.\d+ seconds\)
func test_delayedTruePredicate_passes() {
var didEvaluate = false
let predicate = NSPredicate(block: { evaluatedObject, bindings in
XCTAssertNil(evaluatedObject)
defer { didEvaluate = true }
return didEvaluate
})
expectation(for: predicate)
waitForExpectations(timeout: 0.1)
}
// CHECK: Test Case 'PredicateExpectationsTestCase.test_immediatelyTrueDelayedFalsePredicate_passes' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Case 'PredicateExpectationsTestCase.test_immediatelyTrueDelayedFalsePredicate_passes' passed \(\d+\.\d+ seconds\)
func test_immediatelyTrueDelayedFalsePredicate_passes() {
var didEvaluate = false
let predicate = NSPredicate(block: { evaluatedObject, bindings in
XCTAssertNil(evaluatedObject)
defer { didEvaluate = true }
return !didEvaluate
})
expectation(for: predicate)
XCTAssertTrue(didEvaluate)
waitForExpectations(timeout: 0.1)
}
// CHECK: Test Case 'PredicateExpectationsTestCase.test_blockPredicateWithNilObject_passes' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Case 'PredicateExpectationsTestCase.test_blockPredicateWithNilObject_passes' passed \(\d+\.\d+ seconds\)
func test_blockPredicateWithNilObject_passes() {
var flag = false
let predicate = NSPredicate(block: { _, _ in
return flag
})
expectation(for: predicate, evaluatedWith: nil)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
flag = true
}
waitForExpectations(timeout: 1)
XCTAssertTrue(flag)
}
// CHECK: Test Case 'PredicateExpectationsTestCase.test_blockPredicateWithObject_passes' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: Test Case 'PredicateExpectationsTestCase.test_blockPredicateWithObject_passes' passed \(\d+\.\d+ seconds\)
func test_blockPredicateWithObject_passes() {
class Foo { var x = false }
let foo = Foo()
let predicate = NSPredicate(block: { evaluatedObject, _ in
guard let object = evaluatedObject as? Foo else { return false }
return object.x
})
expectation(for: predicate, evaluatedWith: foo)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
foo.x = true
}
waitForExpectations(timeout: 1)
XCTAssertTrue(foo.x)
}
static var allTests = {
return [
("test_immediatelyTruePredicate_passes", test_immediatelyTruePredicate_passes),
("test_immediatelyFalsePredicate_fails", test_immediatelyFalsePredicate_fails),
("test_delayedTruePredicate_passes", test_delayedTruePredicate_passes),
("test_immediatelyTrueDelayedFalsePredicate_passes", test_immediatelyTrueDelayedFalsePredicate_passes),
("test_blockPredicateWithNilObject_passes", test_blockPredicateWithNilObject_passes),
("test_blockPredicateWithObject_passes", test_blockPredicateWithObject_passes),
]
}()
}
// CHECK: Test Suite 'PredicateExpectationsTestCase' failed at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: \t Executed 6 tests, with 1 failure \(0 unexpected\) in \d+\.\d+ \(\d+\.\d+\) seconds
XCTMain([testCase(PredicateExpectationsTestCase.allTests)])
// CHECK: Test Suite '.*\.xctest' failed at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: \t Executed 6 tests, with 1 failure \(0 unexpected\) in \d+\.\d+ \(\d+\.\d+\) seconds
// CHECK: Test Suite 'All tests' failed at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
// CHECK: \t Executed 6 tests, with 1 failure \(0 unexpected\) in \d+\.\d+ \(\d+\.\d+\) seconds