diff --git a/test/AndroidManifest.xml b/test/AndroidManifest.xml index 7ceaf2e8..e058a420 100755 --- a/test/AndroidManifest.xml +++ b/test/AndroidManifest.xml @@ -65,23 +65,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/README.md b/test/README.md index 24b10c1f..700cee25 100755 --- a/test/README.md +++ b/test/README.md @@ -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 found at https://code.google.com/p/robotium/ and the jar should be put in the -'androidTest/libs' directory'. +'androidTests/libs' directory'. - 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 + 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 ## Running diff --git a/test/androidTest/src/org/apache/cordova/test/BackButtonMultiPageTest.java b/test/androidTest/src/org/apache/cordova/test/BackButtonMultiPageTest.java deleted file mode 100644 index 7dddec6c..00000000 --- a/test/androidTest/src/org/apache/cordova/test/BackButtonMultiPageTest.java +++ /dev/null @@ -1,194 +0,0 @@ -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()); - } -} - diff --git a/test/androidTest/src/org/apache/cordova/test/BaseCordovaIntegrationTest.java b/test/androidTest/src/org/apache/cordova/test/BaseCordovaIntegrationTest.java deleted file mode 100644 index ff769304..00000000 --- a/test/androidTest/src/org/apache/cordova/test/BaseCordovaIntegrationTest.java +++ /dev/null @@ -1,55 +0,0 @@ -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 { - 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(); - } -} - diff --git a/test/androidTest/src/org/apache/cordova/test/CordovaResourceApiTest.java b/test/androidTest/src/org/apache/cordova/test/CordovaResourceApiTest.java deleted file mode 100644 index 73aa066f..00000000 --- a/test/androidTest/src/org/apache/cordova/test/CordovaResourceApiTest.java +++ /dev/null @@ -1,258 +0,0 @@ - -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); - } -} diff --git a/test/androidTest/src/org/apache/cordova/test/InflateLayoutTest.java b/test/androidTest/src/org/apache/cordova/test/InflateLayoutTest.java deleted file mode 100644 index 3899cf1a..00000000 --- a/test/androidTest/src/org/apache/cordova/test/InflateLayoutTest.java +++ /dev/null @@ -1,56 +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.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 { - - 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); - } -} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java b/test/androidTest/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java new file mode 100644 index 00000000..cc90538f --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java @@ -0,0 +1,278 @@ +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 { + + 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"); + } + } + +} + diff --git a/test/androidTest/src/org/apache/cordova/test/junit/CordovaActivityTest.java b/test/androidTest/src/org/apache/cordova/test/junit/CordovaActivityTest.java new file mode 100644 index 00000000..965e3d27 --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/CordovaActivityTest.java @@ -0,0 +1,79 @@ +/* + 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 { + + 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"); + } + } +} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/CordovaResourceApiTest.java b/test/androidTest/src/org/apache/cordova/test/junit/CordovaResourceApiTest.java new file mode 100644 index 00000000..a8a53702 --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/CordovaResourceApiTest.java @@ -0,0 +1,281 @@ + +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 { + + 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); + } +} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/CordovaTest.java b/test/androidTest/src/org/apache/cordova/test/junit/CordovaTest.java new file mode 100644 index 00000000..2e09611f --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/CordovaTest.java @@ -0,0 +1,116 @@ +/* + 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 { + + 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"); + } + } +} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/ErrorUrlTest.java b/test/androidTest/src/org/apache/cordova/test/junit/ErrorUrlTest.java new file mode 100644 index 00000000..de12bc4b --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/ErrorUrlTest.java @@ -0,0 +1,82 @@ +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 { + + 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"); + } + } + + +} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/FixWebView.java b/test/androidTest/src/org/apache/cordova/test/junit/FixWebView.java new file mode 100755 index 00000000..3b73e29e --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/FixWebView.java @@ -0,0 +1,43 @@ +/* + 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(); + } + +} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/HtmlNotFoundTest.java b/test/androidTest/src/org/apache/cordova/test/junit/HtmlNotFoundTest.java new file mode 100644 index 00000000..abc4802a --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/HtmlNotFoundTest.java @@ -0,0 +1,80 @@ +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 { + + 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"); + } + } + +} diff --git a/test/androidTest/src/org/apache/cordova/test/IFrameTest.java b/test/androidTest/src/org/apache/cordova/test/junit/IFrameTest.java similarity index 61% rename from test/androidTest/src/org/apache/cordova/test/IFrameTest.java rename to test/androidTest/src/org/apache/cordova/test/junit/IFrameTest.java index 48dae380..800deadd 100644 --- a/test/androidTest/src/org/apache/cordova/test/IFrameTest.java +++ b/test/androidTest/src/org/apache/cordova/test/junit/IFrameTest.java @@ -1,4 +1,4 @@ -package org.apache.cordova.test; +package org.apache.cordova.test.junit; /* * * Licensed to the Apache Software Foundation (ASF) under one @@ -21,44 +21,65 @@ package org.apache.cordova.test; */ -import android.test.TouchUtils; - +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.test.iframe; import org.apache.cordova.test.util.Purity; -public class IFrameTest extends BaseCordovaIntegrationTest { - private static final String START_URL = "file:///android_asset/www/iframe/index.html"; +import android.app.Activity; +import android.app.Instrumentation; +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 Purity touchTool; + public IFrameTest() { + super("org.apache.cordova.test",iframe.class); + } + + protected void setUp() throws Exception { super.setUp(); - setUpWithStartUrl(START_URL); + mInstr = this.getInstrumentation(); + testActivity = this.getActivity(); + containerView = (FrameLayout) testActivity.findViewById(android.R.id.content); + innerContainer = (LinearLayout) containerView.getChildAt(0); + testView = (CordovaWebView) innerContainer.getChildAt(0); touch = new TouchUtils(); touchTool = new Purity(testActivity, getInstrumentation()); } - public void testIframeDest() throws Throwable { - assertEquals(START_URL, testActivity.onPageFinishedUrl.take()); + public void testIframeDest() throws Throwable + { runTestOnUiThread(new Runnable() { public void run() { - cordovaWebView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');"); + testView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');"); } }); sleep(3000); runTestOnUiThread(new Runnable() { public void run() { - cordovaWebView.sendJavascript("loadUrl('index2.html')"); + testView.sendJavascript("loadUrl('index2.html')"); } }); sleep(1000); runTestOnUiThread(new Runnable() { public void run() { - String url = cordovaWebView.getUrl(); + String url = testView.getUrl(); assertTrue(url.endsWith("index.html")); } }); @@ -69,29 +90,29 @@ public class IFrameTest extends BaseCordovaIntegrationTest { runTestOnUiThread(new Runnable() { public void run() { - cordovaWebView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');"); + testView.sendJavascript("loadUrl('http://maps.google.com/maps?output=embed');"); } }); sleep(3000); runTestOnUiThread(new Runnable() { public void run() { - cordovaWebView.sendJavascript("loadUrl('index2.html')"); + testView.sendJavascript("loadUrl('index2.html')"); } }); sleep(1000); runTestOnUiThread(new Runnable() { public void run() { - String url = cordovaWebView.getUrl(); - cordovaWebView.backHistory(); + String url = testView.getUrl(); + testView.backHistory(); } }); sleep(1000); runTestOnUiThread(new Runnable() { public void run() { - String url = cordovaWebView.getUrl(); + String url = testView.getUrl(); assertTrue(url.endsWith("index.html")); } }); diff --git a/test/androidTest/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java b/test/androidTest/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java new file mode 100644 index 00000000..e84a8dca --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java @@ -0,0 +1,94 @@ +/* + 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 { + + 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"); + } + } + + +} diff --git a/test/androidTest/src/org/apache/cordova/test/HtmlNotFoundTest.java b/test/androidTest/src/org/apache/cordova/test/junit/LifecycleTest.java similarity index 55% rename from test/androidTest/src/org/apache/cordova/test/HtmlNotFoundTest.java rename to test/androidTest/src/org/apache/cordova/test/junit/LifecycleTest.java index 36fc3bd3..54235757 100644 --- a/test/androidTest/src/org/apache/cordova/test/HtmlNotFoundTest.java +++ b/test/androidTest/src/org/apache/cordova/test/junit/LifecycleTest.java @@ -1,4 +1,4 @@ -package org.apache.cordova.test; +package org.apache.cordova.test.junit; /* * * Licensed to the Apache Software Foundation (ASF) under one @@ -21,21 +21,14 @@ package org.apache.cordova.test; */ -public class HtmlNotFoundTest extends BaseCordovaIntegrationTest { - private static final String START_URL = "file:///android_asset/www/htmlnotfound/index.html"; +import org.apache.cordova.test.lifecycle; - protected void setUp() throws Exception { - super.setUp(); - setUpWithStartUrl(START_URL); - } - public void testUrl() throws Throwable +import android.test.ActivityInstrumentationTestCase2; + +public class LifecycleTest extends ActivityInstrumentationTestCase2 { + + public LifecycleTest() { - 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()); - } - }); + super("org.apache.cordova.test",lifecycle.class); } } diff --git a/test/androidTest/src/org/apache/cordova/test/junit/PluginManagerTest.java b/test/androidTest/src/org/apache/cordova/test/junit/PluginManagerTest.java new file mode 100644 index 00000000..bcdead69 --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/PluginManagerTest.java @@ -0,0 +1,70 @@ +/* + 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 { + + 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")); + */ + } + + +} diff --git a/test/androidTest/src/org/apache/cordova/test/ErrorUrlTest.java b/test/androidTest/src/org/apache/cordova/test/junit/SplashscreenTest.java similarity index 50% rename from test/androidTest/src/org/apache/cordova/test/ErrorUrlTest.java rename to test/androidTest/src/org/apache/cordova/test/junit/SplashscreenTest.java index fc6ce8c3..14da5acd 100644 --- a/test/androidTest/src/org/apache/cordova/test/ErrorUrlTest.java +++ b/test/androidTest/src/org/apache/cordova/test/junit/SplashscreenTest.java @@ -1,4 +1,4 @@ -package org.apache.cordova.test; +package org.apache.cordova.test.junit; /* * * Licensed to the Apache Software Foundation (ASF) under one @@ -21,22 +21,29 @@ package org.apache.cordova.test; */ -public class ErrorUrlTest extends BaseCordovaIntegrationTest { - 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 org.apache.cordova.CordovaWebView; +import org.apache.cordova.test.splashscreen; - protected void setUp() throws Exception { - super.setUp(); - setUpWithStartUrl(START_URL, "testErrorUrl", ERROR_URL); +import android.app.Dialog; +import android.test.ActivityInstrumentationTestCase2; +import android.widget.FrameLayout; +import android.widget.LinearLayout; + +public class SplashscreenTest extends ActivityInstrumentationTestCase2 { + + private splashscreen testActivity; + private Dialog containerView; + + public SplashscreenTest() + { + super("org.apache.cordova.test",splashscreen.class); + } + + protected void setUp() throws Exception { + super.setUp(); + testActivity = this.getActivity(); + //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()); - } - }); - } -} \ No newline at end of file +} diff --git a/test/androidTest/src/org/apache/cordova/test/junit/XhrTest.java b/test/androidTest/src/org/apache/cordova/test/junit/XhrTest.java new file mode 100644 index 00000000..16c977f2 --- /dev/null +++ b/test/androidTest/src/org/apache/cordova/test/junit/XhrTest.java @@ -0,0 +1,34 @@ +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.xhr; + +import android.test.ActivityInstrumentationTestCase2; + +public class XhrTest extends ActivityInstrumentationTestCase2 { + + public XhrTest() + { + super(xhr.class); + } +} diff --git a/test/assets/www/error.html b/test/assets/www/error.html new file mode 100644 index 00000000..aad167dc --- /dev/null +++ b/test/assets/www/error.html @@ -0,0 +1,8 @@ + + + OH NOES! + + +

