test: introduce link(er) tests - builds on standalone tests

This commit is contained in:
Jakub Konka
2022-05-28 11:44:53 +02:00
parent 74ed7c1f09
commit 38edef35bf
43 changed files with 182 additions and 89 deletions

7
test/link/objcpp/Foo.h Normal file
View File

@@ -0,0 +1,7 @@
#import <Foundation/Foundation.h>
@interface Foo : NSObject
- (NSString *)name;
@end

11
test/link/objcpp/Foo.mm Normal file
View File

@@ -0,0 +1,11 @@
#import "Foo.h"
@implementation Foo
- (NSString *)name
{
NSString *str = [[NSString alloc] initWithFormat:@"Zig"];
return str;
}
@end

View File

@@ -0,0 +1,24 @@
const std = @import("std");
const Builder = std.build.Builder;
pub fn build(b: *Builder) void {
const mode = b.standardReleaseOptions();
const test_step = b.step("test", "Test the program");
const exe = b.addExecutable("test", null);
b.default_step.dependOn(&exe.step);
exe.addIncludePath(".");
exe.addCSourceFile("Foo.mm", &[0][]const u8{});
exe.addCSourceFile("test.mm", &[0][]const u8{});
exe.setBuildMode(mode);
exe.linkLibCpp();
// TODO when we figure out how to ship framework stubs for cross-compilation,
// populate paths to the sysroot here.
exe.linkFramework("Foundation");
const run_cmd = exe.run();
run_cmd.expectStdOutEqual("Hello from C++ and Zig");
test_step.dependOn(&run_cmd.step);
}

14
test/link/objcpp/test.mm Normal file
View File

@@ -0,0 +1,14 @@
#import "Foo.h"
#import <assert.h>
#include <iostream>
int main(int argc, char *argv[])
{
@autoreleasepool {
Foo *foo = [[Foo alloc] init];
NSString *result = [foo name];
std::cout << "Hello from C++ and " << [result UTF8String];
assert([result isEqualToString:@"Zig"]);
return 0;
}
}