summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Tang <tangalbert919@yahoo.com>2023-09-18 12:06:01 -0500
committerJussi Pakkanen <jussi.pakkanen@mailbox.org>2025-06-23 12:50:41 +0300
commit3d80541fe6327a5f2a6c1c7d915cddd8efd20061 (patch)
tree153c77f851d617556565354df57a706e3376de53
parent692501124f13da3c98284159b84c87ad12a1ecf9 (diff)
downloadmeson-3d80541fe6327a5f2a6c1c7d915cddd8efd20061.tar.gz
test cases: Test Swift interoperability with C++
Skip if Swift 5.9 or above is not detected.
-rw-r--r--test cases/swift/10 mixed cpp/main.swift6
-rw-r--r--test cases/swift/10 mixed cpp/meson.build12
-rw-r--r--test cases/swift/10 mixed cpp/mylib.cpp22
-rw-r--r--test cases/swift/10 mixed cpp/mylib.h13
-rw-r--r--test cases/swift/11 mixed objcpp/main.swift2
-rw-r--r--test cases/swift/11 mixed objcpp/meson.build12
-rw-r--r--test cases/swift/11 mixed objcpp/mylib.h17
-rw-r--r--test cases/swift/11 mixed objcpp/mylib.mm29
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 &param) {
+ 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 &param);
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