private static ReactInstance CreateReactInstance(IJavaScriptExecutor executor) { var registry = new NativeModuleRegistry.Builder().Build(); var jsModules = new JavaScriptModuleRegistry.Builder() .Add <RCTEventEmitter>() .Build(); var instance = new ReactInstance.Builder { QueueConfigurationSpec = ReactQueueConfigurationSpec.Default, BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"), JavaScriptModuleRegistry = jsModules, Registry = registry, JavaScriptExecutorFactory = () => executor, NativeModuleCallExceptionHandler = ex => Assert.Fail(ex.ToString()), }.Build(); instance.Initialize(); return(instance); }
private async Task <ReactContext> InitializeReactContextAsync( Func <IJavaScriptExecutor> jsExecutorFactory, JavaScriptBundleLoader jsBundleLoader, CancellationToken token) { var currentReactContext = _currentReactContext; if (currentReactContext != null) { await TearDownReactContextAsync(currentReactContext, token); _currentReactContext = null; } try { var reactContext = await CreateReactContextCoreAsync(jsExecutorFactory, jsBundleLoader, token); SetupReactContext(reactContext); return(reactContext); } catch (OperationCanceledException) when(token.IsCancellationRequested) { throw; } catch (Exception ex) { _devSupportManager.HandleException(ex); } finally { if (--_pendingInitializationTasks == 0) { _contextInitializationTask = null; } } return(null); }
private async Task InitializeReactContextAsync( Func <IJavaScriptExecutor> jsExecutorFactory, JavaScriptBundleLoader jsBundleLoader) { var currentReactContext = _currentReactContext; if (currentReactContext != null) { TearDownReactContext(currentReactContext); _currentReactContext = null; } try { var reactContext = await CreateReactContextAsync(jsExecutorFactory, jsBundleLoader); SetupReactContext(reactContext); } catch (Exception ex) { _devSupportManager.HandleException(ex); } finally { _contextInitializationTask = null; } if (_pendingJsExecutorFactory != null) { var pendingJsExecutorFactory = _pendingJsExecutorFactory; var pendingJsBundleLoader = _pendingJsBundleLoader; _pendingJsExecutorFactory = null; _pendingJsBundleLoader = null; RecreateReactContextInBackground( pendingJsExecutorFactory, pendingJsBundleLoader); } }
public async Task ReactInstance_GetModules() { var module = new TestNativeModule(); var reactContext = new ReactContext(); var registry = new NativeModuleRegistry.Builder(reactContext) .Add(module) .Build(); var executor = new MockJavaScriptExecutor { OnCallFunctionReturnFlushedQueue = (_, __, ___) => JValue.CreateNull(), OnFlushQueue = () => JValue.CreateNull(), OnInvokeCallbackAndReturnFlushedQueue = (_, __) => JValue.CreateNull() }; var builder = new ReactInstance.Builder() { QueueConfiguration = TestReactQueueConfiguration.Create(_ => { }), Registry = registry, JavaScriptExecutorFactory = () => executor, BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"), }; var instance = await DispatcherHelpers.CallOnDispatcherAsync(() => builder.Build()); reactContext.InitializeWithInstance(instance); var actualModule = instance.GetNativeModule <TestNativeModule>(); Assert.AreSame(module, actualModule); var firstJSModule = instance.GetJavaScriptModule <TestJavaScriptModule>(); var secondJSModule = instance.GetJavaScriptModule <TestJavaScriptModule>(); Assert.AreSame(firstJSModule, secondJSModule); await DispatcherHelpers.CallOnDispatcherAsync(instance.DisposeAsync); }
public async Task ReactInstance_ExceptionHandled_DoesNotDispose() { var eventHandler = new AutoResetEvent(false); var module = new OnDisposeNativeModule(() => eventHandler.Set()); var registry = new NativeModuleRegistry.Builder(new ReactContext()) .Add(module) .Build(); var executor = new MockJavaScriptExecutor { OnCallFunctionReturnFlushedQueue = (_, __, ___) => JValue.CreateNull(), OnFlushQueue = () => JValue.CreateNull(), OnInvokeCallbackAndReturnFlushedQueue = (_, __) => JValue.CreateNull() }; var exception = new Exception(); var tcs = new TaskCompletionSource <Exception>(TaskCreationOptions.RunContinuationsAsynchronously); var builder = new ReactInstance.Builder() { QueueConfiguration = TestReactQueueConfiguration.Create(tcs.SetResult), Registry = registry, JavaScriptExecutorFactory = () => executor, BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"), }; var instance = await DispatcherHelpers.CallOnDispatcherAsync(() => builder.Build()); instance.QueueConfiguration.JavaScriptQueue.Dispatch(() => { throw exception; }); var actualException = await tcs.Task; Assert.AreSame(exception, actualException); Assert.IsFalse(eventHandler.WaitOne(500)); Assert.IsFalse(instance.IsDisposed); }
public async Task ReactInstance_GetModules() { var module = new TestNativeModule(); var registry = new NativeModuleRegistry.Builder() .Add(module) .Build(); var jsRegistry = new JavaScriptModuleRegistry.Builder() .Add <TestJavaScriptModule>() .Build(); var executor = new MockJavaScriptExecutor((p0, p1, p2) => JValue.CreateNull()); var builder = new ReactInstance.Builder() { QueueConfigurationSpec = ReactQueueConfigurationSpec.Default, Registry = registry, JavaScriptModuleRegistry = jsRegistry, JavaScriptExecutorFactory = () => executor, BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"), NativeModuleCallExceptionHandler = _ => { } }; var instance = await DispatcherHelpers.CallOnDispatcherAsync(() => builder.Build()); var actualModule = instance.GetNativeModule <TestNativeModule>(); Assert.AreSame(module, actualModule); var firstJSModule = instance.GetJavaScriptModule <TestJavaScriptModule>(); var secondJSModule = instance.GetJavaScriptModule <TestJavaScriptModule>(); Assert.AreSame(firstJSModule, secondJSModule); await DispatcherHelpers.RunOnDispatcherAsync(instance.Dispose); }
private async Task <ReactContext> CreateReactContextCoreAsync( Func <IJavaScriptExecutor> jsExecutorFactory, JavaScriptBundleLoader jsBundleLoader, CancellationToken token) { Tracer.Write(ReactConstants.Tag, "Creating React context."); _sourceUrl = jsBundleLoader.SourceUrl; var reactContext = new ReactContext(); if (_useDeveloperSupport) { reactContext.NativeModuleCallExceptionHandler = _nativeModuleCallExceptionHandler ?? _devSupportManager.HandleException; } var nativeRegistryBuilder = new NativeModuleRegistry.Builder(reactContext); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createAndProcessCoreModulesPackage").Start()) { var coreModulesPackage = new CoreModulesPackage( this, InvokeDefaultOnBackPressed, _uiImplementationProvider); ProcessPackage(coreModulesPackage, reactContext, nativeRegistryBuilder); } foreach (var reactPackage in _packages) { using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createAndProcessCustomReactPackage").Start()) { ProcessPackage(reactPackage, reactContext, nativeRegistryBuilder); } } var nativeModuleRegistry = default(NativeModuleRegistry); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "buildNativeModuleRegistry").Start()) { nativeModuleRegistry = nativeRegistryBuilder.Build(); } var queueConfiguration = ReactQueueConfigurationFactory.Default.Create(reactContext.HandleException); var reactInstanceBuilder = new ReactInstance.Builder { QueueConfiguration = queueConfiguration, JavaScriptExecutorFactory = jsExecutorFactory, Registry = nativeModuleRegistry, BundleLoader = jsBundleLoader, }; var reactInstance = default(ReactInstance); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createReactInstance").Start()) { reactInstance = reactInstanceBuilder.Build(); } // TODO: add bridge idle debug listener reactContext.InitializeWithInstance(reactInstance); reactInstance.Initialize(); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "RunJavaScriptBundle").Start()) { await reactInstance.InitializeBridgeAsync(token).ConfigureAwait(false); } return(reactContext); }
private void RecreateReactContextInBackgroundFromBundleFile() { RecreateReactContextInBackground( () => new ChakraJavaScriptExecutor(), JavaScriptBundleLoader.CreateFileLoader(_jsBundleFile)); }
private void RecreateReactContextInBackgroundFromBundleLoader() { RecreateReactContextInBackground( _javaScriptExecutorFactory, JavaScriptBundleLoader.CreateFileLoader(_jsBundleFile)); }
public void SourceUrl_Return() { var fileBundle = JavaScriptBundleLoader.CreateFileLoader("tizen.bundle"); var sourceUrl = fileBundle.SourceUrl; }
public async void InitializeAsync_Return() { var fileBundle = JavaScriptBundleLoader.CreateFileLoader("tizen.bundle"); await fileBundle.InitializeAsync().ConfigureAwait(false); }
public static void CreateRemoteDebuggerLoader_Return() { var remoteBundleLoader = JavaScriptBundleLoader.CreateRemoteDebuggerLoader("127.0.0.1", "127.0.0.1"); Assert.NotNull(remoteBundleLoader); }
public static void CreateFileLoader_Return() { var fileBundleLoader = JavaScriptBundleLoader.CreateFileLoader("tizen.bundle"); Assert.NotNull(fileBundleLoader); }