Things went terribly wrong!

+ + \ No newline at end of file diff --git a/test/assets/www/index.html b/test/assets/www/index.html index f55aa0a9..d4659f7a 100755 --- a/test/assets/www/index.html +++ b/test/assets/www/index.html @@ -26,8 +26,8 @@ + + + +

Splash Screen Test

+
+

Cordova:  

+

Deviceready:  

+
+
+ You should have seen the splash screen for 2 seconds.
+ + diff --git a/test/res/drawable/sandy.jpg b/test/res/drawable/sandy.jpg new file mode 100755 index 00000000..c956d30b Binary files /dev/null and b/test/res/drawable/sandy.jpg differ diff --git a/test/res/xml/config.xml b/test/res/xml/config.xml index 894c3362..4370357c 100644 --- a/test/res/xml/config.xml +++ b/test/res/xml/config.xml @@ -38,4 +38,7 @@ + + + diff --git a/test/src/org/apache/cordova/pluginApi/pluginStub.java b/test/src/org/apache/cordova/pluginApi/pluginStub.java new file mode 100644 index 00000000..b91a7af6 --- /dev/null +++ b/test/src/org/apache/cordova/pluginApi/pluginStub.java @@ -0,0 +1,39 @@ +/* + 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; + } +} diff --git a/test/src/org/apache/cordova/test/ActivityPlugin.java b/test/src/org/apache/cordova/test/ActivityPlugin.java index c6a96ec0..19a50a2b 100755 --- a/test/src/org/apache/cordova/test/ActivityPlugin.java +++ b/test/src/org/apache/cordova/test/ActivityPlugin.java @@ -28,40 +28,52 @@ import android.content.Intent; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; 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 { 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 { - if (action.equals("start")) { - String className = args.isNull(0) ? MainTestActivity.class.getCanonicalName() : args.getString(0); - String startUrl = args.getString(1); - JSONObject extraPrefs = args.getJSONObject(2); - this.startActivity(className, startUrl, extraPrefs); - callbackContext.success(); - return true; + /** + * 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")) { + this.startActivity(args.getString(0)); + callbackContext.sendPluginResult(result); + callbackContext.success(); + return true; + } + } catch (JSONException e) { + result = new PluginResult(PluginResult.Status.JSON_EXCEPTION, "JSON Exception"); + callbackContext.sendPluginResult(result); + return false; } return false; } - public void startActivity(String className, String startUrl, JSONObject extraPrefs) throws JSONException { + // -------------------------------------------------------------------------- + // LOCAL METHODS + // -------------------------------------------------------------------------- + + public void startActivity(String className) { try { - if (!startUrl.contains(":")) { - startUrl = "file:///android_asset/www/" + startUrl; - } - Intent intent = new Intent(this.cordova.getActivity(), Class.forName(className)); - intent.putExtra("testStartUrl", startUrl); - Iterator iter = extraPrefs.keys(); - while (iter.hasNext()) { - String key = iter.next(); - intent.putExtra(key, extraPrefs.getString(key)); - } + Intent intent = new Intent().setClass(this.cordova.getActivity(), Class.forName(className)); LOG.d(TAG, "Starting activity %s", className); this.cordova.getActivity().startActivity(intent); } catch (ClassNotFoundException e) { diff --git a/test/src/org/apache/cordova/test/CordovaDriverAction.java b/test/src/org/apache/cordova/test/CordovaDriverAction.java new file mode 100644 index 00000000..0559f5fd --- /dev/null +++ b/test/src/org/apache/cordova/test/CordovaDriverAction.java @@ -0,0 +1,78 @@ +/* + 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; + } + +} diff --git a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java index ce9797e8..43e0b2bc 100644 --- a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java +++ b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java @@ -19,57 +19,90 @@ package org.apache.cordova.test; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import org.apache.cordova.AndroidChromeClient; -import org.apache.cordova.AndroidWebView; import org.apache.cordova.AndroidWebViewClient; import org.apache.cordova.Config; -import org.apache.cordova.CordovaInterfaceImpl; import org.apache.cordova.CordovaWebView; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.test.R; import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; -/** - * 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 onPageFinishedUrl = new ArrayBlockingQueue(5); - public static final String START_URL = "file:///android_asset/www/index.html"; - - 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); - } - }; +public class CordovaWebViewTestActivity extends Activity implements CordovaInterface { + public CordovaWebView cordovaWebView; + private final ExecutorService threadPool = Executors.newCachedThreadPool(); + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.main); //CB-7238: This has to be added now, because it got removed from somewhere else Config.init(this); - - AndroidWebView webView = (AndroidWebView) findViewById(R.id.cordovaWebView); - cordovaWebView = webView; - cordovaWebView.init(cordovaInterface, Config.getPluginEntries(), Config.getWhitelist(), + + cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView); + cordovaWebView.init(this, Config.getPluginEntries(), Config.getWhitelist(), Config.getExternalWhitelist(), Config.getPreferences()); - cordovaWebView.loadUrl(START_URL); + cordovaWebView.loadUrl("file:///android_asset/www/index.html"); + } - public CordovaWebView getCordovaWebView() { - return cordovaWebView; + public Context getContext() { + return this; + } + + 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(); + } } } diff --git a/test/src/org/apache/cordova/test/MainTestActivity.java b/test/src/org/apache/cordova/test/MainTestActivity.java index 45d8309d..2a0f67e6 100644 --- a/test/src/org/apache/cordova/test/MainTestActivity.java +++ b/test/src/org/apache/cordova/test/MainTestActivity.java @@ -19,34 +19,14 @@ package org.apache.cordova.test; import org.apache.cordova.CordovaActivity; -import org.apache.cordova.CordovaInterfaceImpl; -import org.apache.cordova.CordovaWebView; -import android.content.Intent; import android.os.Bundle; -import java.util.concurrent.ArrayBlockingQueue; - -public class MainTestActivity extends BaseTestCordovaActivity { - public static final String START_URL = "file:///android_asset/www/index.html"; - +public class MainTestActivity extends CordovaActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - 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); - } + super.loadUrl("file:///android_asset/www/index.html"); } } diff --git a/test/src/org/apache/cordova/test/SabotagedActivity.java b/test/src/org/apache/cordova/test/SabotagedActivity.java new file mode 100644 index 00000000..7f3edc57 --- /dev/null +++ b/test/src/org/apache/cordova/test/SabotagedActivity.java @@ -0,0 +1,92 @@ +/* + 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); + } + } +} diff --git a/test/src/org/apache/cordova/test/backbuttonmultipage.java b/test/src/org/apache/cordova/test/backbuttonmultipage.java new file mode 100755 index 00000000..d744198b --- /dev/null +++ b/test/src/org/apache/cordova/test/backbuttonmultipage.java @@ -0,0 +1,30 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/background.java b/test/src/org/apache/cordova/test/background.java new file mode 100755 index 00000000..d7ed1018 --- /dev/null +++ b/test/src/org/apache/cordova/test/background.java @@ -0,0 +1,33 @@ +/* + 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"); + } +} diff --git a/test/androidTest/src/org/apache/cordova/test/CordovaActivityTest.java b/test/src/org/apache/cordova/test/backgroundcolor.java old mode 100644 new mode 100755 similarity index 52% rename from test/androidTest/src/org/apache/cordova/test/CordovaActivityTest.java rename to test/src/org/apache/cordova/test/backgroundcolor.java index 5fb38479..30e297f1 --- a/test/androidTest/src/org/apache/cordova/test/CordovaActivityTest.java +++ b/test/src/org/apache/cordova/test/backgroundcolor.java @@ -16,30 +16,22 @@ specific language governing permissions and limitations under the License. */ - package org.apache.cordova.test; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; +import android.graphics.Color; +import android.os.Bundle; +import org.apache.cordova.*; -import org.apache.cordova.AndroidWebView; +public class backgroundcolor extends CordovaActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); -public class CordovaActivityTest extends BaseCordovaIntegrationTest { - private ViewGroup innerContainer; - private View testView; + // backgroundColor can also be set in cordova.xml, but you must use the number equivalent of the color. For example, Color.RED is + // + preferences.set("backgroundColor", Color.GREEN); - protected void setUp() throws Exception { - super.setUp(); - setUpWithStartUrl(null); - innerContainer = (ViewGroup)containerView.getChildAt(0); - testView = innerContainer.getChildAt(0); + super.loadUrl("file:///android_asset/www/backgroundcolor/index.html"); } - public void testBasicLoad() throws Exception { - assertTrue(testView instanceof AndroidWebView); - assertTrue(innerContainer instanceof LinearLayout); - String onPageFinishedUrl = testActivity.onPageFinishedUrl.take(); - assertEquals(MainTestActivity.START_URL, onPageFinishedUrl); - } } diff --git a/test/src/org/apache/cordova/test/errorurl.java b/test/src/org/apache/cordova/test/errorurl.java new file mode 100755 index 00000000..e946e408 --- /dev/null +++ b/test/src/org/apache/cordova/test/errorurl.java @@ -0,0 +1,33 @@ +/* + 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"); + } + + +} diff --git a/test/src/org/apache/cordova/test/BaseTestCordovaActivity.java b/test/src/org/apache/cordova/test/fullscreen.java old mode 100644 new mode 100755 similarity index 60% rename from test/src/org/apache/cordova/test/BaseTestCordovaActivity.java rename to test/src/org/apache/cordova/test/fullscreen.java index 0a280362..0aa1ee99 --- a/test/src/org/apache/cordova/test/BaseTestCordovaActivity.java +++ b/test/src/org/apache/cordova/test/fullscreen.java @@ -18,33 +18,22 @@ */ package org.apache.cordova.test; -import android.content.Intent; import android.os.Bundle; +import org.apache.cordova.*; -import org.apache.cordova.CordovaActivity; -import org.apache.cordova.CordovaWebView; - -import java.util.concurrent.ArrayBlockingQueue; - -public class BaseTestCordovaActivity extends CordovaActivity { - public final ArrayBlockingQueue onPageFinishedUrl = new ArrayBlockingQueue(500); - - /** Called when the activity is first created. */ +public class fullscreen extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - } - @Override - public Object onMessage(String id, Object data) { - if ("onPageFinished".equals(id)) { - onPageFinishedUrl.add((String) data); - } - return super.onMessage(id, data); - } + // Properties must be set before init() is called, since some are processed during init(). - public CordovaWebView getCordovaWebView() { - return appView; + // fullscreen can also be set in cordova.xml. For example, + // + preferences.set("fullscreen", true); + + super.init(); + super.loadUrl("file:///android_asset/www/fullscreen/index.html"); } } diff --git a/test/src/org/apache/cordova/test/htmlnotfound.java b/test/src/org/apache/cordova/test/htmlnotfound.java new file mode 100755 index 00000000..c602922d --- /dev/null +++ b/test/src/org/apache/cordova/test/htmlnotfound.java @@ -0,0 +1,31 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/iframe.java b/test/src/org/apache/cordova/test/iframe.java new file mode 100755 index 00000000..3d30cfb1 --- /dev/null +++ b/test/src/org/apache/cordova/test/iframe.java @@ -0,0 +1,30 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/junit/GapClientTest.java b/test/src/org/apache/cordova/test/junit/GapClientTest.java new file mode 100644 index 00000000..ce6ca8c1 --- /dev/null +++ b/test/src/org/apache/cordova/test/junit/GapClientTest.java @@ -0,0 +1,66 @@ +/* + 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 { + + 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")); + } + + +} diff --git a/test/src/org/apache/cordova/test/lifecycle.java b/test/src/org/apache/cordova/test/lifecycle.java new file mode 100755 index 00000000..d1c42129 --- /dev/null +++ b/test/src/org/apache/cordova/test/lifecycle.java @@ -0,0 +1,30 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/loading.java b/test/src/org/apache/cordova/test/loading.java new file mode 100755 index 00000000..da2c4ff5 --- /dev/null +++ b/test/src/org/apache/cordova/test/loading.java @@ -0,0 +1,31 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/menus.java b/test/src/org/apache/cordova/test/menus.java index 6ef12c5c..4c65ed5f 100755 --- a/test/src/org/apache/cordova/test/menus.java +++ b/test/src/org/apache/cordova/test/menus.java @@ -28,7 +28,7 @@ import android.view.ContextMenu.ContextMenuInfo; import org.apache.cordova.*; import org.apache.cordova.LOG; -public class menus extends BaseTestCordovaActivity { +public class menus extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/test/src/org/apache/cordova/test/splashscreen.java b/test/src/org/apache/cordova/test/splashscreen.java new file mode 100755 index 00000000..34051bbf --- /dev/null +++ b/test/src/org/apache/cordova/test/splashscreen.java @@ -0,0 +1,35 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/tests.java b/test/src/org/apache/cordova/test/tests.java new file mode 100755 index 00000000..64ad56ee --- /dev/null +++ b/test/src/org/apache/cordova/test/tests.java @@ -0,0 +1,32 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/timeout.java b/test/src/org/apache/cordova/test/timeout.java new file mode 100755 index 00000000..8a418a30 --- /dev/null +++ b/test/src/org/apache/cordova/test/timeout.java @@ -0,0 +1,34 @@ +/* + 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"); + } +} diff --git a/test/src/org/apache/cordova/test/whitelist.java b/test/src/org/apache/cordova/test/whitelist.java new file mode 100755 index 00000000..e2029a99 --- /dev/null +++ b/test/src/org/apache/cordova/test/whitelist.java @@ -0,0 +1,51 @@ +/* + 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); + } + } +} diff --git a/test/src/org/apache/cordova/test/xhr.java b/test/src/org/apache/cordova/test/xhr.java new file mode 100755 index 00000000..4f73926f --- /dev/null +++ b/test/src/org/apache/cordova/test/xhr.java @@ -0,0 +1,30 @@ +/* + 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"); + } +}