190ff9d99SŁukasz Kosmaty'use strict'; 290ff9d99SŁukasz Kosmaty 390ff9d99SŁukasz Kosmatyimport { Platform } from '@unimodules/core'; 490ff9d99SŁukasz Kosmatyimport Constants from 'expo-constants'; 590ff9d99SŁukasz Kosmaty 690ff9d99SŁukasz Kosmatyimport ExponentTest from './ExponentTest'; 790ff9d99SŁukasz Kosmatyimport { isDeviceFarm } from './utils/Environment'; 890ff9d99SŁukasz Kosmaty 990ff9d99SŁukasz Kosmatyfunction browserSupportsWebGL() { 1090ff9d99SŁukasz Kosmaty try { 1190ff9d99SŁukasz Kosmaty const canvas = document.createElement('canvas'); 1290ff9d99SŁukasz Kosmaty return ( 1390ff9d99SŁukasz Kosmaty !!window.WebGLRenderingContext && 1490ff9d99SŁukasz Kosmaty (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')) 1590ff9d99SŁukasz Kosmaty ); 1690ff9d99SŁukasz Kosmaty } catch (e) { 1790ff9d99SŁukasz Kosmaty return false; 1890ff9d99SŁukasz Kosmaty } 1990ff9d99SŁukasz Kosmaty} 2090ff9d99SŁukasz Kosmaty 2190ff9d99SŁukasz Kosmatyfunction optionalRequire(requirer) { 2290ff9d99SŁukasz Kosmaty try { 2390ff9d99SŁukasz Kosmaty return requirer(); 2490ff9d99SŁukasz Kosmaty } catch (e) { 2590ff9d99SŁukasz Kosmaty // eslint-disable-next-line 2690ff9d99SŁukasz Kosmaty return; 2790ff9d99SŁukasz Kosmaty } 2890ff9d99SŁukasz Kosmaty} 2990ff9d99SŁukasz Kosmaty 3090ff9d99SŁukasz Kosmaty// Both Location and TaskManager test suites define tasks in TaskManager. 3190ff9d99SŁukasz Kosmaty// Since tasks can only be defined during initialization phase (not as a result 3290ff9d99SŁukasz Kosmaty// of calling some function when the application is running, but rather in global scope), 3390ff9d99SŁukasz Kosmaty// we need to trigger code execution of these modules here (not in `getTestModules` 3490ff9d99SŁukasz Kosmaty// which is called in one of the components). 3590ff9d99SŁukasz Kosmatyconst LocationTestScreen = optionalRequire(() => require('./tests/Location')); 3690ff9d99SŁukasz Kosmatyconst TaskManagerTestScreen = optionalRequire(() => require('./tests/TaskManager')); 3790ff9d99SŁukasz Kosmaty// I have a hunch that optionalRequire doesn't work when *not* in global scope 3890ff9d99SŁukasz Kosmaty// since I had to move Camera screen import here too to get rid of an error 3990ff9d99SŁukasz Kosmaty// caused by missing native module. 4090ff9d99SŁukasz Kosmatyconst CameraTestScreen = optionalRequire(() => require('./tests/Camera')); 4190ff9d99SŁukasz Kosmaty 4290ff9d99SŁukasz Kosmaty// List of all modules for tests. Each file path must be statically present for 4390ff9d99SŁukasz Kosmaty// the packager to pick them all up. 4490ff9d99SŁukasz Kosmatyexport function getTestModules() { 4590ff9d99SŁukasz Kosmaty const modules = [ 4690ff9d99SŁukasz Kosmaty // Sanity 4790ff9d99SŁukasz Kosmaty require('./tests/Basic'), 4890ff9d99SŁukasz Kosmaty ]; 4990ff9d99SŁukasz Kosmaty 5090ff9d99SŁukasz Kosmaty // Expo core modules should run everywhere 5190ff9d99SŁukasz Kosmaty modules.push( 5290ff9d99SŁukasz Kosmaty require('./tests/Asset'), 5390ff9d99SŁukasz Kosmaty require('./tests/Constants'), 5490ff9d99SŁukasz Kosmaty require('./tests/FileSystem'), 5590ff9d99SŁukasz Kosmaty require('./tests/Font'), 5690ff9d99SŁukasz Kosmaty require('./tests/Permissions'), 57e16679f7SStanisław Chmiela require('./tests/ImagePicker'), 58e16679f7SStanisław Chmiela optionalRequire(() => require('./tests/Image')) 5990ff9d99SŁukasz Kosmaty ); 6090ff9d99SŁukasz Kosmaty 6190ff9d99SŁukasz Kosmaty // Universally tested APIs 6290ff9d99SŁukasz Kosmaty modules.push( 6390ff9d99SŁukasz Kosmaty require('./tests/Random'), 6490ff9d99SŁukasz Kosmaty require('./tests/Crypto'), 6590ff9d99SŁukasz Kosmaty require('./tests/KeepAwake'), 6690ff9d99SŁukasz Kosmaty require('./tests/Blur'), 6790ff9d99SŁukasz Kosmaty require('./tests/LinearGradient'), 6890ff9d99SŁukasz Kosmaty require('./tests/Facebook'), 6990ff9d99SŁukasz Kosmaty require('./tests/HTML'), 7090ff9d99SŁukasz Kosmaty require('./tests/FirebaseCore'), 719158859eSHein Rutjes require('./tests/FirebaseAnalytics'), 72e11b7986SStanisław Chmiela require('./tests/FirebaseRecaptcha'), 73626595cbSHein Rutjes require('./tests/FirebaseJSSDK'), 74e11b7986SStanisław Chmiela optionalRequire(() => require('./tests/SQLite')) 7590ff9d99SŁukasz Kosmaty ); 7690ff9d99SŁukasz Kosmaty 7790ff9d99SŁukasz Kosmaty if (Platform.OS === 'android') { 7890ff9d99SŁukasz Kosmaty modules.push(require('./tests/JSC')); 7990ff9d99SŁukasz Kosmaty } 8090ff9d99SŁukasz Kosmaty 8190ff9d99SŁukasz Kosmaty if (global.DETOX) { 8290ff9d99SŁukasz Kosmaty modules.push( 8390ff9d99SŁukasz Kosmaty require('./tests/Contacts'), 8490ff9d99SŁukasz Kosmaty require('./tests/Haptics'), 8590ff9d99SŁukasz Kosmaty require('./tests/Localization'), 8690ff9d99SŁukasz Kosmaty require('./tests/SecureStore'), 8790ff9d99SŁukasz Kosmaty require('./tests/SMS'), 8890ff9d99SŁukasz Kosmaty require('./tests/StoreReview'), 8947b314f0SCharlie Cruzan require('./tests/Notifications') 9090ff9d99SŁukasz Kosmaty ); 9190ff9d99SŁukasz Kosmaty return modules; 9290ff9d99SŁukasz Kosmaty } 9390ff9d99SŁukasz Kosmaty 9490ff9d99SŁukasz Kosmaty if (Platform.OS === 'web') { 9590ff9d99SŁukasz Kosmaty modules.push( 9690ff9d99SŁukasz Kosmaty require('./tests/Contacts'), 9790ff9d99SŁukasz Kosmaty // require('./tests/SVG'), 9890ff9d99SŁukasz Kosmaty require('./tests/Localization'), 9947b314f0SCharlie Cruzan optionalRequire(() => require('./tests/Notifications')), 100731f34a7STomasz Sapeta LocationTestScreen 10190ff9d99SŁukasz Kosmaty ); 10290ff9d99SŁukasz Kosmaty 10390ff9d99SŁukasz Kosmaty if (browserSupportsWebGL()) { 10490ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/GLView'))); 10590ff9d99SŁukasz Kosmaty } 10690ff9d99SŁukasz Kosmaty 10790ff9d99SŁukasz Kosmaty if (ExponentTest && !ExponentTest.isInCI) { 10890ff9d99SŁukasz Kosmaty // modules.push(optionalRequire(() => require('./tests/Speech'))); 10990ff9d99SŁukasz Kosmaty } 11090ff9d99SŁukasz Kosmaty return modules.filter(Boolean); 11190ff9d99SŁukasz Kosmaty } 11290ff9d99SŁukasz Kosmaty 11390ff9d99SŁukasz Kosmaty modules.push( 11490ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Application')), 11556b27c56SEvan Bacon optionalRequire(() => require('./tests/AuthSession')), 11690ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Device')), 11790ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/GLView')), 11890ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Haptics')), 11990ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Localization')), 12090ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Network')), 12190ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/SecureStore')), 12290ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Segment')), 12390ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Speech')), 12490ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Recording')), 12590ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/ScreenOrientation')), 12690ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Payments')), 12790ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobInterstitial')), 12890ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobRewarded')), 12990ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/FBBannerAd')), 13047b314f0SCharlie Cruzan optionalRequire(() => require('./tests/Notifications')) 13190ff9d99SŁukasz Kosmaty ); 13290ff9d99SŁukasz Kosmaty 13390ff9d99SŁukasz Kosmaty if (!isDeviceFarm()) { 13490ff9d99SŁukasz Kosmaty // Times out sometimes 13590ff9d99SŁukasz Kosmaty modules.push( 13690ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobPublisherBanner')), 13790ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobBanner')) 13890ff9d99SŁukasz Kosmaty ); 13990ff9d99SŁukasz Kosmaty // Invalid placementId in CI (all tests fail) 14090ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/FBNativeAd'))); 14190ff9d99SŁukasz Kosmaty // Requires interaction (sign in popup) 14290ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/GoogleSignIn'))); 14390ff9d99SŁukasz Kosmaty // Popup to request device's location which uses Google's location service 14490ff9d99SŁukasz Kosmaty modules.push(LocationTestScreen); 14590ff9d99SŁukasz Kosmaty // Fails to redirect because of malformed URL in published version with release channel parameter 14690ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Linking'))); 14790ff9d99SŁukasz Kosmaty // Has uncontrolled view controllers 14890ff9d99SŁukasz Kosmaty modules.push(require('./tests/SMS')); 14990ff9d99SŁukasz Kosmaty // Requires permission 1509b1f804bSŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Contacts'))); 15190ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Calendar'))); 152aa2d439aSTomasz Sapeta modules.push(optionalRequire(() => require('./tests/CalendarReminders'))); 15390ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/MediaLibrary'))); 15490ff9d99SŁukasz Kosmaty 15590ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Battery'))); 15690ff9d99SŁukasz Kosmaty if (Constants.isDevice) { 15790ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Brightness'))); 15890ff9d99SŁukasz Kosmaty } 15990ff9d99SŁukasz Kosmaty // Crashes app when mounting component 16090ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Video'))); 16190ff9d99SŁukasz Kosmaty // "sdkUnversionedTestSuite failed: java.lang.NullPointerException: Attempt to invoke interface method 16290ff9d99SŁukasz Kosmaty // 'java.util.Map org.unimodules.interfaces.taskManager.TaskInterface.getOptions()' on a null object reference" 16390ff9d99SŁukasz Kosmaty modules.push(TaskManagerTestScreen); 16490ff9d99SŁukasz Kosmaty // Audio tests are flaky in CI due to asynchronous fetching of resources 16590ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Audio'))); 166*bd6ca857Sandy 16790ff9d99SŁukasz Kosmaty // The Camera tests are flaky on iOS, i.e. they fail randomly 168*bd6ca857Sandy if (Constants.isDevice) { 16990ff9d99SŁukasz Kosmaty modules.push(CameraTestScreen); 17090ff9d99SŁukasz Kosmaty } 17190ff9d99SŁukasz Kosmaty } 17290ff9d99SŁukasz Kosmaty if (Constants.isDevice) { 17390ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Cellular'))); 17490ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/BarCodeScanner'))); 17590ff9d99SŁukasz Kosmaty } 176c1932404SBrent Vatne return modules.filter(Boolean).sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase()); 17790ff9d99SŁukasz Kosmaty} 178