mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
It is expected that under enable-private-import internal/private symbols become public. So that symbol-diffing would fail. Disable symbol diffing under that test mode. rdar://51304243
176 lines
3.6 KiB
Swift
176 lines
3.6 KiB
Swift
// RUN: %target-resilience-test
|
|
// REQUIRES: executable_test
|
|
|
|
import StdlibUnittest
|
|
import class_change_size
|
|
|
|
|
|
var ClassChangeSizeTest = TestSuite("ClassChangeSize")
|
|
|
|
func increment(_ c: inout ChangeSize) {
|
|
c.version += 1
|
|
}
|
|
|
|
// Change field offsets and size of a class from a different
|
|
// resilience domain
|
|
|
|
ClassChangeSizeTest.test("ChangeFieldOffsetsOfFixedLayout") {
|
|
let t = ChangeFieldOffsetsOfFixedLayout(major: 7, minor: 5, patch: 3)
|
|
|
|
do {
|
|
expectEqual(t.getVersion(), "7.5.3")
|
|
}
|
|
|
|
do {
|
|
t.minor.version = 1
|
|
t.patch.version = 2
|
|
expectEqual(t.getVersion(), "7.1.2")
|
|
}
|
|
|
|
do {
|
|
increment(&t.patch)
|
|
expectEqual(t.getVersion(), "7.1.3")
|
|
}
|
|
}
|
|
|
|
// Superclass and subclass are in a different resilience domain
|
|
|
|
ClassChangeSizeTest.test("ChangeSizeOfSuperclass") {
|
|
let t = ChangeSizeOfSuperclass()
|
|
|
|
do {
|
|
expectEqual(t.getVersion(), "7.0.0 (Big Bang)")
|
|
}
|
|
|
|
do {
|
|
t.major.version = 6
|
|
t.minor.version = 0
|
|
t.patch.version = 5
|
|
t.codename = "Big Deal"
|
|
expectEqual(t.getVersion(), "6.0.5 (Big Deal)")
|
|
}
|
|
|
|
do {
|
|
increment(&t.patch)
|
|
t.codename = "Six Pack"
|
|
expectEqual(t.getVersion(), "6.0.6 (Six Pack)")
|
|
}
|
|
}
|
|
|
|
// Change field offsets and size of a class from the current
|
|
// resilience domain
|
|
|
|
class ChangeFieldOffsetsOfMyFixedLayout {
|
|
init(major: Int32, minor: Int32, patch: Int32) {
|
|
self.major = ChangeSize(version: major)
|
|
self.minor = ChangeSize(version: minor)
|
|
self.patch = ChangeSize(version: patch)
|
|
}
|
|
|
|
var major: ChangeSize
|
|
var minor: ChangeSize
|
|
var patch: ChangeSize
|
|
|
|
func getVersion() -> String {
|
|
return "\(major.version).\(minor.version).\(patch.version)"
|
|
}
|
|
}
|
|
|
|
ClassChangeSizeTest.test("ChangeFieldOffsetsOfMyFixedLayout") {
|
|
let t = ChangeFieldOffsetsOfMyFixedLayout(major: 9, minor: 2, patch: 1)
|
|
|
|
do {
|
|
expectEqual(t.getVersion(), "9.2.1")
|
|
}
|
|
|
|
do {
|
|
t.major.version = 7
|
|
t.minor.version = 6
|
|
t.patch.version = 1
|
|
expectEqual(t.getVersion(), "7.6.1")
|
|
}
|
|
|
|
do {
|
|
increment(&t.patch)
|
|
expectEqual(t.getVersion(), "7.6.2")
|
|
}
|
|
}
|
|
|
|
// Subclass is in our resilience domain, superclass is in a
|
|
// different resilience domain
|
|
|
|
class MyChangeSizeOfSuperclass : ChangeFieldOffsetsOfFixedLayout {
|
|
init() {
|
|
self.codename = "Road Warrior"
|
|
|
|
super.init(major: 7, minor: 0, patch: 1)
|
|
}
|
|
|
|
var codename: String
|
|
|
|
override func getVersion() -> String {
|
|
return "\(super.getVersion()) (\(codename))";
|
|
}
|
|
}
|
|
|
|
ClassChangeSizeTest.test("MyChangeSizeOfSuperclass") {
|
|
let t = MyChangeSizeOfSuperclass()
|
|
|
|
do {
|
|
expectEqual(t.getVersion(), "7.0.1 (Road Warrior)")
|
|
}
|
|
|
|
do {
|
|
t.minor.version = 5
|
|
t.patch.version = 2
|
|
t.codename = "Marconi"
|
|
expectEqual(t.getVersion(), "7.5.2 (Marconi)")
|
|
}
|
|
|
|
do {
|
|
increment(&t.patch)
|
|
t.codename = "Unity"
|
|
expectEqual(t.getVersion(), "7.5.3 (Unity)")
|
|
}
|
|
}
|
|
|
|
// Subclass and superclass are both in our resilience domain
|
|
|
|
class ChangeSizeOfMySuperclass : ChangeFieldOffsetsOfFixedLayout {
|
|
init() {
|
|
self.codename = "Big Bang"
|
|
|
|
super.init(major: 7, minor: 0, patch: 0)
|
|
}
|
|
|
|
var codename: String
|
|
|
|
override func getVersion() -> String {
|
|
return "\(super.getVersion()) (\(codename))";
|
|
}
|
|
}
|
|
|
|
ClassChangeSizeTest.test("ChangeSizeOfMySuperclass") {
|
|
let t = ChangeSizeOfMySuperclass()
|
|
|
|
do {
|
|
expectEqual(t.getVersion(), "7.0.0 (Big Bang)")
|
|
}
|
|
|
|
do {
|
|
t.major.version = 6
|
|
t.minor.version = 0
|
|
t.patch.version = 5
|
|
t.codename = "Big Deal"
|
|
expectEqual(t.getVersion(), "6.0.5 (Big Deal)")
|
|
}
|
|
|
|
do {
|
|
increment(&t.patch)
|
|
t.codename = "Six Pack"
|
|
expectEqual(t.getVersion(), "6.0.6 (Six Pack)")
|
|
}
|
|
}
|
|
|
|
runAllTests()
|