mirror of
https://github.com/apache/cordova-android.git
synced 2025-03-04 00:13:20 +08:00
Big Refactor of integration tests: use locks rather than timeouts, deleted disabled tests, Use same activity for most tests
This commit is contained in:
parent
c552d912a0
commit
4358a04730
@ -65,205 +65,23 @@
|
|||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.background" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.backgroundcolor" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.basicauth" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
<activity
|
||||||
android:windowSoftInputMode="adjustPan"
|
android:windowSoftInputMode="adjustPan"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:name="org.apache.cordova.test.MainTestActivity" >
|
android:name="org.apache.cordova.test.MainTestActivity" >
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.CordovaDriverAction" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.errorurl" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.fullscreen" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.htmlnotfound" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.iframe" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.lifecycle" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.loading" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:windowSoftInputMode="adjustPan"
|
android:windowSoftInputMode="adjustPan"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:name="org.apache.cordova.test.menus" >
|
android:name="org.apache.cordova.test.menus" >
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.splashscreen" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.tests" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.timeout" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:windowSoftInputMode="adjustPan"
|
android:windowSoftInputMode="adjustPan"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:name="org.apache.cordova.test.userwebview" >
|
android:name="org.apache.cordova.test.userwebview" >
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.whitelist" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.xhr" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.backbuttonmultipage" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:windowSoftInputMode="adjustPan"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation|keyboardHidden"
|
|
||||||
android:name="org.apache.cordova.test.SabotagedActivity" >
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -45,9 +45,9 @@ Copy it from a freshly created project:
|
|||||||
|
|
||||||
Robotium has to be installed for the onScrollChanged tests to work correctly. It can be
|
Robotium has to be installed for the onScrollChanged tests to work correctly. It can be
|
||||||
found at https://code.google.com/p/robotium/ and the jar should be put in the
|
found at https://code.google.com/p/robotium/ and the jar should be put in the
|
||||||
'androidTests/libs' directory'.
|
'androidTest/libs' directory'.
|
||||||
|
|
||||||
mkdir -p androidTests/libs && curl 'http://dl.bintray.com/robotium/generic/robotium-solo-5.2.1.jar' > androidTests/libs/robotium-solo-5.2.1.jar
|
mkdir -p androidTest/libs && curl 'http://dl.bintray.com/robotium/generic/robotium-solo-5.2.1.jar' > androidTest/libs/robotium-solo-5.2.1.jar
|
||||||
|
|
||||||
## Running
|
## Running
|
||||||
|
|
||||||
|
@ -0,0 +1,194 @@
|
|||||||
|
package org.apache.cordova.test;
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
import android.view.inputmethod.BaseInputConnection;
|
||||||
|
|
||||||
|
public class BackButtonMultiPageTest extends BaseCordovaIntegrationTest {
|
||||||
|
private static final String START_URL = "file:///android_asset/www/backbuttonmultipage/index.html";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
setUpWithStartUrl(START_URL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testViaHref() throws Throwable {
|
||||||
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
cordovaWebView.sendJavascript("window.location = 'sample2.html';");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
cordovaWebView.sendJavascript("window.location = 'sample3.html';"); }
|
||||||
|
});
|
||||||
|
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample3.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
assertTrue(cordovaWebView.backHistory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
assertTrue(cordovaWebView.backHistory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
assertFalse(cordovaWebView.backHistory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testViaLoadUrl() throws Throwable {
|
||||||
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
cordovaWebView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample2.html");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
cordovaWebView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample3.html");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample3.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
assertTrue(cordovaWebView.backHistory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
assertTrue(cordovaWebView.backHistory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/index.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
assertFalse(cordovaWebView.backHistory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testViaBackButtonOnView() throws Throwable {
|
||||||
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
cordovaWebView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample2.html");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
cordovaWebView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample3.html");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample3.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
String url = cordovaWebView.getUrl();
|
||||||
|
assertTrue(url.endsWith("sample3.html"));
|
||||||
|
BaseInputConnection viewConnection = new BaseInputConnection(cordovaWebView.getView(), true);
|
||||||
|
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
||||||
|
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
||||||
|
viewConnection.sendKeyEvent(backDown);
|
||||||
|
viewConnection.sendKeyEvent(backUp);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
String url = cordovaWebView.getUrl();
|
||||||
|
assertTrue(url.endsWith("sample2.html"));
|
||||||
|
BaseInputConnection viewConnection = new BaseInputConnection(cordovaWebView.getView(), true);
|
||||||
|
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
||||||
|
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
||||||
|
viewConnection.sendKeyEvent(backDown);
|
||||||
|
viewConnection.sendKeyEvent(backUp);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/index.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testViaBackButtonOnLayout() throws Throwable {
|
||||||
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
cordovaWebView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample2.html");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
cordovaWebView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample3.html");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample3.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
String url = cordovaWebView.getUrl();
|
||||||
|
assertTrue(url.endsWith("sample3.html"));
|
||||||
|
BaseInputConnection viewConnection = new BaseInputConnection(containerView, true);
|
||||||
|
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
||||||
|
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
||||||
|
viewConnection.sendKeyEvent(backDown);
|
||||||
|
viewConnection.sendKeyEvent(backUp);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
String url = cordovaWebView.getUrl();
|
||||||
|
assertTrue(url.endsWith("sample2.html"));
|
||||||
|
BaseInputConnection viewConnection = new BaseInputConnection(containerView, true);
|
||||||
|
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
||||||
|
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
||||||
|
viewConnection.sendKeyEvent(backDown);
|
||||||
|
viewConnection.sendKeyEvent(backUp);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals("file:///android_asset/www/backbuttonmultipage/index.html", testActivity.onPageFinishedUrl.take());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
package org.apache.cordova.test;
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.test.ActivityInstrumentationTestCase2;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
|
import org.apache.cordova.CordovaWebView;
|
||||||
|
|
||||||
|
public class BaseCordovaIntegrationTest extends ActivityInstrumentationTestCase2<MainTestActivity> {
|
||||||
|
protected MainTestActivity testActivity;
|
||||||
|
protected FrameLayout containerView;
|
||||||
|
protected CordovaWebView cordovaWebView;
|
||||||
|
|
||||||
|
|
||||||
|
public BaseCordovaIntegrationTest() {
|
||||||
|
super(MainTestActivity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setUpWithStartUrl(String url) {
|
||||||
|
setUpWithStartUrl(url, null, null);
|
||||||
|
}
|
||||||
|
protected void setUpWithStartUrl(String url, String prefKey, String prefValue) {
|
||||||
|
Intent intent = new Intent(getInstrumentation().getContext(), MainTestActivity.class);
|
||||||
|
intent.putExtra("testStartUrl", url);
|
||||||
|
if (prefKey != null) {
|
||||||
|
intent.putExtra(prefKey, prefValue);
|
||||||
|
}
|
||||||
|
setActivityIntent(intent);
|
||||||
|
testActivity = getActivity();
|
||||||
|
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
||||||
|
cordovaWebView = testActivity.getCordovaWebView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
30
test/src/org/apache/cordova/test/backgroundcolor.java → test/androidTest/src/org/apache/cordova/test/CordovaActivityTest.java
Executable file → Normal file
30
test/src/org/apache/cordova/test/backgroundcolor.java → test/androidTest/src/org/apache/cordova/test/CordovaActivityTest.java
Executable file → Normal file
@ -16,22 +16,30 @@
|
|||||||
specific language governing permissions and limitations
|
specific language governing permissions and limitations
|
||||||
under the License.
|
under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.apache.cordova.test;
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
import android.graphics.Color;
|
import android.view.View;
|
||||||
import android.os.Bundle;
|
import android.view.ViewGroup;
|
||||||
import org.apache.cordova.*;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
public class backgroundcolor extends CordovaActivity {
|
import org.apache.cordova.AndroidWebView;
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
// backgroundColor can also be set in cordova.xml, but you must use the number equivalent of the color. For example, Color.RED is
|
public class CordovaActivityTest extends BaseCordovaIntegrationTest {
|
||||||
// <preference name="backgroundColor" value="-65536" />
|
private ViewGroup innerContainer;
|
||||||
preferences.set("backgroundColor", Color.GREEN);
|
private View testView;
|
||||||
|
|
||||||
super.loadUrl("file:///android_asset/www/backgroundcolor/index.html");
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
setUpWithStartUrl(null);
|
||||||
|
innerContainer = (ViewGroup)containerView.getChildAt(0);
|
||||||
|
testView = innerContainer.getChildAt(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBasicLoad() throws Exception {
|
||||||
|
assertTrue(testView instanceof AndroidWebView);
|
||||||
|
assertTrue(innerContainer instanceof LinearLayout);
|
||||||
|
String onPageFinishedUrl = testActivity.onPageFinishedUrl.take();
|
||||||
|
assertEquals(MainTestActivity.START_URL, onPageFinishedUrl);
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,258 @@
|
|||||||
|
|
||||||
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.provider.MediaStore;
|
||||||
|
|
||||||
|
import org.apache.cordova.CallbackContext;
|
||||||
|
import org.apache.cordova.CordovaPlugin;
|
||||||
|
import org.apache.cordova.CordovaResourceApi;
|
||||||
|
import org.apache.cordova.CordovaResourceApi.OpenForReadResult;
|
||||||
|
import org.apache.cordova.PluginEntry;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class CordovaResourceApiTest extends BaseCordovaIntegrationTest {
|
||||||
|
CordovaResourceApi resourceApi;
|
||||||
|
String execPayload;
|
||||||
|
Integer execStatus;
|
||||||
|
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
setUpWithStartUrl(null);
|
||||||
|
resourceApi = cordovaWebView.getResourceApi();
|
||||||
|
resourceApi.setThreadCheckingEnabled(false);
|
||||||
|
cordovaWebView.getPluginManager().addService(new PluginEntry("CordovaResourceApiTestPlugin1", new CordovaPlugin() {
|
||||||
|
@Override
|
||||||
|
public Uri remapUri(Uri uri) {
|
||||||
|
if (uri.getQuery() != null && uri.getQuery().contains("pluginRewrite")) {
|
||||||
|
return cordovaWebView.getResourceApi().remapUri(
|
||||||
|
Uri.parse("data:text/plain;charset=utf-8,pass"));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
||||||
|
synchronized (CordovaResourceApiTest.this) {
|
||||||
|
execPayload = args.getString(0);
|
||||||
|
execStatus = args.getInt(1);
|
||||||
|
CordovaResourceApiTest.this.notify();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Uri createTestImageContentUri() {
|
||||||
|
Bitmap imageBitmap = BitmapFactory.decodeResource(testActivity.getResources(), R.drawable.icon);
|
||||||
|
String stored = MediaStore.Images.Media.insertImage(testActivity.getContentResolver(),
|
||||||
|
imageBitmap, "app-icon", "desc");
|
||||||
|
return Uri.parse(stored);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performApiTest(Uri uri, String expectedMimeType, File expectedLocalFile,
|
||||||
|
boolean expectRead, boolean expectWrite) throws IOException {
|
||||||
|
uri = resourceApi.remapUri(uri);
|
||||||
|
assertEquals(expectedLocalFile, resourceApi.mapUriToFile(uri));
|
||||||
|
|
||||||
|
try {
|
||||||
|
OpenForReadResult readResult = resourceApi.openForRead(uri);
|
||||||
|
String mimeType2 = resourceApi.getMimeType(uri);
|
||||||
|
assertEquals("openForRead mime-type", expectedMimeType, readResult.mimeType);
|
||||||
|
assertEquals("getMimeType mime-type", expectedMimeType, mimeType2);
|
||||||
|
readResult.inputStream.read();
|
||||||
|
if (!expectRead) {
|
||||||
|
fail("Expected getInputStream to throw.");
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
if (expectRead) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
OutputStream outStream = resourceApi.openOutputStream(uri);
|
||||||
|
outStream.write(123);
|
||||||
|
if (!expectWrite) {
|
||||||
|
fail("Expected getOutputStream to throw.");
|
||||||
|
}
|
||||||
|
outStream.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
if (expectWrite) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testJavaApis() throws IOException {
|
||||||
|
// testValidContentUri
|
||||||
|
{
|
||||||
|
Uri contentUri = createTestImageContentUri();
|
||||||
|
File localFile = resourceApi.mapUriToFile(contentUri);
|
||||||
|
assertNotNull(localFile);
|
||||||
|
performApiTest(contentUri, "image/jpeg", localFile, true, true);
|
||||||
|
}
|
||||||
|
// testInvalidContentUri
|
||||||
|
{
|
||||||
|
Uri contentUri = Uri.parse("content://media/external/images/media/999999999");
|
||||||
|
performApiTest(contentUri, null, null, false, false);
|
||||||
|
}
|
||||||
|
// testValidAssetUri
|
||||||
|
{
|
||||||
|
Uri assetUri = Uri.parse("file:///android_asset/www/index.html?foo#bar"); // Also check for stripping off ? and # correctly.
|
||||||
|
performApiTest(assetUri, "text/html", null, true, false);
|
||||||
|
}
|
||||||
|
// testInvalidAssetUri
|
||||||
|
{
|
||||||
|
Uri assetUri = Uri.parse("file:///android_asset/www/missing.html");
|
||||||
|
performApiTest(assetUri, "text/html", null, false, false);
|
||||||
|
}
|
||||||
|
// testFileUriToExistingFile
|
||||||
|
{
|
||||||
|
File f = File.createTempFile("te s t", ".txt"); // Also check for dealing with spaces.
|
||||||
|
try {
|
||||||
|
Uri fileUri = Uri.parse(f.toURI().toString() + "?foo#bar"); // Also check for stripping off ? and # correctly.
|
||||||
|
performApiTest(fileUri, "text/plain", f, true, true);
|
||||||
|
} finally {
|
||||||
|
f.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// testFileUriToMissingFile
|
||||||
|
{
|
||||||
|
File f = new File(Environment.getExternalStorageDirectory() + "/somefilethatdoesntexist");
|
||||||
|
Uri fileUri = Uri.parse(f.toURI().toString());
|
||||||
|
try {
|
||||||
|
performApiTest(fileUri, null, f, false, true);
|
||||||
|
} finally {
|
||||||
|
f.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// testFileUriToMissingFileWithMissingParent
|
||||||
|
{
|
||||||
|
File f = new File(Environment.getExternalStorageDirectory() + "/somedirthatismissing" + System.currentTimeMillis() + "/somefilethatdoesntexist");
|
||||||
|
Uri fileUri = Uri.parse(f.toURI().toString());
|
||||||
|
performApiTest(fileUri, null, f, false, true);
|
||||||
|
}
|
||||||
|
// testUnrecognizedUri
|
||||||
|
{
|
||||||
|
Uri uri = Uri.parse("somescheme://foo");
|
||||||
|
performApiTest(uri, null, null, false, false);
|
||||||
|
}
|
||||||
|
// testRelativeUri
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
resourceApi.openForRead(Uri.parse("/foo"));
|
||||||
|
fail("Should have thrown for relative URI 1.");
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
resourceApi.openForRead(Uri.parse("//foo/bar"));
|
||||||
|
fail("Should have thrown for relative URI 2.");
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
resourceApi.openForRead(Uri.parse("foo.png"));
|
||||||
|
fail("Should have thrown for relative URI 3.");
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// testPluginOverride
|
||||||
|
{
|
||||||
|
Uri uri = Uri.parse("plugin-uri://foohost/android_asset/www/index.html?pluginRewrite=yes");
|
||||||
|
performApiTest(uri, "text/plain", null, true, false);
|
||||||
|
}
|
||||||
|
// testMainThreadUsage
|
||||||
|
{
|
||||||
|
Uri assetUri = Uri.parse("file:///android_asset/www/index.html");
|
||||||
|
resourceApi.setThreadCheckingEnabled(true);
|
||||||
|
try {
|
||||||
|
resourceApi.openForRead(assetUri);
|
||||||
|
fail("Should have thrown for main thread check.");
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// testDataUriPlain
|
||||||
|
{
|
||||||
|
Uri uri = Uri.parse("data:text/plain;charset=utf-8,pa%20ss");
|
||||||
|
OpenForReadResult readResult = resourceApi.openForRead(uri);
|
||||||
|
assertEquals("text/plain", readResult.mimeType);
|
||||||
|
String data = new Scanner(readResult.inputStream, "UTF-8").useDelimiter("\\A").next();
|
||||||
|
assertEquals("pa ss", data);
|
||||||
|
}
|
||||||
|
// testDataUriBase64
|
||||||
|
{
|
||||||
|
Uri uri = Uri.parse("data:text/js;charset=utf-8;base64,cGFzcw==");
|
||||||
|
OpenForReadResult readResult = resourceApi.openForRead(uri);
|
||||||
|
assertEquals("text/js", readResult.mimeType);
|
||||||
|
String data = new Scanner(readResult.inputStream, "UTF-8").useDelimiter("\\A").next();
|
||||||
|
assertEquals("pass", data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testWebViewRequestIntercept() throws Throwable
|
||||||
|
{
|
||||||
|
testActivity.onPageFinishedUrl.take();
|
||||||
|
execPayload = null;
|
||||||
|
execStatus = null;
|
||||||
|
cordovaWebView.sendJavascript(
|
||||||
|
"var x = new XMLHttpRequest;\n" +
|
||||||
|
"x.open('GET', 'file:///foo?pluginRewrite=1', false);\n" +
|
||||||
|
"x.send();\n" +
|
||||||
|
"cordova.require('cordova/exec')(null,null,'CordovaResourceApiTestPlugin1', 'foo', [x.responseText, x.status])");
|
||||||
|
try {
|
||||||
|
synchronized (this) {
|
||||||
|
this.wait(2000);
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
assertEquals("pass", execPayload);
|
||||||
|
assertEquals(execStatus.intValue(), 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testWebViewWhiteListRejection() throws Throwable
|
||||||
|
{
|
||||||
|
testActivity.onPageFinishedUrl.take();
|
||||||
|
execPayload = null;
|
||||||
|
execStatus = null;
|
||||||
|
cordovaWebView.sendJavascript(
|
||||||
|
"var x = new XMLHttpRequest;\n" +
|
||||||
|
"x.open('GET', 'http://foo/bar', false);\n" +
|
||||||
|
"x.send();\n" +
|
||||||
|
"cordova.require('cordova/exec')(null,null,'CordovaResourceApiTestPlugin1', 'foo', [x.responseText, x.status])");
|
||||||
|
try {
|
||||||
|
synchronized (this) {
|
||||||
|
this.wait(2000);
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
assertEquals("", execPayload);
|
||||||
|
assertEquals(execStatus.intValue(), 404);
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package org.apache.cordova.test.junit;
|
package org.apache.cordova.test;
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
@ -21,29 +21,22 @@ package org.apache.cordova.test.junit;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
public class ErrorUrlTest extends BaseCordovaIntegrationTest {
|
||||||
import org.apache.cordova.test.splashscreen;
|
private static final String START_URL = "file:///android_asset/www/htmlnotfound/index.html";
|
||||||
|
private static final String ERROR_URL = "file:///android_asset/www/htmlnotfound/error.html";
|
||||||
import android.app.Dialog;
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class SplashscreenTest extends ActivityInstrumentationTestCase2<splashscreen> {
|
|
||||||
|
|
||||||
private splashscreen testActivity;
|
|
||||||
private Dialog containerView;
|
|
||||||
|
|
||||||
public SplashscreenTest()
|
|
||||||
{
|
|
||||||
super("org.apache.cordova.test",splashscreen.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
testActivity = this.getActivity();
|
setUpWithStartUrl(START_URL, "testErrorUrl", ERROR_URL);
|
||||||
//containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
//containerView = (Dialog) testActivity.findViewById(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testUrl() throws Throwable {
|
||||||
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
assertEquals(ERROR_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
assertEquals(ERROR_URL, testActivity.getCordovaWebView().getUrl());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package org.apache.cordova.test.junit;
|
package org.apache.cordova.test;
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
@ -21,14 +21,21 @@ package org.apache.cordova.test.junit;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.test.xhr;
|
public class HtmlNotFoundTest extends BaseCordovaIntegrationTest {
|
||||||
|
private static final String START_URL = "file:///android_asset/www/htmlnotfound/index.html";
|
||||||
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
public class XhrTest extends ActivityInstrumentationTestCase2<xhr> {
|
setUpWithStartUrl(START_URL);
|
||||||
|
}
|
||||||
public XhrTest()
|
public void testUrl() throws Throwable
|
||||||
{
|
{
|
||||||
super(xhr.class);
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
|
// TODO: Should this be null? Or some other way to indicate it didn't actually load?
|
||||||
|
runTestOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
assertEquals(START_URL, testActivity.getCordovaWebView().getUrl());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package org.apache.cordova.test.junit;
|
package org.apache.cordova.test;
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
@ -21,65 +21,44 @@ package org.apache.cordova.test.junit;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
import android.test.TouchUtils;
|
||||||
import org.apache.cordova.test.iframe;
|
|
||||||
import org.apache.cordova.test.util.Purity;
|
import org.apache.cordova.test.util.Purity;
|
||||||
|
|
||||||
import android.app.Activity;
|
public class IFrameTest extends BaseCordovaIntegrationTest {
|
||||||
import android.app.Instrumentation;
|
private static final String START_URL = "file:///android_asset/www/iframe/index.html";
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.test.TouchUtils;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class IFrameTest extends ActivityInstrumentationTestCase2 {
|
|
||||||
|
|
||||||
|
|
||||||
private Instrumentation mInstr;
|
|
||||||
private Activity testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private CordovaWebView testView;
|
|
||||||
private TouchUtils touch;
|
private TouchUtils touch;
|
||||||
private Purity touchTool;
|
private Purity touchTool;
|
||||||
|
|
||||||
public IFrameTest() {
|
|
||||||
super("org.apache.cordova.test",iframe.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
mInstr = this.getInstrumentation();
|
setUpWithStartUrl(START_URL);
|
||||||
testActivity = this.getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = (CordovaWebView) innerContainer.getChildAt(0);
|
|
||||||
touch = new TouchUtils();
|
touch = new TouchUtils();
|
||||||
touchTool = new Purity(testActivity, getInstrumentation());
|
touchTool = new Purity(testActivity, getInstrumentation());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testIframeDest() throws Throwable
|
public void testIframeDest() throws Throwable {
|
||||||
{
|
assertEquals(START_URL, testActivity.onPageFinishedUrl.take());
|
||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
testView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');");
|
cordovaWebView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep(3000);
|
sleep(3000);
|
||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
testView.sendJavascript("loadUrl('index2.html')");
|
cordovaWebView.sendJavascript("loadUrl('index2.html')");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep(1000);
|
sleep(1000);
|
||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = cordovaWebView.getUrl();
|
||||||
assertTrue(url.endsWith("index.html"));
|
assertTrue(url.endsWith("index.html"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -90,29 +69,29 @@ public class IFrameTest extends ActivityInstrumentationTestCase2 {
|
|||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
testView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');");
|
cordovaWebView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep(3000);
|
sleep(3000);
|
||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
testView.sendJavascript("loadUrl('index2.html')");
|
cordovaWebView.sendJavascript("loadUrl('index2.html')");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep(1000);
|
sleep(1000);
|
||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = cordovaWebView.getUrl();
|
||||||
testView.backHistory();
|
cordovaWebView.backHistory();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep(1000);
|
sleep(1000);
|
||||||
runTestOnUiThread(new Runnable() {
|
runTestOnUiThread(new Runnable() {
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = cordovaWebView.getUrl();
|
||||||
assertTrue(url.endsWith("index.html"));
|
assertTrue(url.endsWith("index.html"));
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
|
import android.test.ActivityInstrumentationTestCase2;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import org.apache.cordova.AndroidWebView;
|
||||||
|
|
||||||
|
public class InflateLayoutTest extends ActivityInstrumentationTestCase2<CordovaWebViewTestActivity> {
|
||||||
|
|
||||||
|
private CordovaWebViewTestActivity testActivity;
|
||||||
|
private ViewGroup innerContainer;
|
||||||
|
private View testView;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public InflateLayoutTest()
|
||||||
|
{
|
||||||
|
super("org.apache.cordova.test",CordovaWebViewTestActivity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
testActivity = this.getActivity();
|
||||||
|
FrameLayout containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
||||||
|
innerContainer = (ViewGroup)containerView.getChildAt(0);
|
||||||
|
testView = innerContainer.getChildAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testBasicLoad() throws Exception {
|
||||||
|
assertTrue(testView instanceof AndroidWebView);
|
||||||
|
assertTrue(innerContainer instanceof LinearLayout);
|
||||||
|
String onPageFinishedUrl = testActivity.onPageFinishedUrl.take();
|
||||||
|
assertEquals(CordovaWebViewTestActivity.START_URL, onPageFinishedUrl);
|
||||||
|
}
|
||||||
|
}
|
@ -1,278 +0,0 @@
|
|||||||
package org.apache.cordova.test.junit;
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.test.backbuttonmultipage;
|
|
||||||
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.test.UiThreadTest;
|
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.inputmethod.BaseInputConnection;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class BackButtonMultiPageTest extends ActivityInstrumentationTestCase2<backbuttonmultipage> {
|
|
||||||
|
|
||||||
private int TIMEOUT = 2000;
|
|
||||||
backbuttonmultipage testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private CordovaWebView testView;
|
|
||||||
|
|
||||||
|
|
||||||
public BackButtonMultiPageTest() {
|
|
||||||
super(backbuttonmultipage.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setUp() {
|
|
||||||
testActivity = getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = (CordovaWebView) innerContainer.getChildAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadTestPage() {
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/index.html");
|
|
||||||
sleep();
|
|
||||||
}
|
|
||||||
|
|
||||||
@UiThreadTest
|
|
||||||
public void testPreconditions(){
|
|
||||||
loadTestPage();
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("index.html"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testViaHref() throws Throwable {
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
loadTestPage();
|
|
||||||
testView.sendJavascript("window.location = 'sample2.html';");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", url);
|
|
||||||
testView.sendJavascript("window.location = 'sample3.html';"); }
|
|
||||||
});
|
|
||||||
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertEquals("file:///android_asset/www/backbuttonmultipage/sample3.html", url);
|
|
||||||
assertTrue(testView.backHistory());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", url);
|
|
||||||
assertTrue(testView.backHistory());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertEquals("file:///android_asset/www/backbuttonmultipage/index.html", url);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testViaLoadUrl() throws Throwable {
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
loadTestPage();
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample2.html");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample3.html");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample3.html"));
|
|
||||||
testView.backHistory();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
|
||||||
testView.backHistory();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("index.html"));
|
|
||||||
testView.backHistory();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testViaBackButtonOnView() throws Throwable {
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
loadTestPage();
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample2.html");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample3.html");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample3.html"));
|
|
||||||
BaseInputConnection viewConnection = new BaseInputConnection((View) testView, true);
|
|
||||||
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
|
||||||
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
|
||||||
viewConnection.sendKeyEvent(backDown);
|
|
||||||
viewConnection.sendKeyEvent(backUp);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
|
||||||
BaseInputConnection viewConnection = new BaseInputConnection((View) testView, true);
|
|
||||||
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
|
||||||
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
|
||||||
viewConnection.sendKeyEvent(backDown);
|
|
||||||
viewConnection.sendKeyEvent(backUp);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("index.html"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testViaBackButtonOnLayout() throws Throwable {
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
loadTestPage();
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample2.html");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
|
||||||
testView.loadUrl("file:///android_asset/www/backbuttonmultipage/sample3.html");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample3.html"));
|
|
||||||
BaseInputConnection viewConnection = new BaseInputConnection(containerView, true);
|
|
||||||
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
|
||||||
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
|
||||||
viewConnection.sendKeyEvent(backDown);
|
|
||||||
viewConnection.sendKeyEvent(backUp);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
|
||||||
BaseInputConnection viewConnection = new BaseInputConnection(containerView, true);
|
|
||||||
KeyEvent backDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
|
|
||||||
KeyEvent backUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
|
|
||||||
viewConnection.sendKeyEvent(backDown);
|
|
||||||
viewConnection.sendKeyEvent(backUp);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertTrue(url.endsWith("index.html"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sleep() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(TIMEOUT);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
fail("Unexpected Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.PluginManager;
|
|
||||||
import org.apache.cordova.test.MainTestActivity;
|
|
||||||
|
|
||||||
import android.app.Instrumentation;
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class CordovaActivityTest extends ActivityInstrumentationTestCase2<MainTestActivity> {
|
|
||||||
|
|
||||||
private MainTestActivity testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private CordovaWebView testView;
|
|
||||||
private Instrumentation mInstr;
|
|
||||||
private int TIMEOUT = 1000;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public CordovaActivityTest()
|
|
||||||
{
|
|
||||||
super("org.apache.cordova.test",MainTestActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
mInstr = this.getInstrumentation();
|
|
||||||
testActivity = this.getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = (CordovaWebView) innerContainer.getChildAt(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPreconditions(){
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void testForAndroidWebView() {
|
|
||||||
String className = testView.getClass().getSimpleName();
|
|
||||||
assertTrue(className.equals("AndroidWebView"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testForLinearLayout() {
|
|
||||||
String className = innerContainer.getClass().getSimpleName();
|
|
||||||
assertTrue(className.equals("LinearLayout"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sleep() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(TIMEOUT);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
fail("Unexpected Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,281 +0,0 @@
|
|||||||
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.provider.MediaStore;
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
|
|
||||||
import org.apache.cordova.CallbackContext;
|
|
||||||
import org.apache.cordova.CordovaPlugin;
|
|
||||||
import org.apache.cordova.CordovaResourceApi;
|
|
||||||
import org.apache.cordova.CordovaResourceApi.OpenForReadResult;
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.PluginEntry;
|
|
||||||
import org.apache.cordova.test.CordovaWebViewTestActivity;
|
|
||||||
import org.apache.cordova.test.R;
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.util.Scanner;
|
|
||||||
|
|
||||||
public class CordovaResourceApiTest extends ActivityInstrumentationTestCase2<CordovaWebViewTestActivity> {
|
|
||||||
|
|
||||||
public CordovaResourceApiTest()
|
|
||||||
{
|
|
||||||
super(CordovaWebViewTestActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
CordovaWebView cordovaWebView;
|
|
||||||
CordovaResourceApi resourceApi;
|
|
||||||
|
|
||||||
private CordovaWebViewTestActivity activity;
|
|
||||||
String execPayload;
|
|
||||||
Integer execStatus;
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
activity = this.getActivity();
|
|
||||||
cordovaWebView = activity.cordovaWebView;
|
|
||||||
resourceApi = cordovaWebView.getResourceApi();
|
|
||||||
resourceApi.setThreadCheckingEnabled(false);
|
|
||||||
cordovaWebView.getPluginManager().addService(new PluginEntry("CordovaResourceApiTestPlugin1", new CordovaPlugin() {
|
|
||||||
@Override
|
|
||||||
public Uri remapUri(Uri uri) {
|
|
||||||
if (uri.getQuery() != null && uri.getQuery().contains("pluginRewrite")) {
|
|
||||||
return cordovaWebView.getResourceApi().remapUri(
|
|
||||||
Uri.parse("data:text/plain;charset=utf-8,pass"));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
|
||||||
synchronized (CordovaResourceApiTest.this) {
|
|
||||||
execPayload = args.getString(0);
|
|
||||||
execStatus = args.getInt(1);
|
|
||||||
CordovaResourceApiTest.this.notify();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Uri createTestImageContentUri() {
|
|
||||||
Bitmap imageBitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.icon);
|
|
||||||
String stored = MediaStore.Images.Media.insertImage(activity.getContentResolver(),
|
|
||||||
imageBitmap, "app-icon", "desc");
|
|
||||||
return Uri.parse(stored);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void performApiTest(Uri uri, String expectedMimeType, File expectedLocalFile,
|
|
||||||
boolean expectRead, boolean expectWrite) throws IOException {
|
|
||||||
uri = resourceApi.remapUri(uri);
|
|
||||||
assertEquals(expectedLocalFile, resourceApi.mapUriToFile(uri));
|
|
||||||
|
|
||||||
try {
|
|
||||||
OpenForReadResult readResult = resourceApi.openForRead(uri);
|
|
||||||
String mimeType2 = resourceApi.getMimeType(uri);
|
|
||||||
assertEquals("openForRead mime-type", expectedMimeType, readResult.mimeType);
|
|
||||||
assertEquals("getMimeType mime-type", expectedMimeType, mimeType2);
|
|
||||||
readResult.inputStream.read();
|
|
||||||
if (!expectRead) {
|
|
||||||
fail("Expected getInputStream to throw.");
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
if (expectRead) {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
OutputStream outStream = resourceApi.openOutputStream(uri);
|
|
||||||
outStream.write(123);
|
|
||||||
if (!expectWrite) {
|
|
||||||
fail("Expected getOutputStream to throw.");
|
|
||||||
}
|
|
||||||
outStream.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
if (expectWrite) {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testValidContentUri() throws IOException
|
|
||||||
{
|
|
||||||
Uri contentUri = createTestImageContentUri();
|
|
||||||
File localFile = resourceApi.mapUriToFile(contentUri);
|
|
||||||
assertNotNull(localFile);
|
|
||||||
performApiTest(contentUri, "image/jpeg", localFile, true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInvalidContentUri() throws IOException
|
|
||||||
{
|
|
||||||
Uri contentUri = Uri.parse("content://media/external/images/media/999999999");
|
|
||||||
performApiTest(contentUri, null, null, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testValidAssetUri() throws IOException
|
|
||||||
{
|
|
||||||
Uri assetUri = Uri.parse("file:///android_asset/www/index.html?foo#bar"); // Also check for stripping off ? and # correctly.
|
|
||||||
performApiTest(assetUri, "text/html", null, true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInvalidAssetUri() throws IOException
|
|
||||||
{
|
|
||||||
Uri assetUri = Uri.parse("file:///android_asset/www/missing.html");
|
|
||||||
performApiTest(assetUri, "text/html", null, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testFileUriToExistingFile() throws IOException
|
|
||||||
{
|
|
||||||
File f = File.createTempFile("te s t", ".txt"); // Also check for dealing with spaces.
|
|
||||||
try {
|
|
||||||
Uri fileUri = Uri.parse(f.toURI().toString() + "?foo#bar"); // Also check for stripping off ? and # correctly.
|
|
||||||
performApiTest(fileUri, "text/plain", f, true, true);
|
|
||||||
} finally {
|
|
||||||
f.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testFileUriToMissingFile() throws IOException
|
|
||||||
{
|
|
||||||
File f = new File(Environment.getExternalStorageDirectory() + "/somefilethatdoesntexist");
|
|
||||||
Uri fileUri = Uri.parse(f.toURI().toString());
|
|
||||||
try {
|
|
||||||
performApiTest(fileUri, null, f, false, true);
|
|
||||||
} finally {
|
|
||||||
f.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testFileUriToMissingFileWithMissingParent() throws IOException
|
|
||||||
{
|
|
||||||
File f = new File(Environment.getExternalStorageDirectory() + "/somedirthatismissing" + System.currentTimeMillis() + "/somefilethatdoesntexist");
|
|
||||||
Uri fileUri = Uri.parse(f.toURI().toString());
|
|
||||||
performApiTest(fileUri, null, f, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testUnrecognizedUri() throws IOException
|
|
||||||
{
|
|
||||||
Uri uri = Uri.parse("somescheme://foo");
|
|
||||||
performApiTest(uri, null, null, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testRelativeUri()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
resourceApi.openForRead(Uri.parse("/foo"));
|
|
||||||
fail("Should have thrown for relative URI 1.");
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
resourceApi.openForRead(Uri.parse("//foo/bar"));
|
|
||||||
fail("Should have thrown for relative URI 2.");
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
resourceApi.openForRead(Uri.parse("foo.png"));
|
|
||||||
fail("Should have thrown for relative URI 3.");
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPluginOverride() throws IOException
|
|
||||||
{
|
|
||||||
Uri uri = Uri.parse("plugin-uri://foohost/android_asset/www/index.html?pluginRewrite=yes");
|
|
||||||
performApiTest(uri, "text/plain", null, true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testMainThreadUsage() throws IOException
|
|
||||||
{
|
|
||||||
Uri assetUri = Uri.parse("file:///android_asset/www/index.html");
|
|
||||||
resourceApi.setThreadCheckingEnabled(true);
|
|
||||||
try {
|
|
||||||
resourceApi.openForRead(assetUri);
|
|
||||||
fail("Should have thrown for main thread check.");
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void testDataUriPlain() throws IOException
|
|
||||||
{
|
|
||||||
Uri uri = Uri.parse("data:text/plain;charset=utf-8,pa%20ss");
|
|
||||||
OpenForReadResult readResult = resourceApi.openForRead(uri);
|
|
||||||
assertEquals("text/plain", readResult.mimeType);
|
|
||||||
String data = new Scanner(readResult.inputStream, "UTF-8").useDelimiter("\\A").next();
|
|
||||||
assertEquals("pa ss", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDataUriBase64() throws IOException
|
|
||||||
{
|
|
||||||
Uri uri = Uri.parse("data:text/js;charset=utf-8;base64,cGFzcw==");
|
|
||||||
OpenForReadResult readResult = resourceApi.openForRead(uri);
|
|
||||||
assertEquals("text/js", readResult.mimeType);
|
|
||||||
String data = new Scanner(readResult.inputStream, "UTF-8").useDelimiter("\\A").next();
|
|
||||||
assertEquals("pass", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testWebViewRequestIntercept() throws IOException
|
|
||||||
{
|
|
||||||
cordovaWebView.sendJavascript(
|
|
||||||
"var x = new XMLHttpRequest;\n" +
|
|
||||||
"x.open('GET', 'file://foo?pluginRewrite=1', false);\n" +
|
|
||||||
"x.send();\n" +
|
|
||||||
"cordova.require('cordova/exec')(null,null,'CordovaResourceApiTestPlugin1', 'foo', [x.responseText, x.status])");
|
|
||||||
execPayload = null;
|
|
||||||
execStatus = null;
|
|
||||||
try {
|
|
||||||
synchronized (this) {
|
|
||||||
this.wait(2000);
|
|
||||||
}
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
}
|
|
||||||
assertEquals("pass", execPayload);
|
|
||||||
assertEquals(execStatus.intValue(), 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testWebViewWhiteListRejection() throws IOException
|
|
||||||
{
|
|
||||||
cordovaWebView.sendJavascript(
|
|
||||||
"var x = new XMLHttpRequest;\n" +
|
|
||||||
"x.open('GET', 'http://foo/bar', false);\n" +
|
|
||||||
"x.send();\n" +
|
|
||||||
"cordova.require('cordova/exec')(null,null,'CordovaResourceApiTestPlugin1', 'foo', [x.responseText, x.status])");
|
|
||||||
execPayload = null;
|
|
||||||
execStatus = null;
|
|
||||||
try {
|
|
||||||
synchronized (this) {
|
|
||||||
this.wait(2000);
|
|
||||||
}
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
}
|
|
||||||
assertEquals("", execPayload);
|
|
||||||
assertEquals(execStatus.intValue(), 404);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,116 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.PluginManager;
|
|
||||||
import org.apache.cordova.test.CordovaWebViewTestActivity;
|
|
||||||
import org.apache.cordova.test.R;
|
|
||||||
|
|
||||||
import android.app.Instrumentation;
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
public class CordovaTest extends
|
|
||||||
ActivityInstrumentationTestCase2<CordovaWebViewTestActivity> {
|
|
||||||
|
|
||||||
private static final long TIMEOUT = 1000;
|
|
||||||
private CordovaWebViewTestActivity testActivity;
|
|
||||||
private View testView;
|
|
||||||
private String rString;
|
|
||||||
|
|
||||||
public CordovaTest() {
|
|
||||||
super("org.apache.cordova.test.activities", CordovaWebViewTestActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
testActivity = this.getActivity();
|
|
||||||
testView = testActivity.findViewById(R.id.cordovaWebView);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPreconditions() {
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testForAndroidWebView() {
|
|
||||||
//Sleep for no reason!!!!
|
|
||||||
sleep();
|
|
||||||
String className = testView.getClass().getSimpleName();
|
|
||||||
assertTrue(className.equals("AndroidWebView"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
public void testForPluginManager() {
|
|
||||||
CordovaWebView v = (CordovaWebView) testView;
|
|
||||||
PluginManager p = v.getPluginManager();
|
|
||||||
assertNotNull(p);
|
|
||||||
String className = p.getClass().getSimpleName();
|
|
||||||
assertTrue(className.equals("PluginManager"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testBackButton() {
|
|
||||||
CordovaWebView v = (CordovaWebView) testView;
|
|
||||||
assertFalse(v.checkBackKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testLoadUrl() {
|
|
||||||
CordovaWebView v = (CordovaWebView) testView;
|
|
||||||
v.loadUrlIntoView("file:///android_asset/www/index.html");
|
|
||||||
sleep();
|
|
||||||
String url = v.getUrl();
|
|
||||||
boolean result = url.equals("file:///android_asset/www/index.html");
|
|
||||||
assertTrue(result);
|
|
||||||
int visible = v.getVisibility();
|
|
||||||
assertTrue(visible == View.VISIBLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testBackHistoryFalse() {
|
|
||||||
CordovaWebView v = (CordovaWebView) testView;
|
|
||||||
// Move back in the history
|
|
||||||
boolean test = v.backHistory();
|
|
||||||
assertFalse(test);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure that we can go back
|
|
||||||
public void testBackHistoryTrue() {
|
|
||||||
this.testLoadUrl();
|
|
||||||
CordovaWebView v = (CordovaWebView) testView;
|
|
||||||
v.loadUrlIntoView("file:///android_asset/www/compass/index.html");
|
|
||||||
sleep();
|
|
||||||
String url = v.getUrl();
|
|
||||||
assertTrue(url.equals("file:///android_asset/www/compass/index.html"));
|
|
||||||
// Move back in the history
|
|
||||||
boolean test = v.backHistory();
|
|
||||||
assertTrue(test);
|
|
||||||
sleep();
|
|
||||||
url = v.getUrl();
|
|
||||||
assertTrue(url.equals("file:///android_asset/www/index.html"));
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
private void sleep() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(TIMEOUT);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
fail("Unexpected Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
package org.apache.cordova.test.junit;
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.test.errorurl;
|
|
||||||
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class ErrorUrlTest extends ActivityInstrumentationTestCase2<errorurl> {
|
|
||||||
|
|
||||||
private int TIMEOUT = 1000;
|
|
||||||
errorurl testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private CordovaWebView testView;
|
|
||||||
|
|
||||||
public ErrorUrlTest() {
|
|
||||||
super("org.apache.cordova.test",errorurl.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
testActivity = this.getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = (CordovaWebView) innerContainer.getChildAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPreconditions(){
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testUrl() throws Throwable
|
|
||||||
{
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String good_url = "file:///android_asset/www/htmlnotfound/error.html";
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertNotNull(url);
|
|
||||||
assertEquals(good_url, url);
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void sleep() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(TIMEOUT);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
fail("Unexpected Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.webkit.WebView;
|
|
||||||
|
|
||||||
public class FixWebView extends WebView {
|
|
||||||
|
|
||||||
public FixWebView(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void pauseTimers() {
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is with different signature in order to stop the timers while move application to background
|
|
||||||
* @param realPause
|
|
||||||
*/
|
|
||||||
public void pauseTimers(@SuppressWarnings("unused") boolean realPause) {
|
|
||||||
super.pauseTimers();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
package org.apache.cordova.test.junit;
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.test.htmlnotfound;
|
|
||||||
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class HtmlNotFoundTest extends ActivityInstrumentationTestCase2<htmlnotfound> {
|
|
||||||
|
|
||||||
private int TIMEOUT = 1000;
|
|
||||||
private htmlnotfound testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private CordovaWebView testView;
|
|
||||||
|
|
||||||
public HtmlNotFoundTest() {
|
|
||||||
super("org.apache.cordova.test",htmlnotfound.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
testActivity = this.getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = (CordovaWebView) innerContainer.getChildAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPreconditions(){
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testUrl() throws Throwable
|
|
||||||
{
|
|
||||||
sleep();
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
String good_url = "file:///android_asset/www/htmlnotfound/error.html";
|
|
||||||
String url = testView.getUrl();
|
|
||||||
assertNotNull(url);
|
|
||||||
assertFalse(url.equals(good_url));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sleep() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(TIMEOUT);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
fail("Unexpected Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,94 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.test.SabotagedActivity;
|
|
||||||
import org.apache.cordova.test.splashscreen;
|
|
||||||
|
|
||||||
import android.app.Instrumentation;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.res.AssetManager;
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
|
|
||||||
public class IntentUriOverrideTest extends ActivityInstrumentationTestCase2<SabotagedActivity> {
|
|
||||||
|
|
||||||
private int TIMEOUT = 1000;
|
|
||||||
|
|
||||||
private SabotagedActivity testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private CordovaWebView testView;
|
|
||||||
private Instrumentation mInstr;
|
|
||||||
private String BAD_URL = "file:///sdcard/download/wl-exploit.htm";
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public IntentUriOverrideTest()
|
|
||||||
{
|
|
||||||
super("org.apache.cordova.test",SabotagedActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
mInstr = this.getInstrumentation();
|
|
||||||
Intent badIntent = new Intent();
|
|
||||||
badIntent.setClassName("org.apache.cordova.test", "org.apache.cordova.test.SabotagedActivity");
|
|
||||||
badIntent.putExtra("url", BAD_URL);
|
|
||||||
setActivityIntent(badIntent);
|
|
||||||
testActivity = getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = (CordovaWebView) innerContainer.getChildAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void testPreconditions(){
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testChangeStartUrl() throws Throwable
|
|
||||||
{
|
|
||||||
runTestOnUiThread(new Runnable() {
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
sleep();
|
|
||||||
boolean isBadUrl = testView.getUrl().equals(BAD_URL);
|
|
||||||
assertFalse(isBadUrl);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sleep() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(TIMEOUT);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
fail("Unexpected Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
package org.apache.cordova.test.junit;
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.cordova.test.lifecycle;
|
|
||||||
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
|
|
||||||
public class LifecycleTest extends ActivityInstrumentationTestCase2<lifecycle> {
|
|
||||||
|
|
||||||
public LifecycleTest()
|
|
||||||
{
|
|
||||||
super("org.apache.cordova.test",lifecycle.class);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.PluginManager;
|
|
||||||
import org.apache.cordova.test.CordovaWebViewTestActivity;
|
|
||||||
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class PluginManagerTest extends ActivityInstrumentationTestCase2<CordovaWebViewTestActivity> {
|
|
||||||
|
|
||||||
private CordovaWebViewTestActivity testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private View testView;
|
|
||||||
private String rString;
|
|
||||||
private PluginManager pMan;
|
|
||||||
|
|
||||||
public PluginManagerTest() {
|
|
||||||
super("org.apache.cordova.test.activities",CordovaWebViewTestActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setUp() throws Exception{
|
|
||||||
super.setUp();
|
|
||||||
testActivity = this.getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = innerContainer.getChildAt(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPreconditions(){
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void testForPluginManager() {
|
|
||||||
/*
|
|
||||||
CordovaWebView v = (CordovaWebView) testView;
|
|
||||||
pMan = v.getPluginManager();
|
|
||||||
assertNotNull(pMan);
|
|
||||||
String className = pMan.getClass().getSimpleName();
|
|
||||||
assertTrue(className.equals("PluginManager"));
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>OH NOES!</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Things went terribly wrong!</h1>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -26,8 +26,8 @@
|
|||||||
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
|
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
|
||||||
<script type="text/javascript" charset="utf-8" src="main.js"></script>
|
<script type="text/javascript" charset="utf-8" src="main.js"></script>
|
||||||
<script>
|
<script>
|
||||||
function startActivity(className) {
|
function startActivity(url, opts, className) {
|
||||||
cordova.exec(function() {console.log("Success");}, function(e) {console.log("Error: "+e);}, "Activity", "start", [className]);
|
cordova.exec(function() {console.log("Success");}, function(e) {console.log("Error: "+e);}, "Activity", "start", [className, url, opts || {}]);
|
||||||
};
|
};
|
||||||
|
|
||||||
localStorage.lifecyclestatus = "";
|
localStorage.lifecyclestatus = "";
|
||||||
@ -44,22 +44,20 @@
|
|||||||
<div id="info">
|
<div id="info">
|
||||||
<h4>Run each of the test activities below:</h4>
|
<h4>Run each of the test activities below:</h4>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.jqmtabbackbutton');">Backbutton jQM tab</button>
|
<button class="btn large" onclick="startActivity('jqmtabbackbutton/index.html');">Backbutton jQM tab</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.backbuttonmultipage');">Backbutton with multiple pages</button>
|
<button class="btn large" onclick="startActivity('backbuttonmultipage/index.html');">Backbutton with multiple pages</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.backgroundcolor');">Background Color</button>
|
<button class="btn large" onclick="startActivity('backgroundcolor/index.html', {backgroundcolor: -16711936});">Background Color</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.basicauth');">Basic Authentication</button>
|
<button class="btn large" onclick="startActivity('basicauth/index.html');">Basic Authentication</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.errorurl');">Error URL</button>
|
<button class="btn large" onclick="startActivity('errorurl/index.html', {testErrorUrl: 'file:///android_asset/www/htmlnotfound/error.html'});">Error URL</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.fullscreen');">Full Screen</button>
|
<button class="btn large" onclick="startActivity('fullscreen/index.html', {fullscreen: true});">Full Screen</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.htmlnotfound');">HTML not found</button>
|
<button class="btn large" onclick="startActivity('htmlnotfound/index.html');">HTML not found</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.iframe');">IFrame</button>
|
<button class="btn large" onclick="startActivity('iframe/index.html');">IFrame</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.lifecycle');">Lifecycle</button>
|
<button class="btn large" onclick="startActivity('lifecycle/index.html');">Lifecycle</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.loading');">Loading indicator</button>
|
<button class="btn large" onclick="startActivity('menus/index.html', null, 'org.apache.cordova.test.menus');">Menus</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.menus');">Menus</button>
|
<button class="btn large" onclick="startActivity('background/index.html', {keeprunning: false});">No multitasking</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.background');">No multitasking</button>
|
<button class="btn large" onclick="startActivity('http://www.google.com', {loadurltimeoutvalue: 10});">Load timeout</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.splashscreen');">Splash screen</button>
|
<button class="btn large" onclick="startActivity('userwebview/index.html', null, 'org.apache.cordova.test.userwebview');">User WebView/Client/Chrome</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.timeout');">Load timeout</button>
|
<button class="btn large" onclick="startActivity('whitelist/index.html');">Whitelist</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.userwebview');">User WebView/Client/Chrome</button>
|
<button class="btn large" onclick="startActivity('xhr/index.html');">XHR</button>
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.whitelist');">Whitelist</button>
|
|
||||||
<button class="btn large" onclick="startActivity('org.apache.cordova.test.xhr');">XHR</button>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -22,139 +22,6 @@ var deviceInfo = function() {
|
|||||||
document.getElementById("cordova").innerHTML = cordova.version;
|
document.getElementById("cordova").innerHTML = cordova.version;
|
||||||
};
|
};
|
||||||
|
|
||||||
var getLocation = function() {
|
|
||||||
var suc = function(p) {
|
|
||||||
alert(p.coords.latitude + " " + p.coords.longitude);
|
|
||||||
};
|
|
||||||
var locFail = function() {
|
|
||||||
};
|
|
||||||
navigator.geolocation.getCurrentPosition(suc, locFail);
|
|
||||||
};
|
|
||||||
|
|
||||||
var beep = function() {
|
|
||||||
navigator.notification.beep(2);
|
|
||||||
};
|
|
||||||
|
|
||||||
var vibrate = function() {
|
|
||||||
navigator.notification.vibrate(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
function roundNumber(num) {
|
|
||||||
var dec = 3;
|
|
||||||
var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
var accelerationWatch = null;
|
|
||||||
|
|
||||||
function updateAcceleration(a) {
|
|
||||||
document.getElementById('x').innerHTML = roundNumber(a.x);
|
|
||||||
document.getElementById('y').innerHTML = roundNumber(a.y);
|
|
||||||
document.getElementById('z').innerHTML = roundNumber(a.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
var toggleAccel = function() {
|
|
||||||
if (accelerationWatch !== null) {
|
|
||||||
navigator.accelerometer.clearWatch(accelerationWatch);
|
|
||||||
updateAcceleration({
|
|
||||||
x : "",
|
|
||||||
y : "",
|
|
||||||
z : ""
|
|
||||||
});
|
|
||||||
accelerationWatch = null;
|
|
||||||
} else {
|
|
||||||
var options = {};
|
|
||||||
options.frequency = 1000;
|
|
||||||
accelerationWatch = navigator.accelerometer.watchAcceleration(
|
|
||||||
updateAcceleration, function(ex) {
|
|
||||||
alert("accel fail (" + ex.name + ": " + ex.message + ")");
|
|
||||||
}, options);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var preventBehavior = function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
};
|
|
||||||
|
|
||||||
function dump_pic(data) {
|
|
||||||
var viewport = document.getElementById('viewport');
|
|
||||||
console.log(data);
|
|
||||||
viewport.style.display = "";
|
|
||||||
viewport.style.position = "absolute";
|
|
||||||
viewport.style.top = "10px";
|
|
||||||
viewport.style.left = "10px";
|
|
||||||
document.getElementById("test_img").src = "data:image/jpeg;base64," + data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fail(msg) {
|
|
||||||
alert(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_pic() {
|
|
||||||
navigator.camera.getPicture(dump_pic, fail, {
|
|
||||||
quality : 50
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function close() {
|
|
||||||
var viewport = document.getElementById('viewport');
|
|
||||||
viewport.style.position = "relative";
|
|
||||||
viewport.style.display = "none";
|
|
||||||
}
|
|
||||||
|
|
||||||
function contacts_success(contacts) {
|
|
||||||
alert(contacts.length
|
|
||||||
+ ' contacts returned.'
|
|
||||||
+ (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted)
|
|
||||||
: ''));
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_contacts() {
|
|
||||||
var obj = new ContactFindOptions();
|
|
||||||
obj.filter = "";
|
|
||||||
obj.multiple = true;
|
|
||||||
navigator.contacts.find(
|
|
||||||
[ "displayName", "name" ], contacts_success,
|
|
||||||
fail, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_network() {
|
|
||||||
var networkState = navigator.network.connection.type;
|
|
||||||
|
|
||||||
var states = {};
|
|
||||||
states[Connection.UNKNOWN] = 'Unknown connection';
|
|
||||||
states[Connection.ETHERNET] = 'Ethernet connection';
|
|
||||||
states[Connection.WIFI] = 'WiFi connection';
|
|
||||||
states[Connection.CELL_2G] = 'Cell 2G connection';
|
|
||||||
states[Connection.CELL_3G] = 'Cell 3G connection';
|
|
||||||
states[Connection.CELL_4G] = 'Cell 4G connection';
|
|
||||||
states[Connection.NONE] = 'No network connection';
|
|
||||||
|
|
||||||
confirm('Connection type:\n ' + states[networkState]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var watchID = null;
|
|
||||||
|
|
||||||
function updateHeading(h) {
|
|
||||||
document.getElementById('h').innerHTML = h.magneticHeading;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleCompass() {
|
|
||||||
if (watchID !== null) {
|
|
||||||
navigator.compass.clearWatch(watchID);
|
|
||||||
watchID = null;
|
|
||||||
updateHeading({ magneticHeading : "Off"});
|
|
||||||
} else {
|
|
||||||
var options = { frequency: 1000 };
|
|
||||||
watchID = navigator.compass.watchHeading(updateHeading, function(e) {
|
|
||||||
alert('Compass Error: ' + e.code);
|
|
||||||
}, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
// the next line makes it impossible to see Contacts on the HTC Evo since it
|
|
||||||
// doesn't have a scroll button
|
|
||||||
// document.addEventListener("touchmove", preventBehavior, false);
|
|
||||||
document.addEventListener("deviceready", deviceInfo, true);
|
document.addEventListener("deviceready", deviceInfo, true);
|
||||||
}
|
}
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
<!--
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
-->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta name="viewport" content="width=320, user-scalable=no" />
|
|
||||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
|
||||||
<title>Cordova Tests</title>
|
|
||||||
<link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title">
|
|
||||||
<script type="text/javascript" charset="utf-8" src="../cordova.js"></script>
|
|
||||||
<script type="text/javascript" charset="utf-8" src="../main.js"></script>
|
|
||||||
</head>
|
|
||||||
<body onload="init();" id="stage" class="theme">
|
|
||||||
<h1>Splash Screen Test</h1>
|
|
||||||
<div id="info">
|
|
||||||
<h4>Cordova: <span id="cordova"> </span></h4>
|
|
||||||
<h4>Deviceready: <span id="deviceready"> </span></h4>
|
|
||||||
</div>
|
|
||||||
<div id="info">
|
|
||||||
You should have seen the splash screen for 2 seconds.</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Binary file not shown.
Before Width: | Height: | Size: 47 KiB |
@ -38,7 +38,4 @@
|
|||||||
<feature name="Activity">
|
<feature name="Activity">
|
||||||
<param name="android-package" value="org.apache.cordova.test.ActivityPlugin" />
|
<param name="android-package" value="org.apache.cordova.test.ActivityPlugin" />
|
||||||
</feature>
|
</feature>
|
||||||
<feature name="PluginStub">
|
|
||||||
<param name="android-package" value="org.apache.cordova.pluginApi.pluginStub" />
|
|
||||||
</feature>
|
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This plugin is a test of all the message callbacks and actions available to plugins
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.pluginApi;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaPlugin;
|
|
||||||
|
|
||||||
public class pluginStub extends CordovaPlugin {
|
|
||||||
|
|
||||||
public String id;
|
|
||||||
public Object data;
|
|
||||||
|
|
||||||
public Object onMessage(String id, Object input)
|
|
||||||
{
|
|
||||||
this.data = input;
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
}
|
|
@ -28,52 +28,40 @@ import android.content.Intent;
|
|||||||
import org.apache.cordova.CallbackContext;
|
import org.apache.cordova.CallbackContext;
|
||||||
import org.apache.cordova.CordovaPlugin;
|
import org.apache.cordova.CordovaPlugin;
|
||||||
import org.apache.cordova.PluginResult;
|
import org.apache.cordova.PluginResult;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides a service.
|
|
||||||
*/
|
|
||||||
public class ActivityPlugin extends CordovaPlugin {
|
public class ActivityPlugin extends CordovaPlugin {
|
||||||
|
|
||||||
static String TAG = "ActivityPlugin";
|
static String TAG = "ActivityPlugin";
|
||||||
|
public static final String BACKBUTTONMULTIPAGE_URL = "file:///android_asset/www/backbuttonmultipage/index.html";
|
||||||
|
|
||||||
/**
|
public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
|
||||||
* Constructor.
|
|
||||||
*/
|
|
||||||
public ActivityPlugin() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Executes the request and returns PluginResult.
|
|
||||||
*
|
|
||||||
* @param action The action to execute.
|
|
||||||
* @param args JSONArry of arguments for the plugin.
|
|
||||||
* @param callbackId The callback id used when calling back into JavaScript.
|
|
||||||
* @return A PluginResult object with a status and message.
|
|
||||||
*/
|
|
||||||
public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) {
|
|
||||||
PluginResult result = new PluginResult(PluginResult.Status.OK, "");
|
|
||||||
try {
|
|
||||||
if (action.equals("start")) {
|
if (action.equals("start")) {
|
||||||
this.startActivity(args.getString(0));
|
String className = args.isNull(0) ? MainTestActivity.class.getCanonicalName() : args.getString(0);
|
||||||
callbackContext.sendPluginResult(result);
|
String startUrl = args.getString(1);
|
||||||
|
JSONObject extraPrefs = args.getJSONObject(2);
|
||||||
|
this.startActivity(className, startUrl, extraPrefs);
|
||||||
callbackContext.success();
|
callbackContext.success();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
|
||||||
result = new PluginResult(PluginResult.Status.JSON_EXCEPTION, "JSON Exception");
|
|
||||||
callbackContext.sendPluginResult(result);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
public void startActivity(String className, String startUrl, JSONObject extraPrefs) throws JSONException {
|
||||||
// LOCAL METHODS
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
public void startActivity(String className) {
|
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent().setClass(this.cordova.getActivity(), Class.forName(className));
|
if (!startUrl.contains(":")) {
|
||||||
|
startUrl = "file:///android_asset/www/" + startUrl;
|
||||||
|
}
|
||||||
|
Intent intent = new Intent(this.cordova.getActivity(), Class.forName(className));
|
||||||
|
intent.putExtra("testStartUrl", startUrl);
|
||||||
|
Iterator<String> iter = extraPrefs.keys();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
String key = iter.next();
|
||||||
|
intent.putExtra(key, extraPrefs.getString(key));
|
||||||
|
}
|
||||||
LOG.d(TAG, "Starting activity %s", className);
|
LOG.d(TAG, "Starting activity %s", className);
|
||||||
this.cordova.getActivity().startActivity(intent);
|
this.cordova.getActivity().startActivity(intent);
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
|
29
test/src/org/apache/cordova/test/fullscreen.java → test/src/org/apache/cordova/test/BaseTestCordovaActivity.java
Executable file → Normal file
29
test/src/org/apache/cordova/test/fullscreen.java → test/src/org/apache/cordova/test/BaseTestCordovaActivity.java
Executable file → Normal file
@ -18,22 +18,33 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.cordova.test;
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class fullscreen extends CordovaActivity {
|
import org.apache.cordova.CordovaActivity;
|
||||||
|
import org.apache.cordova.CordovaWebView;
|
||||||
|
|
||||||
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
|
|
||||||
|
public class BaseTestCordovaActivity extends CordovaActivity {
|
||||||
|
public final ArrayBlockingQueue<String> onPageFinishedUrl = new ArrayBlockingQueue<String>(500);
|
||||||
|
|
||||||
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
// Properties must be set before init() is called, since some are processed during init().
|
@Override
|
||||||
|
public Object onMessage(String id, Object data) {
|
||||||
|
if ("onPageFinished".equals(id)) {
|
||||||
|
onPageFinishedUrl.add((String) data);
|
||||||
|
}
|
||||||
|
return super.onMessage(id, data);
|
||||||
|
}
|
||||||
|
|
||||||
// fullscreen can also be set in cordova.xml. For example,
|
public CordovaWebView getCordovaWebView() {
|
||||||
// <preference name="fullscreen" value="true" />
|
return appView;
|
||||||
preferences.set("fullscreen", true);
|
|
||||||
|
|
||||||
super.init();
|
|
||||||
super.loadUrl("file:///android_asset/www/fullscreen/index.html");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaInterface;
|
|
||||||
import org.apache.cordova.CordovaPlugin;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
|
|
||||||
public class CordovaDriverAction extends Activity implements CordovaInterface {
|
|
||||||
/** Called when the activity is first created. */
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void startActivityForResult(CordovaPlugin command, Intent intent,
|
|
||||||
int requestCode) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setActivityResultCallback(CordovaPlugin plugin) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Activity getActivity() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public Context getContext() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public void cancelLoadUrl() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object onMessage(String id, Object data) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecutorService getThreadPool() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,90 +19,57 @@
|
|||||||
|
|
||||||
package org.apache.cordova.test;
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
|
|
||||||
import org.apache.cordova.AndroidChromeClient;
|
import org.apache.cordova.AndroidChromeClient;
|
||||||
|
import org.apache.cordova.AndroidWebView;
|
||||||
import org.apache.cordova.AndroidWebViewClient;
|
import org.apache.cordova.AndroidWebViewClient;
|
||||||
import org.apache.cordova.Config;
|
import org.apache.cordova.Config;
|
||||||
|
import org.apache.cordova.CordovaInterfaceImpl;
|
||||||
import org.apache.cordova.CordovaWebView;
|
import org.apache.cordova.CordovaWebView;
|
||||||
import org.apache.cordova.CordovaInterface;
|
import org.apache.cordova.CordovaInterface;
|
||||||
import org.apache.cordova.CordovaPlugin;
|
import org.apache.cordova.CordovaPlugin;
|
||||||
import org.apache.cordova.test.R;
|
import org.apache.cordova.test.R;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
public class CordovaWebViewTestActivity extends Activity implements CordovaInterface {
|
/**
|
||||||
public CordovaWebView cordovaWebView;
|
* Tests creating the views via inflating a layout, and also tests *not* using CordovaActivity.
|
||||||
|
*/
|
||||||
|
public class CordovaWebViewTestActivity extends Activity {
|
||||||
|
private CordovaWebView cordovaWebView;
|
||||||
|
public final ArrayBlockingQueue<String> onPageFinishedUrl = new ArrayBlockingQueue<String>(5);
|
||||||
|
public static final String START_URL = "file:///android_asset/www/index.html";
|
||||||
|
|
||||||
private final ExecutorService threadPool = Executors.newCachedThreadPool();
|
protected CordovaInterfaceImpl cordovaInterface = new CordovaInterfaceImpl(this) {
|
||||||
|
@Override
|
||||||
|
public Object onMessage(String id, Object data) {
|
||||||
|
if ("onPageFinished".equals(id)) {
|
||||||
|
onPageFinishedUrl.add((String) data);
|
||||||
|
}
|
||||||
|
return super.onMessage(id, data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
setContentView(R.layout.main);
|
setContentView(R.layout.main);
|
||||||
|
|
||||||
//CB-7238: This has to be added now, because it got removed from somewhere else
|
//CB-7238: This has to be added now, because it got removed from somewhere else
|
||||||
Config.init(this);
|
Config.init(this);
|
||||||
|
|
||||||
cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView);
|
AndroidWebView webView = (AndroidWebView) findViewById(R.id.cordovaWebView);
|
||||||
cordovaWebView.init(this, Config.getPluginEntries(), Config.getWhitelist(),
|
cordovaWebView = webView;
|
||||||
|
cordovaWebView.init(cordovaInterface, Config.getPluginEntries(), Config.getWhitelist(),
|
||||||
Config.getExternalWhitelist(), Config.getPreferences());
|
Config.getExternalWhitelist(), Config.getPreferences());
|
||||||
|
|
||||||
cordovaWebView.loadUrl("file:///android_asset/www/index.html");
|
cordovaWebView.loadUrl(START_URL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Context getContext() {
|
public CordovaWebView getCordovaWebView() {
|
||||||
return this;
|
return cordovaWebView;
|
||||||
}
|
|
||||||
|
|
||||||
public void startActivityForResult(CordovaPlugin command, Intent intent,
|
|
||||||
int requestCode) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setActivityResultCallback(CordovaPlugin plugin) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Note: This must always return an activity!
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public void cancelLoadUrl() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object onMessage(String id, Object data) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecutorService getThreadPool() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return threadPool;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
/**
|
|
||||||
* The final call you receive before your activity is destroyed.
|
|
||||||
*/
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (cordovaWebView != null) {
|
|
||||||
// Send destroy event to JavaScript
|
|
||||||
cordovaWebView.handleDestroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,14 +19,34 @@
|
|||||||
package org.apache.cordova.test;
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
import org.apache.cordova.CordovaActivity;
|
import org.apache.cordova.CordovaActivity;
|
||||||
|
import org.apache.cordova.CordovaInterfaceImpl;
|
||||||
|
import org.apache.cordova.CordovaWebView;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
public class MainTestActivity extends CordovaActivity {
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
|
|
||||||
|
public class MainTestActivity extends BaseTestCordovaActivity {
|
||||||
|
public static final String START_URL = "file:///android_asset/www/index.html";
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
super.loadUrl("file:///android_asset/www/index.html");
|
String url = getIntent().getStringExtra("testStartUrl");
|
||||||
|
if (url == null) {
|
||||||
|
url = START_URL;
|
||||||
|
}
|
||||||
|
super.loadUrl(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override protected void loadConfig() {
|
||||||
|
super.loadConfig();
|
||||||
|
// Need to set this explicitly in prefs since it's not settable via bundle extras (for security reasons).
|
||||||
|
String errorUrl = getIntent().getStringExtra("testErrorUrl");
|
||||||
|
if (errorUrl != null) {
|
||||||
|
preferences.set("errorUrl", errorUrl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
|
|
||||||
import org.apache.cordova.Config;
|
|
||||||
import org.apache.cordova.CordovaActivity;
|
|
||||||
|
|
||||||
import android.content.res.AssetManager;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
public class SabotagedActivity extends CordovaActivity {
|
|
||||||
|
|
||||||
private String BAD_ASSET = "www/error.html";
|
|
||||||
private String LOG_TAG = "SabotagedActivity";
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
// copyErrorAsset();
|
|
||||||
super.init();
|
|
||||||
super.loadUrl(Config.getStartUrl());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sometimes we need to move code around before we can do anything. This will
|
|
||||||
* copy the bad code out of the assets before we initalize Cordova so that when Cordova actually
|
|
||||||
* initializes, we have something for it to navigate to.
|
|
||||||
*/
|
|
||||||
|
|
||||||
private void copyErrorAsset () {
|
|
||||||
AssetManager assetManager = getAssets();
|
|
||||||
String[] files = null;
|
|
||||||
try {
|
|
||||||
files = assetManager.list(BAD_ASSET);
|
|
||||||
} catch (IOException e) {
|
|
||||||
Log.e(LOG_TAG, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
for(String filename : files) {
|
|
||||||
InputStream in = null;
|
|
||||||
OutputStream out = null;
|
|
||||||
try {
|
|
||||||
in = assetManager.open(BAD_ASSET);
|
|
||||||
out = new FileOutputStream(Environment.getExternalStorageDirectory().toString() +"/" + filename);
|
|
||||||
copy(in, out);
|
|
||||||
in.close();
|
|
||||||
in = null;
|
|
||||||
out.flush();
|
|
||||||
out.close();
|
|
||||||
out = null;
|
|
||||||
} catch(Exception e) {
|
|
||||||
Log.e("tag", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Quick and Dirty Copy!
|
|
||||||
private void copy(InputStream in, OutputStream out) throws IOException {
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
int read;
|
|
||||||
while((read = in.read(buffer)) != -1){
|
|
||||||
out.write(buffer, 0, read);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class backbuttonmultipage extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.loadUrl("file:///android_asset/www/backbuttonmultipage/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class background extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
//super.init(new FixWebView(this), new CordovaWebViewClient(this), new CordovaChromeClient(this));
|
|
||||||
preferences.set("keepRunning", false);
|
|
||||||
super.loadUrl("file:///android_asset/www/background/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class errorurl extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
preferences.set("errorUrl", "file:///android_asset/www/htmlnotfound/error.html");
|
|
||||||
super.loadUrl("file:///android_asset/www/htmlnotfound/index.html");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class htmlnotfound extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.init();
|
|
||||||
super.loadUrl("file:///android_asset/www/htmlnotfound/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class iframe extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.loadUrl("file:///android_asset/www/iframe/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,66 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.cordova.test.junit;
|
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
|
||||||
import org.apache.cordova.PluginManager;
|
|
||||||
import org.apache.cordova.test.CordovaWebViewTestActivity;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.res.AssetManager;
|
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.test.ActivityInstrumentationTestCase2;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
public class GapClientTest extends ActivityInstrumentationTestCase2<CordovaWebViewTestActivity> {
|
|
||||||
|
|
||||||
private CordovaWebViewTestActivity testActivity;
|
|
||||||
private FrameLayout containerView;
|
|
||||||
private LinearLayout innerContainer;
|
|
||||||
private View testView;
|
|
||||||
private String rString;
|
|
||||||
|
|
||||||
public GapClientTest() {
|
|
||||||
super("org.apache.cordova.test.activities",CordovaWebViewTestActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setUp() throws Exception{
|
|
||||||
super.setUp();
|
|
||||||
testActivity = this.getActivity();
|
|
||||||
containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
|
|
||||||
innerContainer = (LinearLayout) containerView.getChildAt(0);
|
|
||||||
testView = innerContainer.getChildAt(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPreconditions(){
|
|
||||||
assertNotNull(innerContainer);
|
|
||||||
assertNotNull(testView);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testForAndroidWebView() {
|
|
||||||
String className = testView.getClass().getSimpleName();
|
|
||||||
assertTrue(className.equals("AndroidWebView"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class lifecycle extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.loadUrl("file:///android_asset/www/lifecycle/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class loading extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
preferences.set("loadingDialog", "Testing,Loading...");
|
|
||||||
super.loadUrl("http://www.google.com");
|
|
||||||
}
|
|
||||||
}
|
|
@ -28,7 +28,7 @@ import android.view.ContextMenu.ContextMenuInfo;
|
|||||||
import org.apache.cordova.*;
|
import org.apache.cordova.*;
|
||||||
import org.apache.cordova.LOG;
|
import org.apache.cordova.LOG;
|
||||||
|
|
||||||
public class menus extends CordovaActivity {
|
public class menus extends BaseTestCordovaActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class splashscreen extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.init();
|
|
||||||
|
|
||||||
// Show splashscreen
|
|
||||||
preferences.set("splashscreen", "sandy");
|
|
||||||
|
|
||||||
super.loadUrl("file:///android_asset/www/splashscreen/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class tests extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.init();
|
|
||||||
//super.pluginManager.addService("Activity", "org.apache.cordova.test.ActivityPlugin");
|
|
||||||
super.loadUrl("file:///android_asset/www/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class timeout extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.init();
|
|
||||||
|
|
||||||
// Short timeout to cause error
|
|
||||||
preferences.set("loadUrlTimeoutValue", 10);
|
|
||||||
super.loadUrl("http://www.google.com");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.webkit.WebView;
|
|
||||||
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class whitelist extends MainTestActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.init();
|
|
||||||
((AndroidWebView)appView).setWebViewClient(new TestViewClient(cordovaInterface, ((AndroidWebView)appView)));
|
|
||||||
super.loadUrl("file:///android_asset/www/whitelist/index.html");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class can be used to override the GapViewClient and receive notification of webview events.
|
|
||||||
*/
|
|
||||||
public class TestViewClient extends AndroidWebViewClient {
|
|
||||||
|
|
||||||
public TestViewClient(CordovaInterface ctx, AndroidWebView app) {
|
|
||||||
super(ctx, app);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
|
||||||
LOG.d("whitelist", "shouldOverrideUrlLoading(" + url + ")");
|
|
||||||
LOG.d("whitelist", "originalUrl=" + view.getOriginalUrl());
|
|
||||||
return super.shouldOverrideUrlLoading(view, url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
or more contributor license agreements. See the NOTICE file
|
|
||||||
distributed with this work for additional information
|
|
||||||
regarding copyright ownership. The ASF licenses this file
|
|
||||||
to you under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance
|
|
||||||
with the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the License is distributed on an
|
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, either express or implied. See the License for the
|
|
||||||
specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.cordova.test;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import org.apache.cordova.*;
|
|
||||||
|
|
||||||
public class xhr extends CordovaActivity {
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
super.loadUrl("file:///android_asset/www/xhr/index.html");
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user