mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This commit focuses the basics: setting up the relevant stanzas in lit.cfg and adding platform conditionals for importing Glibc. Future commits will deal with other portability fixes.
90 lines
3.1 KiB
Swift
90 lines
3.1 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift-dylib(%t/%target-library-name(TestDidWillSet)) -module-name TestDidWillSet -emit-module -emit-module-path %t/TestDidWillSet.swiftmodule -swift-version 5 %S/Inputs/dynamic_replacement_property_observer_orig.swift -Xfrontend -enable-private-imports -Xfrontend -enable-implicit-dynamic
|
|
// RUN: %target-build-swift-dylib(%t/%target-library-name(TestDidWillSet2)) -I%t -L%t -lTestDidWillSet %target-rpath(%t) -module-name TestDidWillSet2 -swift-version 5 %S/Inputs/dynamic_replacement_property_observer_repl.swift
|
|
// RUN: %target-build-swift -I%t -L%t -lTestDidWillSet -o %t/main %target-rpath(%t) %s -swift-version 5
|
|
// RUN: %target-codesign %t/main %t/%target-library-name(TestDidWillSet) %t/%target-library-name(TestDidWillSet2)
|
|
// RUN: %target-run %t/main %t/%target-library-name(TestDidWillSet) %t/%target-library-name(TestDidWillSet)
|
|
|
|
// REQUIRES: executable_test
|
|
|
|
// UNSUPPORTED: swift_test_mode_optimize_none_with_implicit_dynamic
|
|
|
|
@_private(sourceFile: "dynamic_replacement_property_observer_orig.swift") import TestDidWillSet
|
|
|
|
#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
|
|
import Darwin
|
|
#elseif os(Linux) || os(FreeBSD) || os(OpenBSD) || os(PS4) || os(Android) || os(Cygwin) || os(Haiku)
|
|
import Glibc
|
|
#elseif os(Windows)
|
|
import MSVCRT
|
|
import WinSDK
|
|
#else
|
|
#error("Unsupported platform")
|
|
#endif
|
|
|
|
private func target_library_name(_ name: String) -> String {
|
|
#if os(iOS) || os(macOS) || os(tvOS) || os(watchOS)
|
|
return "lib\(name).dylib"
|
|
#elseif os(Windows)
|
|
return "\(name).dll"
|
|
#else
|
|
return "lib\(name).so"
|
|
#endif
|
|
}
|
|
|
|
var s = Stored(i: 5, y: 5, z: 5)
|
|
var h = HeapStored()
|
|
|
|
// CHECK: Stored.i.didSet from 5 to 10 original
|
|
s.i = 10
|
|
// CHECK: Stored.y.willSet from 5 to 11 original
|
|
s.y = 11
|
|
// CHECK: Stored.z.willSet from 5 to 12 original
|
|
// CHECK: Stored.z.didSet from 5 to 12 original
|
|
s.z = 12
|
|
|
|
// CHECK: HeapStored.z.willSet from 5 to 16 original
|
|
// CHECK: HeapStored.z.didSet from 5 to 16 original
|
|
h.z = 16
|
|
|
|
// CHECK: myglobal.didSet from 1 to 13 original
|
|
myglobal = 13
|
|
// CHECK: myglobal2.willSet from 1 to 14 original
|
|
myglobal2 = 14
|
|
// CHECK: myglobal3.willSet from 1 to 15 original
|
|
// CHECK: myglobal3.didSet from 1 to 15 original
|
|
myglobal3 = 15
|
|
|
|
var executablePath = CommandLine.arguments[0]
|
|
executablePath.removeLast(4)
|
|
|
|
// Now, test with the module containing the replacements.
|
|
|
|
#if os(Linux)
|
|
_ = dlopen(target_library_name("Module2"), RTLD_NOW)
|
|
#elseif os(Windows)
|
|
_ = LoadLibraryA(target_library_name("Module2"))
|
|
#else
|
|
_ = dlopen(executablePath+target_library_name("Module2"), RTLD_NOW)
|
|
#endif
|
|
|
|
// CHECK: Stored.i.didSet from 5 to 10 replacement
|
|
s.i = 10
|
|
// CHECK: Stored.y.willSet from 5 to 11 replacement
|
|
s.y = 11
|
|
// CHECK: Stored.z.willSet from 5 to 12 replacement
|
|
// CHECK: Stored.z.didSet from 5 to 12 replacement
|
|
s.z = 12
|
|
|
|
// CHECK: HeapStored.z.willSet from 5 to 16 replacement
|
|
// CHECK: HeapStored.z.didSet from 5 to 16 replacement
|
|
h.z = 16
|
|
|
|
// CHECK: myglobal.didSet from 1 to 13 replacement
|
|
myglobal = 13
|
|
// CHECK: myglobal2.willSet from 1 to 14 replacement
|
|
myglobal2 = 14
|
|
// CHECK: myglobal3.willSet from 1 to 15 replacement
|
|
// CHECK: myglobal3.didSet from 1 to 15 replacement
|
|
myglobal3 = 15
|