@ -0,0 +1,6 @@ | |||||
[android] | |||||
target = Google Inc.:Google APIs:23 | |||||
[maven_repositories] | |||||
central = https://repo1.maven.org/maven2 |
@ -0,0 +1,97 @@ | |||||
[ignore] | |||||
# We fork some components by platform. | |||||
.*/*.web.js | |||||
.*/*.android.js | |||||
# Some modules have their own node_modules with overlap | |||||
.*/node_modules/node-haste/.* | |||||
# Ugh | |||||
.*/node_modules/babel.* | |||||
.*/node_modules/babylon.* | |||||
.*/node_modules/invariant.* | |||||
# Ignore react and fbjs where there are overlaps, but don't ignore | |||||
# anything that react-native relies on | |||||
.*/node_modules/fbjs/lib/Map.js | |||||
.*/node_modules/fbjs/lib/ErrorUtils.js | |||||
# Flow has a built-in definition for the 'react' module which we prefer to use | |||||
# over the currently-untyped source | |||||
.*/node_modules/react/react.js | |||||
.*/node_modules/react/lib/React.js | |||||
.*/node_modules/react/lib/ReactDOM.js | |||||
.*/__mocks__/.* | |||||
.*/__tests__/.* | |||||
.*/commoner/test/source/widget/share.js | |||||
# Ignore commoner tests | |||||
.*/node_modules/commoner/test/.* | |||||
# See https://github.com/facebook/flow/issues/442 | |||||
.*/react-tools/node_modules/commoner/lib/reader.js | |||||
# Ignore jest | |||||
.*/node_modules/jest-cli/.* | |||||
# Ignore Website | |||||
.*/website/.* | |||||
# Ignore generators | |||||
.*/local-cli/generator.* | |||||
# Ignore BUCK generated folders | |||||
.*\.buckd/ | |||||
# Ignore RNPM | |||||
.*/local-cli/rnpm/.* | |||||
.*/node_modules/is-my-json-valid/test/.*\.json | |||||
.*/node_modules/iconv-lite/encodings/tables/.*\.json | |||||
.*/node_modules/y18n/test/.*\.json | |||||
.*/node_modules/spdx-license-ids/spdx-license-ids.json | |||||
.*/node_modules/spdx-exceptions/index.json | |||||
.*/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json | |||||
.*/node_modules/resolve/lib/core.json | |||||
.*/node_modules/jsonparse/samplejson/.*\.json | |||||
.*/node_modules/json5/test/.*\.json | |||||
.*/node_modules/ua-parser-js/test/.*\.json | |||||
.*/node_modules/builtin-modules/builtin-modules.json | |||||
.*/node_modules/binary-extensions/binary-extensions.json | |||||
.*/node_modules/url-regex/tlds.json | |||||
.*/node_modules/joi/.*\.json | |||||
.*/node_modules/isemail/.*\.json | |||||
.*/node_modules/tr46/.*\.json | |||||
[include] | |||||
[libs] | |||||
node_modules/react-native/Libraries/react-native/react-native-interface.js | |||||
node_modules/react-native/flow | |||||
flow/ | |||||
[options] | |||||
module.system=haste | |||||
esproposal.class_static_fields=enable | |||||
esproposal.class_instance_fields=enable | |||||
munge_underscores=true | |||||
module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' | |||||
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' | |||||
suppress_type=$FlowIssue | |||||
suppress_type=$FlowFixMe | |||||
suppress_type=$FixMe | |||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-5]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) | |||||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-5]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ | |||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy | |||||
[version] | |||||
^0.25.0 |
@ -0,0 +1,40 @@ | |||||
# OSX | |||||
# | |||||
.DS_Store | |||||
# Xcode | |||||
# | |||||
build/ | |||||
*.pbxuser | |||||
!default.pbxuser | |||||
*.mode1v3 | |||||
!default.mode1v3 | |||||
*.mode2v3 | |||||
!default.mode2v3 | |||||
*.perspectivev3 | |||||
!default.perspectivev3 | |||||
xcuserdata | |||||
*.xccheckout | |||||
*.moved-aside | |||||
DerivedData | |||||
*.hmap | |||||
*.ipa | |||||
*.xcuserstate | |||||
project.xcworkspace | |||||
# Android/IJ | |||||
# | |||||
.idea | |||||
.gradle | |||||
local.properties | |||||
# node.js | |||||
# | |||||
node_modules/ | |||||
npm-debug.log | |||||
# BUCK | |||||
buck-out/ | |||||
\.buckd/ | |||||
android/app/libs | |||||
android/keystores/debug.keystore |
@ -0,0 +1 @@ | |||||
{} |
@ -0,0 +1,54 @@ | |||||
> detox | |||||
# React Native Demo Project | |||||
## Requirements | |||||
* Make sure you have Xcode installed (tested with Xcode 8.1-8.2). | |||||
* make sure you have node installed (`brew install node`, node 8.3.0 and up is required for native async-await support, otherwise you'll have to babel the tests). | |||||
* Make sure you have react-native dependencies installed: | |||||
* react-native-cli is installed (`npm install -g react-native-cli`) | |||||
* watchman is installed (`brew install watchman`) | |||||
### Step 1: Npm install | |||||
* Make sure you're in folder `examples/demo-react-native`. | |||||
* Run `npm install`. | |||||
## To test Release build of your app | |||||
### Step 2: Build | |||||
* Build the demo project | |||||
```sh | |||||
detox build --configuration ios.sim.release | |||||
``` | |||||
### Step 3: Test | |||||
* Run tests on the demo project | |||||
```sh | |||||
detox test --configuration ios.sim.release | |||||
``` | |||||
This action will open a new simulator and run the tests on it. | |||||
## To test Debug build of your app | |||||
### Step 2: Build | |||||
* Build the demo project | |||||
```sh | |||||
detox build --configuration ios.sim.debug | |||||
``` | |||||
### Step 3: Test | |||||
* start react-native packager | |||||
```sh | |||||
npm run start | |||||
``` | |||||
* Run tests on the demo project | |||||
```sh | |||||
detox test --configuration ios.sim.debug | |||||
``` | |||||
This action will open a new simulator and run the tests on it. |
@ -0,0 +1,66 @@ | |||||
import re | |||||
# To learn about Buck see [Docs](https://buckbuild.com/). | |||||
# To run your application with Buck: | |||||
# - install Buck | |||||
# - `npm start` - to start the packager | |||||
# - `cd android` | |||||
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US` | |||||
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck | |||||
# - `buck install -r android/app` - compile, install and run application | |||||
# | |||||
lib_deps = [] | |||||
for jarfile in glob(['libs/*.jar']): | |||||
name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) | |||||
lib_deps.append(':' + name) | |||||
prebuilt_jar( | |||||
name = name, | |||||
binary_jar = jarfile, | |||||
) | |||||
for aarfile in glob(['libs/*.aar']): | |||||
name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) | |||||
lib_deps.append(':' + name) | |||||
android_prebuilt_aar( | |||||
name = name, | |||||
aar = aarfile, | |||||
) | |||||
android_library( | |||||
name = 'all-libs', | |||||
exported_deps = lib_deps | |||||
) | |||||
android_library( | |||||
name = 'app-code', | |||||
srcs = glob([ | |||||
'src/main/java/**/*.java', | |||||
]), | |||||
deps = [ | |||||
':all-libs', | |||||
':build_config', | |||||
':res', | |||||
], | |||||
) | |||||
android_build_config( | |||||
name = 'build_config', | |||||
package = 'com.example', | |||||
) | |||||
android_resource( | |||||
name = 'res', | |||||
res = 'src/main/res', | |||||
package = 'com.example', | |||||
) | |||||
android_binary( | |||||
name = 'app', | |||||
package_type = 'debug', | |||||
manifest = 'src/main/AndroidManifest.xml', | |||||
keystore = '//android/keystores:debug', | |||||
deps = [ | |||||
':app-code', | |||||
], | |||||
) |
@ -0,0 +1,88 @@ | |||||
apply plugin: "com.android.application" | |||||
import com.android.build.OutputFile | |||||
apply from: "../../node_modules/react-native/react.gradle" | |||||
android { | |||||
compileSdkVersion 28 | |||||
buildToolsVersion '28.0.3' | |||||
defaultConfig { | |||||
applicationId "com.detox.rn.example" | |||||
minSdkVersion 18 | |||||
targetSdkVersion 28 | |||||
versionCode 1 | |||||
versionName "1.0" | |||||
ndk { | |||||
abiFilters "armeabi-v7a", "x86" | |||||
} | |||||
testBuildType System.getProperty('testBuildType', 'debug') | |||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |||||
} | |||||
splits { | |||||
abi { | |||||
reset() | |||||
enable false | |||||
universalApk false // If true, also generate a universal APK | |||||
include "armeabi-v7a", "x86" | |||||
} | |||||
} | |||||
signingConfigs { | |||||
release { | |||||
storeFile file("keystore.jks") | |||||
storePassword "12345678" | |||||
keyAlias "key0" | |||||
keyPassword "12345678" | |||||
} | |||||
} | |||||
buildTypes { | |||||
release { | |||||
minifyEnabled true | |||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | |||||
proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro" | |||||
signingConfig signingConfigs.release | |||||
} | |||||
} | |||||
// applicationVariants are e.g. debug, release | |||||
applicationVariants.all { variant -> | |||||
variant.outputs.each { output -> | |||||
// For each separate APK per architecture, set a unique version code as described here: | |||||
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits | |||||
def versionCodes = ["armeabi-v7a": 1, "x86": 2] | |||||
def abi = output.getFilter(OutputFile.ABI) | |||||
if (abi != null) { // null for the universal-debug, universal-release variants | |||||
output.versionCodeOverride = | |||||
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode | |||||
} | |||||
} | |||||
} | |||||
packagingOptions { | |||||
exclude 'META-INF/DEPENDENCIES' | |||||
exclude 'META-INF/NOTICE' | |||||
exclude 'META-INF/LICENSE' | |||||
exclude 'META-INF/LICENSE.txt' | |||||
exclude 'META-INF/NOTICE.txt' | |||||
} | |||||
} | |||||
dependencies { | |||||
implementation project(':react-native-date-picker') | |||||
implementation 'com.android.support:appcompat-v7:28.0.0' | |||||
// noinspection GradleDynamicVersion | |||||
implementation 'com.facebook.react:react-native:+' | |||||
androidTestImplementation('com.wix:detox:+') { transitive = true } | |||||
androidTestImplementation 'junit:junit:4.12' | |||||
} | |||||
// Run this once to be able to run the application with BUCK | |||||
// puts all compile dependencies into folder libs for BUCK to use | |||||
task copyDownloadableDepsToLibs(type: Copy) { | |||||
from configurations.compile | |||||
into 'libs' | |||||
} |
@ -0,0 +1,16 @@ | |||||
# | |||||
# Most needed rules come from React Native's proguard-rules.pro (either .aar or source) -- hence | |||||
# the lean configuration file. | |||||
### | |||||
-dontobfuscate | |||||
-dontnote android.net.** | |||||
-dontnote org.apache.** | |||||
# An addition to RN's 'keep' and 'dontwarn' configs -- need to also 'dontnote' some stuff. | |||||
-dontnote com.facebook.** | |||||
-dontnote sun.misc.Unsafe | |||||
-dontnote okhttp3.** | |||||
-dontnote okio.** |
@ -0,0 +1,24 @@ | |||||
package com.example; | |||||
import com.wix.detox.Detox; | |||||
import org.junit.Rule; | |||||
import org.junit.Test; | |||||
import org.junit.runner.RunWith; | |||||
import androidx.test.ext.junit.runners.AndroidJUnit4; | |||||
import androidx.test.filters.LargeTest; | |||||
import androidx.test.rule.ActivityTestRule; | |||||
@RunWith(AndroidJUnit4.class) | |||||
@LargeTest | |||||
public class DetoxTest { | |||||
@Rule | |||||
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false); | |||||
@Test | |||||
public void runDetoxTests() { | |||||
Detox.runTests(mActivityRule); | |||||
} | |||||
} |
@ -0,0 +1,30 @@ | |||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |||||
package="com.example" | |||||
android:versionCode="1" | |||||
android:versionName="1.0" | |||||
> | |||||
<uses-permission android:name="android.permission.INTERNET" /> | |||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> | |||||
<application | |||||
android:name=".MainApplication" | |||||
android:allowBackup="true" | |||||
android:label="@string/app_name" | |||||
android:icon="@mipmap/ic_launcher" | |||||
android:theme="@style/AppTheme" | |||||
android:usesCleartextTraffic="true" | |||||
> | |||||
<activity | |||||
android:name=".MainActivity" | |||||
android:label="@string/app_name" | |||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> | |||||
<intent-filter> | |||||
<action android:name="android.intent.action.MAIN" /> | |||||
<category android:name="android.intent.category.LAUNCHER" /> | |||||
</intent-filter> | |||||
</activity> | |||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> | |||||
</application> | |||||
</manifest> |
@ -0,0 +1,15 @@ | |||||
package com.example; | |||||
import com.facebook.react.ReactActivity; | |||||
public class MainActivity extends ReactActivity { | |||||
/** | |||||
* Returns the name of the main component registered from JavaScript. | |||||
* This is used to schedule rendering of the component. | |||||
*/ | |||||
@Override | |||||
protected String getMainComponentName() { | |||||
return "example"; | |||||
} | |||||
} |
@ -0,0 +1,42 @@ | |||||
package com.example; | |||||
import android.app.Application; | |||||
import com.facebook.react.ReactApplication; | |||||
import com.henninghall.date_picker.DatePickerPackage; | |||||
import com.facebook.react.ReactNativeHost; | |||||
import com.facebook.react.ReactPackage; | |||||
import com.facebook.react.shell.MainReactPackage; | |||||
import com.facebook.soloader.SoLoader; | |||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
public class MainApplication extends Application implements ReactApplication { | |||||
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { | |||||
@Override | |||||
public boolean getUseDeveloperSupport() { | |||||
return BuildConfig.DEBUG; | |||||
} | |||||
@Override | |||||
protected List<ReactPackage> getPackages() { | |||||
return Arrays.<ReactPackage>asList( | |||||
new MainReactPackage(), | |||||
new DatePickerPackage() | |||||
); | |||||
} | |||||
}; | |||||
@Override | |||||
public ReactNativeHost getReactNativeHost() { | |||||
return mReactNativeHost; | |||||
} | |||||
@Override | |||||
public void onCreate() { | |||||
super.onCreate(); | |||||
SoLoader.init(this, /* native exopackage */ false); | |||||
} | |||||
} |
@ -0,0 +1,3 @@ | |||||
<resources> | |||||
<string name="app_name">example</string> | |||||
</resources> |
@ -0,0 +1,8 @@ | |||||
<resources> | |||||
<!-- Base application theme. --> | |||||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> | |||||
<!-- Customize your theme here. --> | |||||
</style> | |||||
</resources> |
@ -0,0 +1,27 @@ | |||||
buildscript { | |||||
ext.kotlinVersion = '1.3.0' | |||||
ext.detoxKotlinVersion = ext.kotlinVersion | |||||
repositories { | |||||
jcenter() | |||||
google() | |||||
} | |||||
dependencies { | |||||
classpath 'com.android.tools.build:gradle:3.3.2' | |||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" | |||||
} | |||||
} | |||||
allprojects { | |||||
repositories { | |||||
mavenLocal() | |||||
jcenter() | |||||
google() | |||||
maven { | |||||
url "$rootDir/../node_modules/react-native/android" | |||||
} | |||||
maven { | |||||
url "$rootDir/../node_modules/detox/Detox-android" | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,20 @@ | |||||
# Project-wide Gradle settings. | |||||
# IDE (e.g. Android Studio) users: | |||||
# Gradle settings configured through the IDE *will override* | |||||
# any settings specified in this file. | |||||
# For more details on how to configure your build environment visit | |||||
# http://www.gradle.org/docs/current/userguide/build_environment.html | |||||
# Specifies the JVM arguments used for the daemon process. | |||||
# The setting is particularly useful for tweaking memory settings. | |||||
# Default value: -Xmx10248m -XX:MaxPermSize=256m | |||||
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 | |||||
# When configured, Gradle will run in incubating parallel mode. | |||||
# This option should only be used with decoupled projects. More details, visit | |||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | |||||
# org.gradle.parallel=true | |||||
android.useDeprecatedNdk=true |
@ -0,0 +1,6 @@ | |||||
#Mon Jun 03 11:38:02 IDT 2019 | |||||
distributionBase=GRADLE_USER_HOME | |||||
distributionPath=wrapper/dists | |||||
zipStoreBase=GRADLE_USER_HOME | |||||
zipStorePath=wrapper/dists | |||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip |
@ -0,0 +1,164 @@ | |||||
#!/usr/bin/env bash | |||||
############################################################################## | |||||
## | |||||
## Gradle start up script for UN*X | |||||
## | |||||
############################################################################## | |||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||||
DEFAULT_JVM_OPTS="" | |||||
APP_NAME="Gradle" | |||||
APP_BASE_NAME=`basename "$0"` | |||||
# Use the maximum available, or set MAX_FD != -1 to use that value. | |||||
MAX_FD="maximum" | |||||
warn ( ) { | |||||
echo "$*" | |||||
} | |||||
die ( ) { | |||||
echo | |||||
echo "$*" | |||||
echo | |||||
exit 1 | |||||
} | |||||
# OS specific support (must be 'true' or 'false'). | |||||
cygwin=false | |||||
msys=false | |||||
darwin=false | |||||
case "`uname`" in | |||||
CYGWIN* ) | |||||
cygwin=true | |||||
;; | |||||
Darwin* ) | |||||
darwin=true | |||||
;; | |||||
MINGW* ) | |||||
msys=true | |||||
;; | |||||
esac | |||||
# For Cygwin, ensure paths are in UNIX format before anything is touched. | |||||
if $cygwin ; then | |||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | |||||
fi | |||||
# Attempt to set APP_HOME | |||||
# Resolve links: $0 may be a link | |||||
PRG="$0" | |||||
# Need this for relative symlinks. | |||||
while [ -h "$PRG" ] ; do | |||||
ls=`ls -ld "$PRG"` | |||||
link=`expr "$ls" : '.*-> \(.*\)$'` | |||||
if expr "$link" : '/.*' > /dev/null; then | |||||
PRG="$link" | |||||
else | |||||
PRG=`dirname "$PRG"`"/$link" | |||||
fi | |||||
done | |||||
SAVED="`pwd`" | |||||
cd "`dirname \"$PRG\"`/" >&- | |||||
APP_HOME="`pwd -P`" | |||||
cd "$SAVED" >&- | |||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |||||
# Determine the Java command to use to start the JVM. | |||||
if [ -n "$JAVA_HOME" ] ; then | |||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |||||
# IBM's JDK on AIX uses strange locations for the executables | |||||
JAVACMD="$JAVA_HOME/jre/sh/java" | |||||
else | |||||
JAVACMD="$JAVA_HOME/bin/java" | |||||
fi | |||||
if [ ! -x "$JAVACMD" ] ; then | |||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |||||
Please set the JAVA_HOME variable in your environment to match the | |||||
location of your Java installation." | |||||
fi | |||||
else | |||||
JAVACMD="java" | |||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||||
Please set the JAVA_HOME variable in your environment to match the | |||||
location of your Java installation." | |||||
fi | |||||
# Increase the maximum file descriptors if we can. | |||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | |||||
MAX_FD_LIMIT=`ulimit -H -n` | |||||
if [ $? -eq 0 ] ; then | |||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |||||
MAX_FD="$MAX_FD_LIMIT" | |||||
fi | |||||
ulimit -n $MAX_FD | |||||
if [ $? -ne 0 ] ; then | |||||
warn "Could not set maximum file descriptor limit: $MAX_FD" | |||||
fi | |||||
else | |||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | |||||
fi | |||||
fi | |||||
# For Darwin, add options to specify how the application appears in the dock | |||||
if $darwin; then | |||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | |||||
fi | |||||
# For Cygwin, switch paths to Windows format before running java | |||||
if $cygwin ; then | |||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` | |||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |||||
# We build the pattern for arguments to be converted via cygpath | |||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |||||
SEP="" | |||||
for dir in $ROOTDIRSRAW ; do | |||||
ROOTDIRS="$ROOTDIRS$SEP$dir" | |||||
SEP="|" | |||||
done | |||||
OURCYGPATTERN="(^($ROOTDIRS))" | |||||
# Add a user-defined pattern to the cygpath arguments | |||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then | |||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | |||||
fi | |||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh | |||||
i=0 | |||||
for arg in "$@" ; do | |||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |||||
else | |||||
eval `echo args$i`="\"$arg\"" | |||||
fi | |||||
i=$((i+1)) | |||||
done | |||||
case $i in | |||||
(0) set -- ;; | |||||
(1) set -- "$args0" ;; | |||||
(2) set -- "$args0" "$args1" ;; | |||||
(3) set -- "$args0" "$args1" "$args2" ;; | |||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |||||
esac | |||||
fi | |||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules | |||||
function splitJvmOpts() { | |||||
JVM_OPTS=("$@") | |||||
} | |||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS | |||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" | |||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
@ -0,0 +1,90 @@ | |||||
@if "%DEBUG%" == "" @echo off | |||||
@rem ########################################################################## | |||||
@rem | |||||
@rem Gradle startup script for Windows | |||||
@rem | |||||
@rem ########################################################################## | |||||
@rem Set local scope for the variables with windows NT shell | |||||
if "%OS%"=="Windows_NT" setlocal | |||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||||
set DEFAULT_JVM_OPTS= | |||||
set DIRNAME=%~dp0 | |||||
if "%DIRNAME%" == "" set DIRNAME=. | |||||
set APP_BASE_NAME=%~n0 | |||||
set APP_HOME=%DIRNAME% | |||||
@rem Find java.exe | |||||
if defined JAVA_HOME goto findJavaFromJavaHome | |||||
set JAVA_EXE=java.exe | |||||
%JAVA_EXE% -version >NUL 2>&1 | |||||
if "%ERRORLEVEL%" == "0" goto init | |||||
echo. | |||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||||
echo. | |||||
echo Please set the JAVA_HOME variable in your environment to match the | |||||
echo location of your Java installation. | |||||
goto fail | |||||
:findJavaFromJavaHome | |||||
set JAVA_HOME=%JAVA_HOME:"=% | |||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |||||
if exist "%JAVA_EXE%" goto init | |||||
echo. | |||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |||||
echo. | |||||
echo Please set the JAVA_HOME variable in your environment to match the | |||||
echo location of your Java installation. | |||||
goto fail | |||||
:init | |||||
@rem Get command-line arguments, handling Windowz variants | |||||
if not "%OS%" == "Windows_NT" goto win9xME_args | |||||
if "%@eval[2+2]" == "4" goto 4NT_args | |||||
:win9xME_args | |||||
@rem Slurp the command line arguments. | |||||
set CMD_LINE_ARGS= | |||||
set _SKIP=2 | |||||
:win9xME_args_slurp | |||||
if "x%~1" == "x" goto execute | |||||
set CMD_LINE_ARGS=%* | |||||
goto execute | |||||
:4NT_args | |||||
@rem Get arguments from the 4NT Shell from JP Software | |||||
set CMD_LINE_ARGS=%$ | |||||
:execute | |||||
@rem Setup the command line | |||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |||||
@rem Execute Gradle | |||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | |||||
:end | |||||
@rem End local scope for the variables with windows NT shell | |||||
if "%ERRORLEVEL%"=="0" goto mainEnd | |||||
:fail | |||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |||||
rem the _cmd.exe /c_ return code! | |||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |||||
exit /b 1 | |||||
:mainEnd | |||||
if "%OS%"=="Windows_NT" endlocal | |||||
:omega |
@ -0,0 +1,8 @@ | |||||
keystore( | |||||
name = 'debug', | |||||
store = 'debug.keystore', | |||||
properties = 'debug.keystore.properties', | |||||
visibility = [ | |||||
'PUBLIC', | |||||
], | |||||
) |
@ -0,0 +1,4 @@ | |||||
key.store=debug.keystore | |||||
key.alias=androiddebugkey | |||||
key.store.password=android | |||||
key.alias.password=android |
@ -0,0 +1,5 @@ | |||||
rootProject.name = 'DetoxRNExample' | |||||
include ':react-native-date-picker' | |||||
project(':react-native-date-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-date-picker/android') | |||||
include ':app' |
@ -0,0 +1,55 @@ | |||||
/** | |||||
* Sample React Native App | |||||
* https://github.com/facebook/react-native | |||||
* @flow | |||||
*/ | |||||
import React, { Component } from 'react'; | |||||
import { | |||||
AppRegistry, | |||||
StyleSheet, | |||||
Text, | |||||
View, | |||||
TouchableOpacity | |||||
} from 'react-native'; | |||||
class example extends Component { | |||||
constructor(props) { | |||||
super(props); | |||||
this.state = { | |||||
greeting: undefined | |||||
}; | |||||
} | |||||
render() { | |||||
if (this.state.greeting) return this.renderAfterButton(); | |||||
return ( | |||||
<View testID='welcome' style={{flex: 1, paddingTop: 20, justifyContent: 'center', alignItems: 'center'}}> | |||||
<Text style={{fontSize: 25, marginBottom: 30}}> | |||||
Welcome | |||||
</Text> | |||||
<TouchableOpacity testID='hello_button' onPress={this.onButtonPress.bind(this, 'Hello')}> | |||||
<Text style={{color: 'blue', marginBottom: 20}}>Say Hello</Text> | |||||
</TouchableOpacity> | |||||
<TouchableOpacity testID='world_button' onPress={this.onButtonPress.bind(this, 'World')}> | |||||
<Text style={{color: 'blue', marginBottom: 20}}>Say World</Text> | |||||
</TouchableOpacity> | |||||
</View> | |||||
); | |||||
} | |||||
renderAfterButton() { | |||||
return ( | |||||
<View style={{flex: 1, paddingTop: 20, justifyContent: 'center', alignItems: 'center'}}> | |||||
<Text style={{fontSize: 25}}> | |||||
{this.state.greeting}!!! | |||||
</Text> | |||||
</View> | |||||
); | |||||
} | |||||
onButtonPress(greeting) { | |||||
this.setState({ | |||||
greeting: greeting | |||||
}); | |||||
} | |||||
} | |||||
AppRegistry.registerComponent('example', () => example); |
@ -0,0 +1,19 @@ | |||||
describe('Example', () => { | |||||
beforeEach(async () => { | |||||
await device.reloadReactNative(); | |||||
}); | |||||
it('should have welcome screen', async () => { | |||||
await expect(element(by.id('welcome'))).toBeVisible(); | |||||
}); | |||||
it('should show hello screen after tap', async () => { | |||||
await element(by.id('hello_button')).tap(); | |||||
await expect(element(by.text('Hello!!!'))).toBeVisible(); | |||||
}); | |||||
it('should show world screen after tap', async () => { | |||||
await element(by.id('world_button')).tap(); | |||||
await expect(element(by.text('World!!!'))).toBeVisible(); | |||||
}); | |||||
}); |
@ -0,0 +1,19 @@ | |||||
const detox = require('detox'); | |||||
const config = require('../package.json').detox; | |||||
const adapter = require('detox/runners/mocha/adapter'); | |||||
before(async () => { | |||||
await detox.init(config); | |||||
}); | |||||
beforeEach(async function () { | |||||
await adapter.beforeEach(this); | |||||
}); | |||||
afterEach(async function () { | |||||
await adapter.afterEach(this); | |||||
}); | |||||
after(async () => { | |||||
await detox.cleanup(); | |||||
}); |
@ -0,0 +1,4 @@ | |||||
--recursive | |||||
--timeout 300000 | |||||
--bail | |||||
--file e2e/init.js |
@ -0,0 +1,26 @@ | |||||
const {device, expect, element, by, waitFor} = require('detox'); | |||||
describe('Example', () => { | |||||
beforeEach(async () => { | |||||
await device.reloadReactNative(); | |||||
}); | |||||
it('should have welcome screen', async () => { | |||||
await expect(element(by.id('welcome'))).toBeVisible(); | |||||
}); | |||||
it('should show hello screen after tap', async () => { | |||||
await element(by.id('hello_button')).tap(); | |||||
await expect(element(by.text('Hello!!!'))).toBeVisible(); | |||||
}); | |||||
it('should show world screen after tap', async () => { | |||||
await element(by.id('world_button')).tap(); | |||||
await expect(element(by.text('World!!!'))).toBeVisible(); | |||||
}); | |||||
it('waitFor should be exported', async () => { | |||||
await waitFor(element(by.id('welcome'))).toExist().withTimeout(2000); | |||||
await expect(element(by.id('welcome'))).toExist(); | |||||
}); | |||||
}); |
@ -0,0 +1,14 @@ | |||||
const detox = require('detox'); | |||||
const config = require('../package.json').detox; | |||||
/* | |||||
Example showing how to use Detox with required objects rather than globally exported. | |||||
e.g `const {device, expect, element, by, waitFor} = require('detox');` | |||||
*/ | |||||
before(async () => { | |||||
await detox.init(config, {initGlobals: false}); | |||||
}); | |||||
after(async () => { | |||||
await detox.cleanup(); | |||||
}); |
@ -0,0 +1,3 @@ | |||||
--recursive | |||||
--timeout 300000 | |||||
--bail |
@ -0,0 +1 @@ | |||||
require('./app'); |
@ -0,0 +1 @@ | |||||
require('./app'); |
@ -0,0 +1,129 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<Scheme | |||||
LastUpgradeVersion = "0820" | |||||
version = "1.3"> | |||||
<BuildAction | |||||
parallelizeBuildables = "NO" | |||||
buildImplicitDependencies = "YES"> | |||||
<BuildActionEntries> | |||||
<BuildActionEntry | |||||
buildForTesting = "YES" | |||||
buildForRunning = "YES" | |||||
buildForProfiling = "YES" | |||||
buildForArchiving = "YES" | |||||
buildForAnalyzing = "YES"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192" | |||||
BuildableName = "libReact.a" | |||||
BlueprintName = "React" | |||||
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildActionEntry> | |||||
<BuildActionEntry | |||||
buildForTesting = "YES" | |||||
buildForRunning = "YES" | |||||
buildForProfiling = "YES" | |||||
buildForArchiving = "YES" | |||||
buildForAnalyzing = "YES"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildActionEntry> | |||||
<BuildActionEntry | |||||
buildForTesting = "YES" | |||||
buildForRunning = "YES" | |||||
buildForProfiling = "NO" | |||||
buildForArchiving = "NO" | |||||
buildForAnalyzing = "YES"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E" | |||||
BuildableName = "exampleTests.xctest" | |||||
BlueprintName = "exampleTests" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildActionEntry> | |||||
</BuildActionEntries> | |||||
</BuildAction> | |||||
<TestAction | |||||
buildConfiguration = "Debug" | |||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||||
shouldUseLaunchSchemeArgsEnv = "YES"> | |||||
<Testables> | |||||
<TestableReference | |||||
skipped = "NO"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E" | |||||
BuildableName = "exampleTests.xctest" | |||||
BlueprintName = "exampleTests" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</TestableReference> | |||||
</Testables> | |||||
<MacroExpansion> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</MacroExpansion> | |||||
<AdditionalOptions> | |||||
</AdditionalOptions> | |||||
</TestAction> | |||||
<LaunchAction | |||||
buildConfiguration = "Release" | |||||
selectedDebuggerIdentifier = "" | |||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn" | |||||
launchStyle = "0" | |||||
useCustomWorkingDirectory = "NO" | |||||
ignoresPersistentStateOnLaunch = "NO" | |||||
debugDocumentVersioning = "YES" | |||||
debugServiceExtension = "internal" | |||||
allowLocationSimulation = "YES"> | |||||
<BuildableProductRunnable | |||||
runnableDebuggingMode = "0"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildableProductRunnable> | |||||
<AdditionalOptions> | |||||
</AdditionalOptions> | |||||
</LaunchAction> | |||||
<ProfileAction | |||||
buildConfiguration = "Release" | |||||
shouldUseLaunchSchemeArgsEnv = "YES" | |||||
savedToolIdentifier = "" | |||||
useCustomWorkingDirectory = "NO" | |||||
debugDocumentVersioning = "YES"> | |||||
<BuildableProductRunnable | |||||
runnableDebuggingMode = "0"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildableProductRunnable> | |||||
</ProfileAction> | |||||
<AnalyzeAction | |||||
buildConfiguration = "Debug"> | |||||
</AnalyzeAction> | |||||
<ArchiveAction | |||||
buildConfiguration = "Release" | |||||
revealArchiveInOrganizer = "YES"> | |||||
</ArchiveAction> | |||||
</Scheme> |
@ -0,0 +1,105 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<Scheme | |||||
LastUpgradeVersion = "0820" | |||||
version = "1.3"> | |||||
<BuildAction | |||||
parallelizeBuildables = "NO" | |||||
buildImplicitDependencies = "YES"> | |||||
<BuildActionEntries> | |||||
<BuildActionEntry | |||||
buildForTesting = "YES" | |||||
buildForRunning = "YES" | |||||
buildForProfiling = "YES" | |||||
buildForArchiving = "YES" | |||||
buildForAnalyzing = "YES"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192" | |||||
BuildableName = "libReact.a" | |||||
BlueprintName = "React" | |||||
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildActionEntry> | |||||
<BuildActionEntry | |||||
buildForTesting = "YES" | |||||
buildForRunning = "YES" | |||||
buildForProfiling = "YES" | |||||
buildForArchiving = "YES" | |||||
buildForAnalyzing = "YES"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildActionEntry> | |||||
</BuildActionEntries> | |||||
</BuildAction> | |||||
<TestAction | |||||
buildConfiguration = "Debug" | |||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||||
shouldUseLaunchSchemeArgsEnv = "YES"> | |||||
<Testables> | |||||
</Testables> | |||||
<MacroExpansion> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</MacroExpansion> | |||||
<AdditionalOptions> | |||||
</AdditionalOptions> | |||||
</TestAction> | |||||
<LaunchAction | |||||
buildConfiguration = "Debug" | |||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||||
launchStyle = "0" | |||||
useCustomWorkingDirectory = "NO" | |||||
ignoresPersistentStateOnLaunch = "NO" | |||||
debugDocumentVersioning = "YES" | |||||
debugServiceExtension = "internal" | |||||
allowLocationSimulation = "YES"> | |||||
<BuildableProductRunnable | |||||
runnableDebuggingMode = "0"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildableProductRunnable> | |||||
<AdditionalOptions> | |||||
</AdditionalOptions> | |||||
</LaunchAction> | |||||
<ProfileAction | |||||
buildConfiguration = "Release" | |||||
shouldUseLaunchSchemeArgsEnv = "YES" | |||||
savedToolIdentifier = "" | |||||
useCustomWorkingDirectory = "NO" | |||||
debugDocumentVersioning = "YES"> | |||||
<BuildableProductRunnable | |||||
runnableDebuggingMode = "0"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||||
BuildableName = "example.app" | |||||
BlueprintName = "example" | |||||
ReferencedContainer = "container:example.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildableProductRunnable> | |||||
</ProfileAction> | |||||
<AnalyzeAction | |||||
buildConfiguration = "Debug"> | |||||
</AnalyzeAction> | |||||
<ArchiveAction | |||||
buildConfiguration = "Release" | |||||
revealArchiveInOrganizer = "YES"> | |||||
</ArchiveAction> | |||||
</Scheme> |
@ -0,0 +1,16 @@ | |||||
/** | |||||
* 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> | |||||
@interface AppDelegate : UIResponder <UIApplicationDelegate> | |||||
@property (nonatomic, strong) UIWindow *window; | |||||
@end |
@ -0,0 +1,37 @@ | |||||
/** | |||||
* 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 "AppDelegate.h" | |||||
#import <React/RCTRootView.h> | |||||
#import <React/RCTBundleURLProvider.h> | |||||
@implementation AppDelegate | |||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |||||
{ | |||||
NSURL *jsCodeLocation; | |||||
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; | |||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation | |||||
moduleName:@"example" | |||||
initialProperties:nil | |||||
launchOptions:launchOptions]; | |||||
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; | |||||
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |||||
UIViewController *rootViewController = [UIViewController new]; | |||||
rootViewController.view = rootView; | |||||
self.window.rootViewController = rootViewController; | |||||
[self.window makeKeyAndVisible]; | |||||
return YES; | |||||
} | |||||
@end |
@ -0,0 +1,42 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES"> | |||||
<dependencies> | |||||
<deployment identifier="iOS"/> | |||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/> | |||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> | |||||
</dependencies> | |||||
<objects> | |||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | |||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | |||||
<view contentMode="scaleToFill" id="iN0-l3-epB"> | |||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/> | |||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |||||
<subviews> | |||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye"> | |||||
<rect key="frame" x="20" y="439" width="441" height="21"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="example" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX"> | |||||
<rect key="frame" x="20" y="140" width="441" height="43"/> | |||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/> | |||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | |||||
<constraints> | |||||
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/> | |||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/> | |||||
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/> | |||||
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/> | |||||
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/> | |||||
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/> | |||||
</constraints> | |||||
<nil key="simulatedStatusBarMetrics"/> | |||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> | |||||
<point key="canvasLocation" x="548" y="455"/> | |||||
</view> | |||||
</objects> | |||||
</document> |
@ -0,0 +1,48 @@ | |||||
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "20x20", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "20x20", | |||||
"scale" : "3x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "29x29", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "29x29", | |||||
"scale" : "3x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "40x40", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "40x40", | |||||
"scale" : "3x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "60x60", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"idiom" : "iphone", | |||||
"size" : "60x60", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"version" : 1, | |||||
"author" : "xcode" | |||||
} | |||||
} |
@ -0,0 +1,47 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||||
<plist version="1.0"> | |||||
<dict> | |||||
<key>CFBundleDevelopmentRegion</key> | |||||
<string>en</string> | |||||
<key>CFBundleExecutable</key> | |||||
<string>$(EXECUTABLE_NAME)</string> | |||||
<key>CFBundleIdentifier</key> | |||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||||
<key>CFBundleInfoDictionaryVersion</key> | |||||
<string>6.0</string> | |||||
<key>CFBundleName</key> | |||||
<string>$(PRODUCT_NAME)</string> | |||||
<key>CFBundlePackageType</key> | |||||
<string>APPL</string> | |||||
<key>CFBundleShortVersionString</key> | |||||
<string>1.0</string> | |||||
<key>CFBundleSignature</key> | |||||
<string>????</string> | |||||
<key>CFBundleVersion</key> | |||||
<string>1</string> | |||||
<key>LSRequiresIPhoneOS</key> | |||||
<true/> | |||||
<key>NSAppTransportSecurity</key> | |||||
<dict> | |||||
<key>NSAllowsArbitraryLoads</key> | |||||
<true/> | |||||
</dict> | |||||
<key>NSLocationWhenInUseUsageDescription</key> | |||||
<string></string> | |||||
<key>UILaunchStoryboardName</key> | |||||
<string>LaunchScreen</string> | |||||
<key>UIRequiredDeviceCapabilities</key> | |||||
<array> | |||||
<string>armv7</string> | |||||
</array> | |||||
<key>UISupportedInterfaceOrientations</key> | |||||
<array> | |||||
<string>UIInterfaceOrientationPortrait</string> | |||||
<string>UIInterfaceOrientationLandscapeLeft</string> | |||||
<string>UIInterfaceOrientationLandscapeRight</string> | |||||
</array> | |||||
<key>UIViewControllerBasedStatusBarAppearance</key> | |||||
<false/> | |||||
</dict> | |||||
</plist> |
@ -0,0 +1,18 @@ | |||||
/** | |||||
* 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 "AppDelegate.h" | |||||
int main(int argc, char * argv[]) { | |||||
@autoreleasepool { | |||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); | |||||
} | |||||
} |
@ -0,0 +1,24 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||||
<plist version="1.0"> | |||||
<dict> | |||||
<key>CFBundleDevelopmentRegion</key> | |||||
<string>en</string> | |||||
<key>CFBundleExecutable</key> | |||||
<string>$(EXECUTABLE_NAME)</string> | |||||
<key>CFBundleIdentifier</key> | |||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||||
<key>CFBundleInfoDictionaryVersion</key> | |||||
<string>6.0</string> | |||||
<key>CFBundleName</key> | |||||
<string>$(PRODUCT_NAME)</string> | |||||
<key>CFBundlePackageType</key> | |||||
<string>BNDL</string> | |||||
<key>CFBundleShortVersionString</key> | |||||
<string>1.0</string> | |||||
<key>CFBundleSignature</key> | |||||
<string>????</string> | |||||
<key>CFBundleVersion</key> | |||||
<string>1</string> | |||||
</dict> | |||||
</plist> |
@ -0,0 +1,70 @@ | |||||
/** | |||||
* 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 <React/RCTLog.h> | |||||
#import <React/RCTRootView.h> | |||||
#define TIMEOUT_SECONDS 600 | |||||
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" | |||||
@interface exampleTests : XCTestCase | |||||
@end | |||||
@implementation exampleTests | |||||
- (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, RCTLogSource source, 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,67 @@ | |||||
{ | |||||
"name": "example", | |||||
"version": "14.0.1", | |||||
"private": true, | |||||
"scripts": { | |||||
"start": "react-native start", | |||||
"build:ios": "detox build --configuration ios.sim.debug", | |||||
"build:android-debug": "detox build --configuration android.emu.debug", | |||||
"build:android-release": "detox build --configuration android.emu.release", | |||||
"test:ios": "detox test --configuration ios.sim.debug", | |||||
"test:android-debug": "detox test --configuration android.emu.debug -l verbose", | |||||
"test:android-release": "detox test --configuration android.emu.release -l verbose", | |||||
"test:android-explicit-require": "detox test e2eExplicitRequire -c android.emu.release -l verbose --runner-config e2eExplicitRequire/mocha.opts", | |||||
"e2e:ios": "npm run build:ios && npm run test:ios", | |||||
"e2e:android-debug": "npm run build:android-debug && npm run test:android-debug", | |||||
"e2e:android-release": "npm run build:android-release && npm run test:android-release" | |||||
}, | |||||
"dependencies": { | |||||
"react": "16.8.3", | |||||
"react-native": "0.59.9", | |||||
"react-native-date-picker": "^2.6.1" | |||||
}, | |||||
"devDependencies": { | |||||
"detox": "^14.0.1", | |||||
"mocha": "^6.1.3" | |||||
}, | |||||
"detox": { | |||||
"test-runner": "mocha", | |||||
"runner-config": "e2e/mocha.opts", | |||||
"configurations": { | |||||
"ios.sim.release": { | |||||
"binaryPath": "ios/build/Build/Products/Release-iphonesimulator/example.app", | |||||
"build": "export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -project ios/example.xcodeproj -UseNewBuildSystem=NO -scheme example -configuration Release -sdk iphonesimulator -derivedDataPath ios/build -quiet", | |||||
"type": "ios.simulator", | |||||
"name": "iPhone X" | |||||
}, | |||||
"ios.sim.debug": { | |||||
"binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/example.app", | |||||
"build": "xcodebuild -project ios/example.xcodeproj -UseNewBuildSystem=NO -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", | |||||
"type": "ios.simulator", | |||||
"name": "iPhone X" | |||||
}, | |||||
"ios.none": { | |||||
"binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/example.app", | |||||
"build": "xcodebuild -project ios/example.xcodeproj -UseNewBuildSystem=NO -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", | |||||
"type": "ios.none", | |||||
"name": "iPhone X", | |||||
"session": { | |||||
"server": "ws://localhost:8099", | |||||
"sessionId": "com.wix.demo.react.native" | |||||
} | |||||
}, | |||||
"android.emu.debug": { | |||||
"binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk", | |||||
"build": "cd android ; ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug ; cd -", | |||||
"type": "android.emulator", | |||||
"name": "Nexus_4_API_28" | |||||
}, | |||||
"android.emu.release": { | |||||
"binaryPath": "android/app/build/outputs/apk/release/app-release.apk", | |||||
"build": "cd android ; ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release ; cd -", | |||||
"type": "android.emulator", | |||||
"name": "Nexus_4_API_28" | |||||
} | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,12 @@ | |||||
let metroBundler; | |||||
try { | |||||
metroBundler = require('metro'); | |||||
} catch (ex) { | |||||
metroBundler = require('metro-bundler'); | |||||
} | |||||
module.exports = { | |||||
getBlacklistRE: function() { | |||||
return metroBundler.createBlacklist([/test\/.*/, /detox\/node_modules\/.*/]); | |||||
} | |||||
}; |