close to working test harness
This commit is contained in:
parent
e470c5d189
commit
7b5be78df2
|
@ -19,4 +19,9 @@
|
|||
@import Foundation;
|
||||
|
||||
@interface RealmReact : NSObject
|
||||
|
||||
@property (nonatomic) id executor;
|
||||
|
||||
+ (id)executor;
|
||||
|
||||
@end
|
||||
|
|
|
@ -33,8 +33,11 @@
|
|||
@interface RealmReact () <RCTBridgeModule>
|
||||
@end
|
||||
|
||||
static id s_executor;
|
||||
|
||||
@implementation RealmReact
|
||||
|
||||
@dynamic executor;
|
||||
@synthesize bridge = _bridge;
|
||||
|
||||
+ (void)load {
|
||||
|
@ -52,12 +55,16 @@
|
|||
return @"Realm";
|
||||
}
|
||||
|
||||
+ (id)executor {
|
||||
return s_executor;
|
||||
}
|
||||
|
||||
- (void)setBridge:(RCTBridge *)bridge {
|
||||
_bridge = bridge;
|
||||
|
||||
Ivar executorIvar = class_getInstanceVariable([bridge class], "_javaScriptExecutor");
|
||||
id contextExecutor = object_getIvar(bridge, executorIvar);
|
||||
Ivar contextIvar = class_getInstanceVariable([contextExecutor class], "_context");
|
||||
s_executor = object_getIvar(bridge, executorIvar);
|
||||
Ivar contextIvar = class_getInstanceVariable([s_executor class], "_context");
|
||||
|
||||
// The executor could be a RCTWebSocketExecutor, in which case it won't have a JS context.
|
||||
if (!contextIvar) {
|
||||
|
@ -86,8 +93,8 @@
|
|||
return;
|
||||
}
|
||||
|
||||
[contextExecutor executeBlockOnJavaScriptQueue:^{
|
||||
id rctJSContext = object_getIvar(contextExecutor, contextIvar);
|
||||
[s_executor executeBlockOnJavaScriptQueue:^{
|
||||
id rctJSContext = object_getIvar(s_executor, contextIvar);
|
||||
JSGlobalContextRef ctx;
|
||||
|
||||
if (rctJSContext) {
|
||||
|
@ -98,7 +105,7 @@
|
|||
|
||||
if (RCTJavaScriptContext) {
|
||||
ctx = JSGlobalContextCreate(NULL);
|
||||
object_setIvar(contextExecutor, contextIvar, [[RCTJavaScriptContext alloc] initWithJSContext:ctx]);
|
||||
object_setIvar(s_executor, contextIvar, [[RCTJavaScriptContext alloc] initWithJSContext:ctx]);
|
||||
}
|
||||
else {
|
||||
NSLog(@"Failed to load RCTJavaScriptContext class");
|
||||
|
|
|
@ -28,7 +28,31 @@
|
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||
BuildableName = "RealmReactTests.xctest"
|
||||
BlueprintName = "RealmReactTests"
|
||||
ReferencedContainer = "container:tests/ReactTests/ios/ReactTests.xcodeproj">
|
||||
</BuildableReference>
|
||||
<SkippedTests>
|
||||
<Test
|
||||
Identifier = "RealmJSTests">
|
||||
</Test>
|
||||
</SkippedTests>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "02B29A151B7CF7C9008A7E6B"
|
||||
BuildableName = "RealmReact.framework"
|
||||
BlueprintName = "RealmReact"
|
||||
ReferencedContainer = "container:RealmJS.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
|
|
|
@ -25,4 +25,6 @@
|
|||
// add realm apis to the given js context
|
||||
+ (void)initializeContext:(JSContextRef)ctx;
|
||||
|
||||
+ (void)cleanupTestRealms;
|
||||
|
||||
@end
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#import "RJSObject.hpp"
|
||||
#import "RJSUtil.hpp"
|
||||
|
||||
#include "shared_realm.hpp"
|
||||
|
||||
JSValueRef RJSTypeGet(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception) {
|
||||
return RJSValueForString(ctx, RJSTypeGet(RJSStringForJSString(propertyName)));
|
||||
}
|
||||
|
@ -44,6 +46,34 @@ JSClassRef RJSRealmTypeClass() {
|
|||
return JSClassCreate(&realmTypesDefinition);
|
||||
}
|
||||
|
||||
|
||||
NSString *RealmPathForFile(NSString *fileName) {
|
||||
#if TARGET_OS_IPHONE
|
||||
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
|
||||
#else
|
||||
NSString *path = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES)[0];
|
||||
path = [path stringByAppendingPathComponent:[[[NSBundle mainBundle] executablePath] lastPathComponent]];
|
||||
#endif
|
||||
return [path stringByAppendingPathComponent:fileName];
|
||||
}
|
||||
|
||||
static void DeleteOrThrow(NSString *path) {
|
||||
NSError *error;
|
||||
if (![[NSFileManager defaultManager] removeItemAtPath:path error:&error]) {
|
||||
if (error.code != NSFileNoSuchFileError) {
|
||||
@throw [NSException exceptionWithName:@"RLMTestException"
|
||||
reason:[@"Unable to delete realm: " stringByAppendingString:error.description]
|
||||
userInfo:nil];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void DeleteRealmFilesAtPath(NSString *path) {
|
||||
DeleteOrThrow(path);
|
||||
DeleteOrThrow([path stringByAppendingString:@".lock"]);
|
||||
DeleteOrThrow([path stringByAppendingString:@".note"]);
|
||||
}
|
||||
|
||||
@implementation RealmJS
|
||||
|
||||
+ (void)initializeContext:(JSContextRef)ctx {
|
||||
|
@ -56,7 +86,23 @@ JSClassRef RJSRealmTypeClass() {
|
|||
JSObjectSetProperty(ctx, globalRealmObject, typeString, typesObject, kJSPropertyAttributeNone, &exception);
|
||||
JSStringRelease(typeString);
|
||||
|
||||
[JSContext contextWithJSGlobalContextRef:JSContextGetGlobalContext(ctx)][@"cleanupTestRealms"] = ^{
|
||||
[RealmJS cleanupTestRealms];
|
||||
};
|
||||
|
||||
assert(!exception);
|
||||
}
|
||||
|
||||
+ (void)cleanupTestRealms {
|
||||
realm::Realm::s_global_cache.invalidate_all();
|
||||
realm::Realm::s_global_cache.clear();
|
||||
|
||||
// FIXME - find all realm files in the docs dir and delete them rather than hardcoding these
|
||||
|
||||
DeleteRealmFilesAtPath(RealmPathForFile(@"test.realm"));
|
||||
DeleteRealmFilesAtPath(RealmPathForFile(@"test1.realm"));
|
||||
DeleteRealmFilesAtPath(RealmPathForFile(@"test2.realm"));
|
||||
DeleteRealmFilesAtPath(@(RJSDefaultPath().c_str()));
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -21,6 +21,10 @@ function runTests() {
|
|||
for (let suiteName in RealmTests) {
|
||||
let testSuite = RealmTests[suiteName];
|
||||
|
||||
if (typeof testSuite != 'object') {
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log('Starting suite:', suiteName);
|
||||
|
||||
for (let testName in testSuite) {
|
||||
|
|
|
@ -13,7 +13,18 @@
|
|||
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
|
||||
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
|
||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
||||
00E356F31AD99517003FC87E /* ReactTestsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactTestsTests.m */; };
|
||||
00E356F31AD99517003FC87E /* RealmReactTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RealmReactTests.m */; };
|
||||
02409E1E1BCF1F2E005F3B3E /* RealmJSTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 02409E1B1BCF1F2E005F3B3E /* RealmJSTests.mm */; settings = {ASSET_TAGS = (); }; };
|
||||
02409E1F1BCF1F2E005F3B3E /* RJSModuleLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 02409E1D1BCF1F2E005F3B3E /* RJSModuleLoader.m */; settings = {ASSET_TAGS = (); }; };
|
||||
02409E291BCF1F45005F3B3E /* ArrayTests.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E201BCF1F45005F3B3E /* ArrayTests.js */; };
|
||||
02409E2A1BCF1F45005F3B3E /* asserts.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E211BCF1F45005F3B3E /* asserts.js */; };
|
||||
02409E2B1BCF1F45005F3B3E /* base-test.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E221BCF1F45005F3B3E /* base-test.js */; };
|
||||
02409E2C1BCF1F45005F3B3E /* index.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E231BCF1F45005F3B3E /* index.js */; };
|
||||
02409E2D1BCF1F45005F3B3E /* ObjectTests.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E241BCF1F45005F3B3E /* ObjectTests.js */; };
|
||||
02409E2E1BCF1F45005F3B3E /* RealmTests.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E251BCF1F45005F3B3E /* RealmTests.js */; };
|
||||
02409E2F1BCF1F45005F3B3E /* ResultsTests.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E261BCF1F45005F3B3E /* ResultsTests.js */; };
|
||||
02409E301BCF1F45005F3B3E /* schemas.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E271BCF1F45005F3B3E /* schemas.js */; };
|
||||
02409E311BCF1F45005F3B3E /* util.js in Resources */ = {isa = PBXBuildFile; fileRef = 02409E281BCF1F45005F3B3E /* util.js */; };
|
||||
0277991C1BBF3BC600C96559 /* RealmReact.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0277991B1BBF3BB700C96559 /* RealmReact.framework */; };
|
||||
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
|
||||
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
|
||||
|
@ -156,9 +167,22 @@
|
|||
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
|
||||
00E356EE1AD99517003FC87E /* ReactTestsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactTestsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
00E356EE1AD99517003FC87E /* RealmReactTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RealmReactTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
00E356F21AD99517003FC87E /* ReactTestsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactTestsTests.m; sourceTree = "<group>"; };
|
||||
00E356F21AD99517003FC87E /* RealmReactTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RealmReactTests.m; sourceTree = "<group>"; };
|
||||
02409E1A1BCF1F2E005F3B3E /* RealmJSTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RealmJSTests.h; path = ../../../RealmJSTests.h; sourceTree = "<group>"; };
|
||||
02409E1B1BCF1F2E005F3B3E /* RealmJSTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RealmJSTests.mm; path = ../../../RealmJSTests.mm; sourceTree = "<group>"; };
|
||||
02409E1C1BCF1F2E005F3B3E /* RJSModuleLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RJSModuleLoader.h; path = ../../../RJSModuleLoader.h; sourceTree = "<group>"; };
|
||||
02409E1D1BCF1F2E005F3B3E /* RJSModuleLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RJSModuleLoader.m; path = ../../../RJSModuleLoader.m; sourceTree = "<group>"; };
|
||||
02409E201BCF1F45005F3B3E /* ArrayTests.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = ArrayTests.js; path = ../../ArrayTests.js; sourceTree = "<group>"; };
|
||||
02409E211BCF1F45005F3B3E /* asserts.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = asserts.js; path = ../../asserts.js; sourceTree = "<group>"; };
|
||||
02409E221BCF1F45005F3B3E /* base-test.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = "base-test.js"; path = "../../base-test.js"; sourceTree = "<group>"; };
|
||||
02409E231BCF1F45005F3B3E /* index.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = index.js; path = ../../index.js; sourceTree = "<group>"; };
|
||||
02409E241BCF1F45005F3B3E /* ObjectTests.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = ObjectTests.js; path = ../../ObjectTests.js; sourceTree = "<group>"; };
|
||||
02409E251BCF1F45005F3B3E /* RealmTests.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = RealmTests.js; path = ../../RealmTests.js; sourceTree = "<group>"; };
|
||||
02409E261BCF1F45005F3B3E /* ResultsTests.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = ResultsTests.js; path = ../../ResultsTests.js; sourceTree = "<group>"; };
|
||||
02409E271BCF1F45005F3B3E /* schemas.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = schemas.js; path = ../../schemas.js; sourceTree = "<group>"; };
|
||||
02409E281BCF1F45005F3B3E /* util.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = util.js; path = ../../util.js; sourceTree = "<group>"; };
|
||||
027799061BBF3BB700C96559 /* RealmJS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RealmJS.xcodeproj; path = ../../../RealmJS.xcodeproj; sourceTree = "<group>"; };
|
||||
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
|
||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
|
||||
|
@ -243,12 +267,17 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
00E356EF1AD99517003FC87E /* ReactTestsTests */ = {
|
||||
00E356EF1AD99517003FC87E /* RealmReactTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
00E356F21AD99517003FC87E /* ReactTestsTests.m */,
|
||||
00E356F21AD99517003FC87E /* RealmReactTests.m */,
|
||||
02409E1A1BCF1F2E005F3B3E /* RealmJSTests.h */,
|
||||
02409E1B1BCF1F2E005F3B3E /* RealmJSTests.mm */,
|
||||
02409E1C1BCF1F2E005F3B3E /* RJSModuleLoader.h */,
|
||||
02409E1D1BCF1F2E005F3B3E /* RJSModuleLoader.m */,
|
||||
00E356F01AD99517003FC87E /* Supporting Files */,
|
||||
);
|
||||
name = RealmReactTests;
|
||||
path = ReactTestsTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
|
@ -345,9 +374,18 @@
|
|||
83CBB9F61A601CBA00E9B192 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
02409E201BCF1F45005F3B3E /* ArrayTests.js */,
|
||||
02409E211BCF1F45005F3B3E /* asserts.js */,
|
||||
02409E221BCF1F45005F3B3E /* base-test.js */,
|
||||
02409E231BCF1F45005F3B3E /* index.js */,
|
||||
02409E241BCF1F45005F3B3E /* ObjectTests.js */,
|
||||
02409E251BCF1F45005F3B3E /* RealmTests.js */,
|
||||
02409E261BCF1F45005F3B3E /* ResultsTests.js */,
|
||||
02409E271BCF1F45005F3B3E /* schemas.js */,
|
||||
02409E281BCF1F45005F3B3E /* util.js */,
|
||||
13B07FAE1A68108700A75B9A /* ReactTests */,
|
||||
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
||||
00E356EF1AD99517003FC87E /* ReactTestsTests */,
|
||||
00E356EF1AD99517003FC87E /* RealmReactTests */,
|
||||
83CBBA001A601CBA00E9B192 /* Products */,
|
||||
);
|
||||
indentWidth = 2;
|
||||
|
@ -358,7 +396,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
13B07F961A680F5B00A75B9A /* ReactTests.app */,
|
||||
00E356EE1AD99517003FC87E /* ReactTestsTests.xctest */,
|
||||
00E356EE1AD99517003FC87E /* RealmReactTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -366,9 +404,9 @@
|
|||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
00E356ED1AD99517003FC87E /* ReactTestsTests */ = {
|
||||
00E356ED1AD99517003FC87E /* RealmReactTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactTestsTests" */;
|
||||
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RealmReactTests" */;
|
||||
buildPhases = (
|
||||
00E356EA1AD99517003FC87E /* Sources */,
|
||||
00E356EB1AD99517003FC87E /* Frameworks */,
|
||||
|
@ -379,9 +417,9 @@
|
|||
dependencies = (
|
||||
00E356F51AD99517003FC87E /* PBXTargetDependency */,
|
||||
);
|
||||
name = ReactTestsTests;
|
||||
name = RealmReactTests;
|
||||
productName = ReactTestsTests;
|
||||
productReference = 00E356EE1AD99517003FC87E /* ReactTestsTests.xctest */;
|
||||
productReference = 00E356EE1AD99517003FC87E /* RealmReactTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
13B07F861A680F5B00A75B9A /* ReactTests */ = {
|
||||
|
@ -479,7 +517,7 @@
|
|||
projectRoot = "";
|
||||
targets = (
|
||||
13B07F861A680F5B00A75B9A /* ReactTests */,
|
||||
00E356ED1AD99517003FC87E /* ReactTestsTests */,
|
||||
00E356ED1AD99517003FC87E /* RealmReactTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -583,6 +621,15 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
02409E291BCF1F45005F3B3E /* ArrayTests.js in Resources */,
|
||||
02409E2A1BCF1F45005F3B3E /* asserts.js in Resources */,
|
||||
02409E2B1BCF1F45005F3B3E /* base-test.js in Resources */,
|
||||
02409E2C1BCF1F45005F3B3E /* index.js in Resources */,
|
||||
02409E2D1BCF1F45005F3B3E /* ObjectTests.js in Resources */,
|
||||
02409E2E1BCF1F45005F3B3E /* RealmTests.js in Resources */,
|
||||
02409E2F1BCF1F45005F3B3E /* ResultsTests.js in Resources */,
|
||||
02409E301BCF1F45005F3B3E /* schemas.js in Resources */,
|
||||
02409E311BCF1F45005F3B3E /* util.js in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -619,7 +666,9 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
00E356F31AD99517003FC87E /* ReactTestsTests.m in Sources */,
|
||||
02409E1F1BCF1F2E005F3B3E /* RJSModuleLoader.m in Sources */,
|
||||
02409E1E1BCF1F2E005F3B3E /* RealmJSTests.mm in Sources */,
|
||||
00E356F31AD99517003FC87E /* RealmReactTests.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -818,7 +867,7 @@
|
|||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactTestsTests" */ = {
|
||||
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RealmReactTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
00E356F61AD99517003FC87E /* Debug */,
|
||||
|
|
|
@ -29,26 +29,26 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||
BuildableName = "ReactTestsTests.xctest"
|
||||
BlueprintName = "ReactTestsTests"
|
||||
BuildableName = "RealmReactTests.xctest"
|
||||
BlueprintName = "RealmReactTests"
|
||||
ReferencedContainer = "container:ReactTests.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||
BuildableName = "ReactTestsTests.xctest"
|
||||
BlueprintName = "ReactTestsTests"
|
||||
BuildableName = "RealmReactTests.xctest"
|
||||
BlueprintName = "RealmReactTests"
|
||||
ReferencedContainer = "container:ReactTests.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
|
@ -62,15 +62,18 @@
|
|||
ReferencedContainer = "container:ReactTests.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
|
@ -86,10 +89,10 @@
|
|||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
|
|
|
@ -1,70 +0,0 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import "RCTLog.h"
|
||||
#import "RCTRootView.h"
|
||||
|
||||
#define TIMEOUT_SECONDS 240
|
||||
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
|
||||
|
||||
@interface ReactTestsTests : XCTestCase
|
||||
|
||||
@end
|
||||
|
||||
@implementation ReactTestsTests
|
||||
|
||||
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
|
||||
{
|
||||
if (test(view)) {
|
||||
return YES;
|
||||
}
|
||||
for (UIView *subview in [view subviews]) {
|
||||
if ([self findSubviewInView:subview matching:test]) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)testRendersWelcomeScreen
|
||||
{
|
||||
UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
|
||||
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
|
||||
BOOL foundElement = NO;
|
||||
|
||||
__block NSString *redboxError = nil;
|
||||
RCTSetLogFunction(^(RCTLogLevel level, NSString *fileName, NSNumber *lineNumber, NSString *message) {
|
||||
if (level >= RCTLogLevelError) {
|
||||
redboxError = message;
|
||||
}
|
||||
});
|
||||
|
||||
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
|
||||
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
|
||||
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
|
||||
|
||||
foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
|
||||
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}];
|
||||
}
|
||||
|
||||
RCTSetLogFunction(RCTDefaultLogFunction);
|
||||
|
||||
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
|
||||
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
|
||||
}
|
||||
|
||||
|
||||
@end
|
|
@ -0,0 +1,49 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import "RealmJSTests.h"
|
||||
#import "../../node_modules/react-native/React/Base/RCTJavaScriptExecutor.h"
|
||||
#import "../../node_modules/react-native/React/Base/RCTBridge.h"
|
||||
|
||||
@import RealmReact;
|
||||
|
||||
@interface RealmReactTests : RealmJSTests
|
||||
@end
|
||||
|
||||
|
||||
@implementation RealmReactTests
|
||||
|
||||
+ (NSURL *)scriptURL {
|
||||
return [[NSBundle bundleForClass:self] URLForResource:@"index" withExtension:@"js"];
|
||||
}
|
||||
|
||||
- (void)invokeMethod:(NSString *)method {
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
[self expectationForNotification:RCTJavaScriptDidLoadNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) {
|
||||
return YES;
|
||||
}];
|
||||
[self waitForExpectationsWithTimeout:10000000 handler:^(NSError * _Nullable error) {
|
||||
}];
|
||||
});
|
||||
|
||||
dispatch_group_t group = dispatch_group_create();
|
||||
dispatch_group_enter(group);
|
||||
|
||||
id<RCTJavaScriptExecutor> executor = [RealmReact executor];
|
||||
[executor executeBlockOnJavaScriptQueue:^{
|
||||
[executor executeJSCall:@"realm-tests" method:@"executeTest" arguments:@[NSStringFromClass(self.class), method] callback:^(id json, NSError *error) {
|
||||
XCTAssertNil(error, @"%@", [error description]);
|
||||
dispatch_group_leave(group);
|
||||
}];
|
||||
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
|
@ -19,44 +19,8 @@
|
|||
#import <objc/runtime.h>
|
||||
|
||||
#import "RealmJSTests.h"
|
||||
#import "RJSUtil.hpp"
|
||||
#import "RJSRealm.hpp"
|
||||
#import "RJSModuleLoader.h"
|
||||
|
||||
#import "shared_realm.hpp"
|
||||
|
||||
NSString *RealmPathForFile(NSString *fileName) {
|
||||
#if TARGET_OS_IPHONE
|
||||
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
|
||||
#else
|
||||
NSString *path = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES)[0];
|
||||
path = [path stringByAppendingPathComponent:[[[NSBundle mainBundle] executablePath] lastPathComponent]];
|
||||
#endif
|
||||
return [path stringByAppendingPathComponent:fileName];
|
||||
}
|
||||
|
||||
|
||||
NSString *TestRealmPath() {
|
||||
return RealmPathForFile(@"test.realm");
|
||||
}
|
||||
|
||||
static void DeleteOrThrow(NSString *path) {
|
||||
NSError *error;
|
||||
if (![[NSFileManager defaultManager] removeItemAtPath:path error:&error]) {
|
||||
if (error.code != NSFileNoSuchFileError) {
|
||||
@throw [NSException exceptionWithName:@"RLMTestException"
|
||||
reason:[@"Unable to delete realm: " stringByAppendingString:error.description]
|
||||
userInfo:nil];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void DeleteRealmFilesAtPath(NSString *path) {
|
||||
DeleteOrThrow(path);
|
||||
DeleteOrThrow([path stringByAppendingString:@".lock"]);
|
||||
DeleteOrThrow([path stringByAppendingString:@".note"]);
|
||||
}
|
||||
|
||||
@interface RealmJSTests ()
|
||||
|
||||
@property (nonatomic, strong) JSValue *testObject;
|
||||
|
@ -83,9 +47,6 @@ static void DeleteRealmFilesAtPath(NSString *path) {
|
|||
- (void)setUp {
|
||||
[super setUp];
|
||||
|
||||
NSString *defaultDir = [[NSString stringWithUTF8String:RJSDefaultPath().c_str()] stringByDeletingLastPathComponent];
|
||||
[[NSFileManager defaultManager] createDirectoryAtPath:defaultDir withIntermediateDirectories:YES attributes:nil error:nil];
|
||||
|
||||
[self invokeMethod:@"beforeEach"];
|
||||
}
|
||||
|
||||
|
@ -110,10 +71,6 @@ static void DeleteRealmFilesAtPath(NSString *path) {
|
|||
JSContext *context = [[JSContext alloc] init];
|
||||
RJSModuleLoader *moduleLoader = [[RJSModuleLoader alloc] initWithContext:context];
|
||||
|
||||
context[@"cleanupTestRealms"] = ^{
|
||||
[self cleanupTestRealms];
|
||||
};
|
||||
|
||||
[RealmJS initializeContext:context.JSGlobalContextRef];
|
||||
|
||||
// Expose the global Realm object as a global 'realm' CommonJS module.
|
||||
|
@ -158,17 +115,6 @@ static void DeleteRealmFilesAtPath(NSString *path) {
|
|||
return suite;
|
||||
}
|
||||
|
||||
+ (void)cleanupTestRealms {
|
||||
realm::Realm::s_global_cache.invalidate_all();
|
||||
realm::Realm::s_global_cache.clear();
|
||||
|
||||
// FIXME - find all realm files in the docs dir and delete them rather than hardcoding these
|
||||
DeleteRealmFilesAtPath(RealmPathForFile(@"test.realm"));
|
||||
DeleteRealmFilesAtPath(RealmPathForFile(@"test1.realm"));
|
||||
DeleteRealmFilesAtPath(RealmPathForFile(@"test2.realm"));
|
||||
DeleteRealmFilesAtPath(@(RJSDefaultPath().c_str()));
|
||||
}
|
||||
|
||||
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
|
||||
NSMethodSignature *sig = [super methodSignatureForSelector:aSelector];
|
||||
return sig ?: [NSMethodSignature signatureWithObjCTypes:"v@:"];
|
||||
|
|
|
@ -22,3 +22,8 @@ exports.ArrayTests = require('./ArrayTests');
|
|||
exports.ObjectTests = require('./ObjectTests');
|
||||
exports.RealmTests = require('./RealmTests');
|
||||
exports.ResultsTests = require('./ResultsTests');
|
||||
|
||||
exports.executeTest = function(suiteName, testName) {
|
||||
var suite = exports[suiteName];
|
||||
suite[textName]();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue