test: introduce link(er) tests - builds on standalone tests
This commit is contained in:
7
test/link/objcpp/Foo.h
Normal file
7
test/link/objcpp/Foo.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface Foo : NSObject
|
||||
|
||||
- (NSString *)name;
|
||||
|
||||
@end
|
||||
11
test/link/objcpp/Foo.mm
Normal file
11
test/link/objcpp/Foo.mm
Normal file
@@ -0,0 +1,11 @@
|
||||
#import "Foo.h"
|
||||
|
||||
@implementation Foo
|
||||
|
||||
- (NSString *)name
|
||||
{
|
||||
NSString *str = [[NSString alloc] initWithFormat:@"Zig"];
|
||||
return str;
|
||||
}
|
||||
|
||||
@end
|
||||
24
test/link/objcpp/build.zig
Normal file
24
test/link/objcpp/build.zig
Normal 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
14
test/link/objcpp/test.mm
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user