diff options
| author | Albert Tang <tangalbert919@yahoo.com> | 2023-09-18 12:06:01 -0500 |
|---|---|---|
| committer | Jussi Pakkanen <jussi.pakkanen@mailbox.org> | 2025-06-23 12:50:41 +0300 |
| commit | 3d80541fe6327a5f2a6c1c7d915cddd8efd20061 (patch) | |
| tree | 153c77f851d617556565354df57a706e3376de53 /test cases/swift | |
| parent | 692501124f13da3c98284159b84c87ad12a1ecf9 (diff) | |
| download | meson-3d80541fe6327a5f2a6c1c7d915cddd8efd20061.tar.gz | |
test cases: Test Swift interoperability with C++
Skip if Swift 5.9 or above is not detected.
Diffstat (limited to 'test cases/swift')
| -rw-r--r-- | test cases/swift/10 mixed cpp/main.swift | 6 | ||||
| -rw-r--r-- | test cases/swift/10 mixed cpp/meson.build | 12 | ||||
| -rw-r--r-- | test cases/swift/10 mixed cpp/mylib.cpp | 22 | ||||
| -rw-r--r-- | test cases/swift/10 mixed cpp/mylib.h | 13 | ||||
| -rw-r--r-- | test cases/swift/11 mixed objcpp/main.swift | 2 | ||||
| -rw-r--r-- | test cases/swift/11 mixed objcpp/meson.build | 12 | ||||
| -rw-r--r-- | test cases/swift/11 mixed objcpp/mylib.h | 17 | ||||
| -rw-r--r-- | test cases/swift/11 mixed objcpp/mylib.mm | 29 |
8 files changed, 113 insertions, 0 deletions
diff --git a/test cases/swift/10 mixed cpp/main.swift b/test cases/swift/10 mixed cpp/main.swift new file mode 100644 index 000000000..c055dcdb7 --- /dev/null +++ b/test cases/swift/10 mixed cpp/main.swift @@ -0,0 +1,6 @@ +testCallFromSwift() +testCallWithParam("Calling C++ function from Swift with param is working") + +var test = Test() +var testtwo = Test(1) +test.testCallFromClass() diff --git a/test cases/swift/10 mixed cpp/meson.build b/test cases/swift/10 mixed cpp/meson.build new file mode 100644 index 000000000..94b70f07b --- /dev/null +++ b/test cases/swift/10 mixed cpp/meson.build @@ -0,0 +1,12 @@ +project('mixed cpp', 'cpp', 'swift') + +swiftc = meson.get_compiler('swift') + +# Testing C++ and Swift interoperability requires Swift 5.9 +if not swiftc.version().version_compare('>= 5.9') + error('MESON_SKIP_TEST Test requires Swift 5.9') +endif + +lib = static_library('mylib', 'mylib.cpp') +exe = executable('prog', 'main.swift', 'mylib.h', link_with: lib) +test('cpp interface', exe) diff --git a/test cases/swift/10 mixed cpp/mylib.cpp b/test cases/swift/10 mixed cpp/mylib.cpp new file mode 100644 index 000000000..0c616814e --- /dev/null +++ b/test cases/swift/10 mixed cpp/mylib.cpp @@ -0,0 +1,22 @@ +#include "mylib.h" +#include <iostream> + +Test::Test() { + std::cout << "Test initialized" << std::endl; +} + +Test::Test(int param) { + std::cout << "Test initialized with param " << param << std::endl; +} + +void Test::testCallFromClass() { + std::cout << "Calling C++ class function from Swift is working" << std::endl; +} + +void testCallFromSwift() { + std::cout << "Calling this C++ function from Swift is working" << std::endl; +} + +void testCallWithParam(const std::string ¶m) { + std::cout << param << std::endl; +} diff --git a/test cases/swift/10 mixed cpp/mylib.h b/test cases/swift/10 mixed cpp/mylib.h new file mode 100644 index 000000000..c465be44e --- /dev/null +++ b/test cases/swift/10 mixed cpp/mylib.h @@ -0,0 +1,13 @@ +#pragma once +#include <string> + +class Test { +public: + Test(); + Test(int param); + + void testCallFromClass(); +}; + +void testCallFromSwift(); +void testCallWithParam(const std::string ¶m); diff --git a/test cases/swift/11 mixed objcpp/main.swift b/test cases/swift/11 mixed objcpp/main.swift new file mode 100644 index 000000000..cd6dd2b3e --- /dev/null +++ b/test cases/swift/11 mixed objcpp/main.swift @@ -0,0 +1,2 @@ +var test: ObjCPPTest = ObjCPPTest() +test.testCallToObjCPP() diff --git a/test cases/swift/11 mixed objcpp/meson.build b/test cases/swift/11 mixed objcpp/meson.build new file mode 100644 index 000000000..69098e246 --- /dev/null +++ b/test cases/swift/11 mixed objcpp/meson.build @@ -0,0 +1,12 @@ +project('mixed objcpp', 'objcpp', 'swift') + +swiftc = meson.get_compiler('swift') + +# Testing Objective-C++ and Swift interoperability requires Swift 5.9 +if not swiftc.version().version_compare('>= 5.9') + error('MESON_SKIP_TEST Test requires Swift 5.9') +endif + +lib = static_library('mylib', 'mylib.mm') +exe = executable('prog', 'main.swift', 'mylib.h', link_with: lib) +test('objcpp interface', exe) diff --git a/test cases/swift/11 mixed objcpp/mylib.h b/test cases/swift/11 mixed objcpp/mylib.h new file mode 100644 index 000000000..1e7b23d70 --- /dev/null +++ b/test cases/swift/11 mixed objcpp/mylib.h @@ -0,0 +1,17 @@ +#pragma once +#import <Foundation/Foundation.h> + +class Test { +public: + Test(); + + void testCallFromClass(); +}; + +@interface ObjCPPTest: NSObject { + @private Test *test; +} +- (id)init; +- (void)dealloc; +- (void)testCallToObjCPP; +@end diff --git a/test cases/swift/11 mixed objcpp/mylib.mm b/test cases/swift/11 mixed objcpp/mylib.mm new file mode 100644 index 000000000..f7e9ab3f1 --- /dev/null +++ b/test cases/swift/11 mixed objcpp/mylib.mm @@ -0,0 +1,29 @@ +#include "mylib.h" +#include <iostream> + +Test::Test() { + std::cout << "Test initialized" << std::endl; +} + +void Test::testCallFromClass() { + std::cout << "Calling Objective-C++ class function from Swift is working" << std::endl; +} + +@implementation ObjCPPTest +- (id)init { + self = [super init]; + if (self) { + test = new Test(); + } + return self; +} + +- (void)dealloc { + delete test; + [super dealloc]; +} + +- (void)testCallToObjCPP { + test->testCallFromClass(); +} +@end |
