1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -enable-experimental-cxx-interop)
//
// REQUIRES: executable_test
import StdlibUnittest
import Functions
var FunctionsTestSuite = TestSuite("Calling functions in base classes")
FunctionsTestSuite.test("Basic methods from derived") {
let derived = Derived()
expectEqual(String(cString: derived.constInBase()!), "Base::constInBase")
expectEqual(String(cString: derived.takesArgsInBase(0, 1, 2)!), "Base::takesArgsInBase")
var mutableDerived = derived
expectEqual(String(cString: mutableDerived.mutatingInBase()!), "Base::mutatingInBase")
}
FunctionsTestSuite.test("NonTrivial methods from derived") {
let derived = Derived()
expectEqual(String(cString: derived.takesNonTrivialInBase(NonTrivial())!), "Base::takesNonTrivialInBase")
_ = derived.returnsNonTrivialInBase()
}
// TODO: eventually support templates.
//FunctionsTestSuite.test("Template from derived") {
// let derived = Derived()
// expectEqual(String(cString: derived.templateInBase(0)!), "Base::templateInBase")
//}
// TODO: eventually support static functions.
//FunctionsTestSuite.test("Static from derived") {
// expectEqual(String(cString: Derived.staticInBase()!), "Base::staticInBase")
//}
FunctionsTestSuite.test("Other base member from derived") {
let derived = Derived()
expectEqual(String(cString: derived.inOtherBase()!), "OtherBase::inOtherBase")
}
FunctionsTestSuite.test("Unambiguous members from derived") {
let derived = Derived()
expectEqual(derived.sameMethodNameSameSignature(), 21)
expectEqual(derived.sameMethodDifferentSignature(1), 2)
expectEqual(derived.sameMethodDifferentSignature(), 18)
}
FunctionsTestSuite.test("Basic methods from derived * 2") {
let dd = DerivedFromDerived()
expectEqual(String(cString: dd.constInBase()!), "Base::constInBase")
expectEqual(String(cString: dd.takesArgsInBase(0, 1, 2)!), "Base::takesArgsInBase")
var mutableDerived = dd
expectEqual(String(cString: mutableDerived.mutatingInBase()!), "Base::mutatingInBase")
}
FunctionsTestSuite.test("NonTrivial methods from derived * 2") {
let dd = DerivedFromDerived()
expectEqual(String(cString: dd.takesNonTrivialInBase(NonTrivial())!), "Base::takesNonTrivialInBase")
_ = dd.returnsNonTrivialInBase()
}
// TODO: eventually support static functions.
//FunctionsTestSuite.test("Static from derived * 2") {
// expectEqual(String(cString: DerivedFromDerived.staticInBase()!), "Base::staticInBase")
//}
FunctionsTestSuite.test("Other base member from derived * 2") {
let dd = DerivedFromDerived()
expectEqual(String(cString: dd.inOtherBase()!), "OtherBase::inOtherBase")
}
FunctionsTestSuite.test("base member from derived from non trivial") {
let dnt = DerivedFromNonTrivial()
expectEqual(String(cString: dnt.inNonTrivial()!), "NonTrivial::inNonTrivial")
expectEqual(String(cString: dnt.inNonTrivialWithArgs(0, 1)!), "NonTrivial::inNonTrivialWithArgs")
}
FunctionsTestSuite.test("non-empty derived from empty class") {
let derived = DerivedFromEmptyBaseClass()
expectEqual(String(cString: derived.inBase()!), "EmptyBaseClass::inBase")
expectEqual(derived.b, 42)
}
FunctionsTestSuite.test("base member calls do not require copying") {
let derived = CopyTrackedDerivedClass(42)
var copyCounter = getCopyCounter().pointee
expectEqual(derived.getX(), 42)
expectEqual(copyCounter, getCopyCounter().pointee)
expectEqual(derived.getDerivedX(), 42)
expectEqual(copyCounter, getCopyCounter().pointee)
let derivedDerived = CopyTrackedDerivedDerivedClass(-5)
copyCounter = getCopyCounter().pointee
expectEqual(derivedDerived.getX(), -5)
expectEqual(derivedDerived.getY(), 11)
expectEqual(copyCounter, getCopyCounter().pointee)
}
FunctionsTestSuite.test("mutating base member calls do not require copying") {
var derived = CopyTrackedDerivedClass(42)
var copyCounter = getCopyCounter().pointee
expectEqual(derived.getXMut(), 42)
expectEqual(copyCounter, getCopyCounter().pointee)
}
runAllTests()
|