Permalink
Browse files

Fix timing issues in RCTLoggingTests.m

Summary:
**Motivation**

If there are any console log messages that come in on initialization (as will happen right now in tvOS), the RCTLoggingTests can fail intermittently.  This change delays the start of the logging test to allow time for initial console messages to come in.
Closes #10568

Differential Revision: D4087974

Pulled By: bestander

fbshipit-source-id: 2b0f4a88a74bc6121133317dd909d5bd1f10789b
  • Loading branch information...
1 parent e000b71 commit bdff1c3f0213f564c451c230883be6da90814c6c @dlowder-salesforce dlowder-salesforce committed with Facebook Github Bot Oct 27, 2016
@@ -51,14 +51,6 @@ - (void)setUp
XCTAssertFalse(_bridge.loading);
_logSem = dispatch_semaphore_create(0);
- RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, __unused NSString *fileName, __unused NSNumber *lineNumber, NSString *message) {
- if (source == RCTLogSourceJavaScript) {
- self->_lastLogLevel = level;
- self->_lastLogSource = source;
- self->_lastLogMessage = message;
- dispatch_semaphore_signal(self->_logSem);
- }
- });
}
- (void)tearDown
@@ -71,7 +63,21 @@ - (void)tearDown
- (void)testLogging
{
- [_bridge enqueueJSCall:@"LoggingTestModule.logToConsole" args:@[@"Invoking console.log"]];
+ // First console log call will fire after 2.0 sec, to allow for any initial log messages
+ // that might come in (seeing this in tvOS)
+ [_bridge enqueueJSCall:@"LoggingTestModule.logToConsoleAfterWait" args:@[@"Invoking console.log",@2000]];
+ // Spin native layer for 1.9 sec
+ [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.9]];
+ // Now set the log function to signal the semaphore
+ RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, __unused NSString *fileName, __unused NSNumber *lineNumber, NSString *message) {
+ if (source == RCTLogSourceJavaScript) {
+ self->_lastLogLevel = level;
+ self->_lastLogSource = source;
+ self->_lastLogMessage = message;
+ dispatch_semaphore_signal(self->_logSem);
+ }
+ });
+ // Wait for console log to signal the semaphore
dispatch_semaphore_wait(_logSem, DISPATCH_TIME_FOREVER);
XCTAssertEqual(_lastLogLevel, RCTLogLevelInfo);
@@ -19,6 +19,11 @@ var LoggingTestModule = {
logToConsole: function(str) {
console.log(str);
},
+ logToConsoleAfterWait: function(str,timeout_ms) {
+ setTimeout(function() {
+ console.log(str);
+ }, timeout_ms);
+ },
warning: function(str) {
warning(false, str);
},

0 comments on commit bdff1c3

Please sign in to comment.