diff --git a/.github/workflows/android_ut.yml b/.github/workflows/android_ut.yml
new file mode 100644
index 00000000..19341244
--- /dev/null
+++ b/.github/workflows/android_ut.yml
@@ -0,0 +1,20 @@
+name: Android Unit Tests
+
+on: [push]
+
+jobs:
+ test:
+ name: Linux Android Unit Tests
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-java@v1
+ with:
+ java-version: '12.x'
+ - uses: subosito/flutter-action@v1
+ with:
+ flutter-version: '1.7.8+hotfix.4'
+ - run: flutter doctor
+ - run: flutter pub get
+ - run: sh android_test.sh
diff --git a/.github/workflows/flutter_ut.yml b/.github/workflows/flutter_ut.yml
new file mode 100644
index 00000000..c34b0653
--- /dev/null
+++ b/.github/workflows/flutter_ut.yml
@@ -0,0 +1,20 @@
+name: Flutter Unit Tests
+
+on: [push]
+
+jobs:
+ test:
+ name: Linux Flutter Unit Tests
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-java@v1
+ with:
+ java-version: '12.x'
+ - uses: subosito/flutter-action@v1
+ with:
+ flutter-version: '1.7.8+hotfix.4'
+ - run: flutter doctor
+ - run: flutter pub get
+ - run: flutter test
diff --git a/.gitignore b/.gitignore
index ba43309c..9f1cce46 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
.vscode
.packages
.pub/
+.gradle/
build/
ios/.generated/
packages
@@ -14,4 +15,6 @@ example/ios/Podfile.lock
**/Flutter/Flutter.framework/
**/Flutter/Generated.xcconfig/
**/Flutter/flutter_assets/
-flutter_export_environment.sh
+example/ios/Flutter/flutter_export_environment.sh
+android/.project
+android/.settings/
diff --git a/android/.gitignore b/android/.gitignore
deleted file mode 100644
index 5c4ef828..00000000
--- a/android/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea/workspace.xml
-/.idea/libraries
-.DS_Store
-/build
-/captures
-
-/gradle
-/gradlew
-/gradlew.bat
diff --git a/android/android.iml b/android/android.iml
new file mode 100644
index 00000000..0fe7ea9f
--- /dev/null
+++ b/android/android.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/build.gradle b/android/build.gradle
index a9655d27..ec4bab9e 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -45,7 +45,27 @@ android {
lintOptions {
disable 'InvalidPackage'
}
+
+ testOptions {
+ unitTests {
+ includeAndroidResources = true
+ }
+ }
}
dependencies {
- implementation group: 'androidx.appcompat', name: 'appcompat', version: '1.0.0'
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+
+ testImplementation 'junit:junit:4.12'
+ testImplementation 'androidx.test:core:1.2.0'
+
+// When running unit tests for project, gradle needs to have flutter.jar in path
+// since there's no FLUTTER_HOME variable, we need to pass flutterPath from console with command:
+// ./gradlew test -DflutterPath=/Users/rafal.wachol/Utils/flutter
+//
+// while develop you can set path to this jar explicitly so IDE won't complain
+ if(System.getProperty('flutterPath')) {
+ testImplementation files(System.getProperty('flutterPath') + '/bin/cache/artifacts/engine/android-x64/flutter.jar')
+ }
+
+ testImplementation 'org.mockito:mockito-inline:2.28.2'
}
diff --git a/android/flutter_webview_plugin.iml b/android/flutter_webview_plugin.iml
new file mode 100644
index 00000000..81a83b99
--- /dev/null
+++ b/android/flutter_webview_plugin.iml
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/local.properties b/android/local.properties
new file mode 100644
index 00000000..39a22f1c
--- /dev/null
+++ b/android/local.properties
@@ -0,0 +1,8 @@
+## This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Mon Jun 03 19:01:20 BST 2019
+sdk.dir=C\:\\Users\\Gloria\\AppData\\Local\\Android\\Sdk
diff --git a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java
index a7faacfb..acef8e0f 100644
--- a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java
+++ b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java
@@ -38,7 +38,7 @@ public static void registerWith(PluginRegistry.Registrar registrar) {
channel.setMethodCallHandler(instance);
}
- private FlutterWebviewPlugin(Activity activity, Context context) {
+ FlutterWebviewPlugin(Activity activity, Context context) {
this.activity = activity;
this.context = context;
}
@@ -88,7 +88,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
}
}
- private void openUrl(MethodCall call, MethodChannel.Result result) {
+ void openUrl(MethodCall call, MethodChannel.Result result) {
boolean hidden = call.argument("hidden");
String url = call.argument("url");
String userAgent = call.argument("userAgent");
@@ -172,7 +172,7 @@ private void stopLoading(MethodCall call, MethodChannel.Result result) {
result.success(null);
}
- private void close(MethodCall call, MethodChannel.Result result) {
+ void close(MethodCall call, MethodChannel.Result result) {
if (webViewManager != null) {
webViewManager.close(call, result);
webViewManager = null;
diff --git a/android/src/test/java/com/flutter_webview_plugin/FlutterWebviewPluginTest.java b/android/src/test/java/com/flutter_webview_plugin/FlutterWebviewPluginTest.java
new file mode 100644
index 00000000..8feb0584
--- /dev/null
+++ b/android/src/test/java/com/flutter_webview_plugin/FlutterWebviewPluginTest.java
@@ -0,0 +1,41 @@
+package com.flutter_webview_plugin;
+
+import android.app.Activity;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+
+import io.flutter.plugin.common.ErrorLogResult;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+
+import static org.mockito.Mockito.verify;
+
+public class FlutterWebviewPluginTest {
+
+ @Mock
+ Activity mockActivity;
+
+ MethodCall mockMethodCall;
+ MethodChannel.Result mockResult;
+
+ @Spy
+ FlutterWebviewPlugin flutterWebviewPlugin = new FlutterWebviewPlugin(mockActivity, mockActivity);
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Test
+ public void shouldInvokeClose() {
+ mockMethodCall = new MethodCall("close", null);
+ mockResult = new ErrorLogResult("");
+ flutterWebviewPlugin.onMethodCall(mockMethodCall, mockResult);
+ verify(flutterWebviewPlugin).close(mockMethodCall, mockResult);
+
+ }
+}
\ No newline at end of file
diff --git a/android/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/android/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000..ca6ee9ce
--- /dev/null
+++ b/android/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
\ No newline at end of file
diff --git a/android_test.sh b/android_test.sh
new file mode 100755
index 00000000..89c75823
--- /dev/null
+++ b/android_test.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+cd example/android
+./gradlew test -DflutterPath=$FLUTTER_HOME
diff --git a/example/android/.gitignore b/example/android/.gitignore
index e6a9f067..b985fd38 100644
--- a/example/android/.gitignore
+++ b/example/android/.gitignore
@@ -8,6 +8,5 @@
/captures
PluginRegistry.java
-/gradle
-/gradlew
-/gradlew.bat
+.project
+.settings
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index fe1e79cb..c1418a3d 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -42,7 +42,9 @@ flutter {
}
dependencies {
+ testImplementation 'junit:junit:4.12'
+
androidTestImplementation 'androidx.annotation:annotation:1.0.2'
- androidTestImplementation 'androidx.test:runner:1.1.1'
- androidTestImplementation 'androidx.test:rules:1.1.1'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test:rules:1.2.0'
}
diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..13372aef
Binary files /dev/null and b/example/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..2819f022
--- /dev/null
+++ b/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 23 08:50:38 CEST 2017
+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
diff --git a/example/android/gradlew b/example/android/gradlew
new file mode 100755
index 00000000..9d82f789
--- /dev/null
+++ b/example/android/gradlew
@@ -0,0 +1,160 @@
+#!/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
+
+# 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\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+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"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # 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 "$@"
diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat
new file mode 100644
index 00000000..aec99730
--- /dev/null
+++ b/example/android/gradlew.bat
@@ -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
diff --git a/lib/src/base.dart b/lib/src/base.dart
index 1ff168e2..7060e030 100644
--- a/lib/src/base.dart
+++ b/lib/src/base.dart
@@ -16,15 +16,22 @@ enum WebViewState { shouldStart, startLoad, finishLoad, abortLoad }
/// Singleton class that communicate with a Webview Instance
class FlutterWebviewPlugin {
- factory FlutterWebviewPlugin() => _instance ??= FlutterWebviewPlugin._();
+ factory FlutterWebviewPlugin() {
+ if(_instance == null) {
+ const MethodChannel methodChannel = const MethodChannel(_kChannel);
+ _instance = FlutterWebviewPlugin.private(methodChannel);
+ }
+ return _instance;
+ }
- FlutterWebviewPlugin._() {
+ @visibleForTesting
+ FlutterWebviewPlugin.private(this._channel) {
_channel.setMethodCallHandler(_handleMessages);
}
static FlutterWebviewPlugin _instance;
- final _channel = const MethodChannel(_kChannel);
+ final MethodChannel _channel;
final _onBack = StreamController.broadcast();
final _onDestroy = StreamController.broadcast();
diff --git a/pubspec.yaml b/pubspec.yaml
index 9705994a..0ea198e8 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -21,3 +21,8 @@ flutter:
dependencies:
flutter:
sdk: flutter
+
+dev_dependencies:
+ mockito: ^4.1.0
+ flutter_test:
+ sdk: flutter
\ No newline at end of file
diff --git a/scripts/before_build_apks.sh b/scripts/before_build_apks.sh
new file mode 100755
index 00000000..6dc242a0
--- /dev/null
+++ b/scripts/before_build_apks.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
+mkdir android-sdk
+unzip -qq sdk-tools-linux-3859397.zip -d android-sdk
+export ANDROID_HOME=`pwd`/android-sdk
+export PATH=`pwd`/android-sdk/tools/bin:$PATH
+mkdir -p /home/travis/.android # silence sdkmanager warning
+echo 'count=0' > /home/travis/.android/repositories.cfg # silence sdkmanager warning
+ # suppressing output of sdkmanager to keep log under 4MB (travis limit)
+echo y | sdkmanager "tools" >/dev/null
+echo y | sdkmanager "platform-tools" >/dev/null
+echo y | sdkmanager "build-tools;28.0.3" >/dev/null
+echo y | sdkmanager "platforms;android-28" >/dev/null
+echo y | sdkmanager "extras;android;m2repository" >/dev/null
+echo y | sdkmanager "extras;google;m2repository" >/dev/null
+echo y | sdkmanager "patcher;v4" >/dev/null
+sdkmanager --list
+wget https://services.gradle.org/distributions/gradle-4.10.2-all.zip
+unzip -qq gradle-4.10.2-all.zip
+export GRADLE_HOME=$PWD/gradle-4.10.2
+export PATH=$GRADLE_HOME/bin:$PATH
+gradle -v
+git clone --depth=1 https://github.com/flutter/flutter.git
+export PATH=`pwd`/flutter/bin:`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
+flutter doctor
+pub global activate flutter_plugin_tools
\ No newline at end of file
diff --git a/test/flutter_webview_plugin_test.dart b/test/flutter_webview_plugin_test.dart
new file mode 100644
index 00000000..052e68b7
--- /dev/null
+++ b/test/flutter_webview_plugin_test.dart
@@ -0,0 +1,44 @@
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
+import 'package:mockito/mockito.dart';
+
+void main() {
+ MockMethodChannel methodChannel;
+ FlutterWebviewPlugin webview;
+
+ setUp(() {
+ methodChannel = MockMethodChannel();
+ webview = new FlutterWebviewPlugin.private(methodChannel);
+ });
+
+
+ group('Method channel invoke', () {
+ test('Should invoke close', () async {
+ webview.close();
+ verify(methodChannel.invokeMethod('close')).called(1);
+ });
+ test('Should invoke reload', () async {
+ webview.reload();
+ verify(methodChannel.invokeMethod('reload')).called(1);
+ });
+ test('Should invoke goBack', () async {
+ webview.goBack();
+ verify(methodChannel.invokeMethod('back')).called(1);
+ });
+ test('Should invoke goForward', () async {
+ webview.goForward();
+ verify(methodChannel.invokeMethod('forward')).called(1);
+ });
+ test('Should invoke hide', () async {
+ webview.hide();
+ verify(methodChannel.invokeMethod('hide')).called(1);
+ });
+ test('Should invoke show', () async {
+ webview.show();
+ verify(methodChannel.invokeMethod('show')).called(1);
+ });
+ });
+}
+
+class MockMethodChannel extends Mock implements MethodChannel {}
diff --git a/travis.yml.bak b/travis.yml.bak
new file mode 100644
index 00000000..d71963b5
--- /dev/null
+++ b/travis.yml.bak
@@ -0,0 +1,96 @@
+matrix:
+ include:
+ # # Job 1) Run analyzer
+ # - os: linux
+ # env:
+ # - SHARD=Analyze
+ # sudo: false
+ # addons:
+ # apt:
+ # # Flutter depends on /usr/lib/x86_64-linux-gnu/libstdc++.so.6 version GLIBCXX_3.4.18
+ # sources:
+ # - ubuntu-toolchain-r-test # if we don't specify this, the libstdc++6 we get is the wrong version
+ # packages:
+ # - libstdc++6
+ # - fonts-droid
+ # before_script:
+ # - git clone https://github.com/flutter/flutter.git
+ # - export PATH=`pwd`/flutter/bin:`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
+ # - flutter doctor
+ # - pub global activate flutter_plugin_tools
+ # script:
+ # - ./script/incremental_build.sh analyze
+ # Job 2) Run dart unit tests
+ - os: linux
+ env:
+ - SHARD=Format+Test
+ jdk: oraclejdk8
+ sudo: false
+ addons:
+ apt:
+ # Flutter depends on /usr/lib/x86_64-linux-gnu/libstdc++.so.6 version GLIBCXX_3.4.18
+ sources:
+ - ubuntu-toolchain-r-test # if we don't specify this, the libstdc++6 we get is the wrong version
+ - llvm-toolchain-precise # for clang-format-5.0
+ packages:
+ - libstdc++6
+ - fonts-droid
+ - clang-format-5.0
+ before_script:
+ - git clone --depth=1 https://github.com/flutter/flutter.git
+ - export PATH=`pwd`/flutter/bin:`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
+ - flutter doctor
+ script:
+ - flutter test
+ # Job 3.1) Build example APKs and run Java tests, shard 1/2
+ - os: linux
+ env:
+ - SHARD="Build example apks 1/2"
+ - PLUGIN_SHARDING="--shardIndex 0 --shardCount 2"
+ jdk: oraclejdk8
+ sudo: false
+ addons:
+ apt:
+ # Flutter depends on /usr/lib/x86_64-linux-gnu/libstdc++.so.6 version GLIBCXX_3.4.18
+ sources:
+ - ubuntu-toolchain-r-test # if we don't specify this, the libstdc++6 we get is the wrong version
+ packages:
+ - lib32stdc++6 # https://github.com/flutter/flutter/issues/6207
+ - libstdc++6
+ - fonts-droid
+ before_script:
+ - ./scripts/before_build_apks.sh
+ - export ANDROID_HOME=`pwd`/android-sdk
+ - export PATH=`pwd`/flutter/bin:`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
+ - export FLUTTER_HOME=`pwd`/flutter
+ script:
+ - cd example/android
+ - ./gradlew test -DflutterPath=$FLUTTER_HOME
+ # # Job 3.2) Build example APKs and run Java tests, shard 2/2
+ # - os: linux
+ # env:
+ # - SHARD="Build example apks 2/2"
+ # - PLUGIN_SHARDING="--shardIndex 1 --shardCount 2"
+ # jdk: oraclejdk8
+ # sudo: false
+ # addons:
+ # apt:
+ # # Flutter depends on /usr/lib/x86_64-linux-gnu/libstdc++.so.6 version GLIBCXX_3.4.18
+ # sources:
+ # - ubuntu-toolchain-r-test # if we don't specify this, the libstdc++6 we get is the wrong version
+ # packages:
+ # - lib32stdc++6 # https://github.com/flutter/flutter/issues/6207
+ # - libstdc++6
+ # - fonts-droid
+ # before_script:
+ # - ./script/before_build_apks.sh
+ # - export ANDROID_HOME=`pwd`/android-sdk
+ # - export PATH=`pwd`/flutter/bin:`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
+ # script:
+ # - ./script/incremental_build.sh build-examples --apk
+ # - ./script/incremental_build.sh java-test # must come after apk build
+
+
+cache:
+ directories:
+ - $HOME/.pub-cache
\ No newline at end of file