mirror of
https://github.com/wahyd4/BarcodeScanner.git
synced 2026-08-09 21:15:54 +10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ec3d477c2 | ||
|
|
ea1586b0ff | ||
|
|
10f8e6b116 | ||
|
|
6cf71f0a3e | ||
|
|
6d95b33987 | ||
|
|
ec5e1dc843 | ||
|
|
507c726215 | ||
|
|
fceafa235a | ||
|
|
666387e132 | ||
|
|
eb557c4827 | ||
|
|
33b2e914a4 | ||
|
|
657ec45122 | ||
|
|
52ce70de60 | ||
|
|
ab95b1342d | ||
|
|
7e7c39dda6 | ||
|
|
5c46e8d93f | ||
|
|
3bc65ebbaa | ||
|
|
5d6f0d52f9 | ||
|
|
b1f643f6f4 | ||
|
|
9c533da17e | ||
|
|
f568cc6d3e | ||
|
|
215e077510 | ||
|
|
58e773af70 |
@@ -5,15 +5,17 @@ Cross-platform BarcodeScanner for Cordova / PhoneGap.
|
||||
|
||||
Follows the [Cordova Plugin spec](https://github.com/alunny/cordova-plugin-spec), so that it works with [Pluginstall](https://github.com/alunny/pluginstall).
|
||||
|
||||
This plugin leverages Cordova/PhoneGap's [require/define functionality used for plugins](http://simonmacdonald.blogspot.ca/2012/08/so-you-wanna-write-phonegap-200-android.html).
|
||||
|
||||
Note: the Android source for this project includes an Android Library Project.
|
||||
pluginstall currently doesn't support Library Project refs, so its been
|
||||
prebuilt as a jar library. Any updates to the Library Project should be
|
||||
committed with an updated jar.
|
||||
|
||||
## Using the plugin ##
|
||||
The plugin creates the object `window.plugins.barcodeScanner` with the method `scan(success, fail)`.
|
||||
The following barcode types are currently supported:
|
||||
The plugin creates the object `cordova/plugin/BarcodeScanner` with the method `scan(success, fail)`.
|
||||
|
||||
The following barcode types are currently supported:
|
||||
### Android
|
||||
|
||||
* QR_CODE
|
||||
@@ -45,16 +47,21 @@ The following barcode types are currently supported:
|
||||
`success` and `fail` are callback functions. Success is passed an object with data, type and cancelled properties. Data is the text representation of the barcode data, type is the type of barcode detected and cancelled is whether or not the user cancelled the scan.
|
||||
|
||||
A full example could be:
|
||||
```
|
||||
var scanner = cordova.require("cordova/plugin/BarcodeScanner");
|
||||
|
||||
window.plugins.barcodeScanner.scan( function(result) {
|
||||
alert("We got a barcode\n" +
|
||||
"Result: " + result.text + "\n" +
|
||||
"Format: " + result.format + "\n" +
|
||||
"Cancelled: " + result.cancelled);
|
||||
}, function(error) {
|
||||
alert("Scanning failed: " + error);
|
||||
}
|
||||
);
|
||||
scanner.scan(
|
||||
function (result) {
|
||||
alert("We got a barcode\n" +
|
||||
"Result: " + result.text + "\n" +
|
||||
"Format: " + result.format + "\n" +
|
||||
"Cancelled: " + result.cancelled);
|
||||
},
|
||||
function (error) {
|
||||
alert("Scanning failed: " + error);
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## Encoding a Barcode ##
|
||||
The plugin creates the object `window.plugins.barcodeScanner` with the method `encode(type, data, success, fail)`.
|
||||
@@ -65,14 +72,18 @@ Supported encoding types:
|
||||
* PHONE_TYPE
|
||||
* SMS_TYPE
|
||||
|
||||
```
|
||||
A full example could be:
|
||||
|
||||
window.plugins.barcodeScanner.encode(BarcodeScanner.Encode.TEXT_TYPE, "http://www.nytimes.com", function(success) {
|
||||
var scanner = cordova.require("cordova/plugin/BarcodeScanner");
|
||||
|
||||
scanner.encode(BarcodeScanner.Encode.TEXT_TYPE, "http://www.nytimes.com", function(success) {
|
||||
alert("encode success: " + success);
|
||||
}, function(fail) {
|
||||
alert("encoding failed: " + fail);
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## Thanks on Github ##
|
||||
|
||||
@@ -101,4 +112,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
THE SOFTWARE.
|
||||
|
||||
+54
-54
@@ -2,7 +2,7 @@
|
||||
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
id="com.phonegap.plugins.barcodescanner"
|
||||
version="0.3.0">
|
||||
version="0.5.2">
|
||||
|
||||
<name>BarcodeScanner</name>
|
||||
|
||||
@@ -13,16 +13,16 @@
|
||||
<plugins-plist key="BarcodeScanner" string="CDVBarcodeScanner" />
|
||||
|
||||
<!-- Cordova >= 2.3 -->
|
||||
<config-file target="config.xml" parent="/cordova/plugins">
|
||||
<config-file target="config.xml" parent="plugins">
|
||||
<plugin name="BarcodeScanner" value="CDVBarcodeScanner"/>
|
||||
</config-file>
|
||||
|
||||
<resource-file src="scannerOverlay.xib" />
|
||||
<resource-file src="src/ios/scannerOverlay.xib" />
|
||||
|
||||
<header-file src="zxing-all-in-one.h" />
|
||||
<header-file src="src/ios/zxing-all-in-one.h" />
|
||||
|
||||
<source-file src="CDVBarcodeScanner.mm" />
|
||||
<source-file src="zxing-all-in-one.cpp" />
|
||||
<source-file src="src/ios/CDVBarcodeScanner.mm" />
|
||||
<source-file src="src/ios/zxing-all-in-one.cpp" />
|
||||
|
||||
<framework src="libiconv.dylib" />
|
||||
<framework src="AVFoundation.framework" />
|
||||
@@ -33,7 +33,7 @@
|
||||
<!-- android -->
|
||||
<platform name="android">
|
||||
|
||||
<source-file src="com/phonegap/plugins/barcodescanner/BarcodeScanner.java" target-dir="src/com/phonegap/plugins/barcodescanner" />
|
||||
<source-file src="src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java" target-dir="src/com/phonegap/plugins/barcodescanner" />
|
||||
<!--
|
||||
<source-file src="R.java" target-dir="src/com/google/zxing/client/android" />
|
||||
-->
|
||||
@@ -43,7 +43,7 @@
|
||||
value="com.phonegap.plugins.barcodescanner.BarcodeScanner"/>
|
||||
</config-file>
|
||||
|
||||
<config-file target="res/xml/config.xml" parent="/cordova/plugins">
|
||||
<config-file target="res/xml/config.xml" parent="plugins">
|
||||
<plugin name="BarcodeScanner"
|
||||
value="com.phonegap.plugins.barcodescanner.BarcodeScanner"/>
|
||||
</config-file>
|
||||
@@ -76,39 +76,39 @@
|
||||
<uses-feature android:name="android.hardware.camera" />
|
||||
</config-file>
|
||||
|
||||
<source-file src="com.google.zxing.client.android.captureactivity.jar" target-dir="libs"/>
|
||||
<source-file src="src/android/com.google.zxing.client.android.captureactivity.jar" target-dir="libs"/>
|
||||
|
||||
|
||||
<source-file src="LibraryProject/res/drawable/launcher_icon.png" target-dir="res/drawable"/>
|
||||
<source-file src="LibraryProject/res/drawable/share_via_barcode.png" target-dir="res/drawable"/>
|
||||
<source-file src="LibraryProject/res/drawable/shopper_icon.png" target-dir="res/drawable"/>
|
||||
<source-file src="src/android/LibraryProject/res/drawable/launcher_icon.png" target-dir="res/drawable"/>
|
||||
<source-file src="src/android/LibraryProject/res/drawable/share_via_barcode.png" target-dir="res/drawable"/>
|
||||
<source-file src="src/android/LibraryProject/res/drawable/shopper_icon.png" target-dir="res/drawable"/>
|
||||
|
||||
|
||||
<source-file src="LibraryProject/res/drawable-hdpi/launcher_icon.png" target-dir="res/drawable-hdpi"/>
|
||||
<source-file src="LibraryProject/res/drawable-hdpi/shopper_icon.png" target-dir="res/drawable-hdpi"/>
|
||||
<source-file src="src/android/LibraryProject/res/drawable-hdpi/launcher_icon.png" target-dir="res/drawable-hdpi"/>
|
||||
<source-file src="src/android/LibraryProject/res/drawable-hdpi/shopper_icon.png" target-dir="res/drawable-hdpi"/>
|
||||
|
||||
<source-file src="LibraryProject/res/raw/beep.ogg" target-dir="res/raw"/>
|
||||
<source-file src="src/android/LibraryProject/res/raw/beep.ogg" target-dir="res/raw"/>
|
||||
|
||||
<source-file src="LibraryProject/res/layout/bookmark_picker_list_item.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/capture.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/encode.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/help.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/network.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/search_book_contents.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/search_book_contents_header.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/search_book_contents_list_item.xml" target-dir="res/layout"/>
|
||||
<source-file src="LibraryProject/res/layout/share.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/bookmark_picker_list_item.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/capture.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/encode.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/help.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/network.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/search_book_contents.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/search_book_contents_header.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/search_book_contents_list_item.xml" target-dir="res/layout"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout/share.xml" target-dir="res/layout"/>
|
||||
|
||||
<source-file src="LibraryProject/res/layout-land/encode.xml" target-dir="res/layout-land"/>
|
||||
<source-file src="LibraryProject/res/layout-land/share.xml" target-dir="res/layout-land"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout-land/encode.xml" target-dir="res/layout-land"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout-land/share.xml" target-dir="res/layout-land"/>
|
||||
|
||||
<source-file src="LibraryProject/res/layout-ldpi/capture.xml" target-dir="res/layout-ldpi"/>
|
||||
<source-file src="src/android/LibraryProject/res/layout-ldpi/capture.xml" target-dir="res/layout-ldpi"/>
|
||||
|
||||
<source-file src="LibraryProject/res/xml/preferences.xml" target-dir="res/xml"/>
|
||||
<source-file src="src/android/LibraryProject/res/xml/preferences.xml" target-dir="res/xml"/>
|
||||
|
||||
<source-file src="LibraryProject/res/values/attrs.xml" target-dir="res/values"/>
|
||||
<source-file src="LibraryProject/res/values/colors.xml" target-dir="res/values"/>
|
||||
<source-file src="LibraryProject/res/values/ids.xml" target-dir="res/values"/>
|
||||
<source-file src="src/android/LibraryProject/res/values/attrs.xml" target-dir="res/values"/>
|
||||
<source-file src="src/android/LibraryProject/res/values/colors.xml" target-dir="res/values"/>
|
||||
<source-file src="src/android/LibraryProject/res/values/ids.xml" target-dir="res/values"/>
|
||||
|
||||
<config-file target="res/values/strings.xml" parent="/resources">
|
||||
<!-- string name="app_name">Barcode Scanner</string -->
|
||||
@@ -238,28 +238,28 @@
|
||||
</config-file>
|
||||
|
||||
|
||||
<source-file src="LibraryProject/res/values-ar/strings.xml" target-dir="res/values-ar"/>
|
||||
<source-file src="LibraryProject/res/values-bg/strings.xml" target-dir="res/values-bg"/>
|
||||
<source-file src="LibraryProject/res/values-cs/strings.xml" target-dir="res/values-cs"/>
|
||||
<source-file src="LibraryProject/res/values-da/strings.xml" target-dir="res/values-da"/>
|
||||
<source-file src="LibraryProject/res/values-de/strings.xml" target-dir="res/values-de"/>
|
||||
<source-file src="LibraryProject/res/values-es/strings.xml" target-dir="res/values-es"/>
|
||||
<source-file src="LibraryProject/res/values-fi/strings.xml" target-dir="res/values-fi"/>
|
||||
<source-file src="LibraryProject/res/values-fr/strings.xml" target-dir="res/values-fr"/>
|
||||
<source-file src="LibraryProject/res/values-he/strings.xml" target-dir="res/values-he"/>
|
||||
<source-file src="LibraryProject/res/values-hu/strings.xml" target-dir="res/values-hu"/>
|
||||
<source-file src="LibraryProject/res/values-it/strings.xml" target-dir="res/values-it"/>
|
||||
<source-file src="LibraryProject/res/values-ja-rJP/strings.xml" target-dir="res/values-ja-rJP"/>
|
||||
<source-file src="LibraryProject/res/values-nl/strings.xml" target-dir="res/values-nl"/>
|
||||
<source-file src="LibraryProject/res/values-pl/strings.xml" target-dir="res/values-pl"/>
|
||||
<source-file src="LibraryProject/res/values-pt/strings.xml" target-dir="res/values-pt"/>
|
||||
<source-file src="LibraryProject/res/values-ru/strings.xml" target-dir="res/values-ru"/>
|
||||
<source-file src="LibraryProject/res/values-sk/strings.xml" target-dir="res/values-sk"/>
|
||||
<source-file src="LibraryProject/res/values-sl/strings.xml" target-dir="res/values-sl"/>
|
||||
<source-file src="LibraryProject/res/values-sv/strings.xml" target-dir="res/values-sv"/>
|
||||
<source-file src="LibraryProject/res/values-tr/strings.xml" target-dir="res/values-tr"/>
|
||||
<source-file src="LibraryProject/res/values-zh-rCN/strings.xml" target-dir="res/values-zh-rCN"/>
|
||||
<source-file src="LibraryProject/res/values-zh-rTW/strings.xml" target-dir="res/values-zh-rTW"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-ar/strings.xml" target-dir="res/values-ar"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-bg/strings.xml" target-dir="res/values-bg"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-cs/strings.xml" target-dir="res/values-cs"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-da/strings.xml" target-dir="res/values-da"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-de/strings.xml" target-dir="res/values-de"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-es/strings.xml" target-dir="res/values-es"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-fi/strings.xml" target-dir="res/values-fi"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-fr/strings.xml" target-dir="res/values-fr"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-he/strings.xml" target-dir="res/values-he"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-hu/strings.xml" target-dir="res/values-hu"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-it/strings.xml" target-dir="res/values-it"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-ja-rJP/strings.xml" target-dir="res/values-ja-rJP"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-nl/strings.xml" target-dir="res/values-nl"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-pl/strings.xml" target-dir="res/values-pl"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-pt/strings.xml" target-dir="res/values-pt"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-ru/strings.xml" target-dir="res/values-ru"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-sk/strings.xml" target-dir="res/values-sk"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-sl/strings.xml" target-dir="res/values-sl"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-sv/strings.xml" target-dir="res/values-sv"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-tr/strings.xml" target-dir="res/values-tr"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-zh-rCN/strings.xml" target-dir="res/values-zh-rCN"/>
|
||||
<source-file src="src/android/LibraryProject/res/values-zh-rTW/strings.xml" target-dir="res/values-zh-rTW"/>
|
||||
|
||||
</platform>
|
||||
</plugin>
|
||||
</plugin>
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
describe('Plugin object (window.plugins)', function () {
|
||||
it("should exist", function() {
|
||||
expect(window.plugins).toBeDefined();
|
||||
});
|
||||
|
||||
it("should contain a barcodeScanner object", function() {
|
||||
expect(window.plugins.barcodeScanner).toBeDefined();
|
||||
expect(typeof window.plugins.barcodeScanner == 'object').toBe(true);
|
||||
});
|
||||
|
||||
it("should contain a scan function", function() {
|
||||
expect(window.plugins.barcodeScanner.scan).toBeDefined();
|
||||
expect(typeof window.plugins.barcodeScanner.scan == 'function').toBe(true);
|
||||
});
|
||||
|
||||
it("should contain an encode function", function() {
|
||||
expect(window.plugins.barcodeScanner.encode).toBeDefined();
|
||||
expect(typeof window.plugins.barcodeScanner.encode == 'function').toBe(true);
|
||||
});
|
||||
|
||||
it("should contain three DestinationType constants", function() {
|
||||
expect(BarcodeScanner.Encode.TEXT_TYPE).toBe("TEXT_TYPE");
|
||||
expect(BarcodeScanner.Encode.EMAIL_TYPE).toBe("EMAIL_TYPE");
|
||||
expect(BarcodeScanner.Encode.PHONE_TYPE).toBe("PHONE_TYPE");
|
||||
expect(BarcodeScanner.Encode.SMS_TYPE).toBe("SMS_TYPE");
|
||||
});
|
||||
/*
|
||||
it("should call scan successfully", function() {
|
||||
window.plugins.barcodeScanner.scan(function() {}, function() {});
|
||||
});
|
||||
*/
|
||||
});
|
||||
@@ -0,0 +1,101 @@
|
||||
jasmine.HtmlReporter = function(_doc) {
|
||||
var self = this;
|
||||
var doc = _doc || window.document;
|
||||
|
||||
var reporterView;
|
||||
|
||||
var dom = {};
|
||||
|
||||
// Jasmine Reporter Public Interface
|
||||
self.logRunningSpecs = false;
|
||||
|
||||
self.reportRunnerStarting = function(runner) {
|
||||
var specs = runner.specs() || [];
|
||||
|
||||
if (specs.length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
createReporterDom(runner.env.versionString());
|
||||
doc.body.appendChild(dom.reporter);
|
||||
|
||||
reporterView = new jasmine.HtmlReporter.ReporterView(dom);
|
||||
reporterView.addSpecs(specs, self.specFilter);
|
||||
};
|
||||
|
||||
self.reportRunnerResults = function(runner) {
|
||||
reporterView && reporterView.complete();
|
||||
};
|
||||
|
||||
self.reportSuiteResults = function(suite) {
|
||||
reporterView.suiteComplete(suite);
|
||||
};
|
||||
|
||||
self.reportSpecStarting = function(spec) {
|
||||
if (self.logRunningSpecs) {
|
||||
self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
|
||||
}
|
||||
};
|
||||
|
||||
self.reportSpecResults = function(spec) {
|
||||
reporterView.specComplete(spec);
|
||||
};
|
||||
|
||||
self.log = function() {
|
||||
var console = jasmine.getGlobal().console;
|
||||
if (console && console.log) {
|
||||
if (console.log.apply) {
|
||||
console.log.apply(console, arguments);
|
||||
} else {
|
||||
console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
self.specFilter = function(spec) {
|
||||
if (!focusedSpecName()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return spec.getFullName().indexOf(focusedSpecName()) === 0;
|
||||
};
|
||||
|
||||
return self;
|
||||
|
||||
function focusedSpecName() {
|
||||
var specName;
|
||||
|
||||
(function memoizeFocusedSpec() {
|
||||
if (specName) {
|
||||
return;
|
||||
}
|
||||
|
||||
var paramMap = [];
|
||||
var params = doc.location.search.substring(1).split('&');
|
||||
|
||||
for (var i = 0; i < params.length; i++) {
|
||||
var p = params[i].split('=');
|
||||
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
|
||||
}
|
||||
|
||||
specName = paramMap.spec;
|
||||
})();
|
||||
|
||||
return specName;
|
||||
}
|
||||
|
||||
function createReporterDom(version) {
|
||||
dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
|
||||
dom.banner = self.createDom('div', { className: 'banner' },
|
||||
self.createDom('span', { className: 'title' }, "Jasmine "),
|
||||
self.createDom('span', { className: 'version' }, version)),
|
||||
|
||||
dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
|
||||
dom.alert = self.createDom('div', {className: 'alert'}),
|
||||
dom.results = self.createDom('div', {className: 'results'},
|
||||
dom.summary = self.createDom('div', { className: 'summary' }),
|
||||
dom.details = self.createDom('div', { id: 'details' }))
|
||||
);
|
||||
}
|
||||
};
|
||||
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);
|
||||
@@ -0,0 +1,60 @@
|
||||
jasmine.HtmlReporterHelpers = {};
|
||||
|
||||
jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
|
||||
var el = document.createElement(type);
|
||||
|
||||
for (var i = 2; i < arguments.length; i++) {
|
||||
var child = arguments[i];
|
||||
|
||||
if (typeof child === 'string') {
|
||||
el.appendChild(document.createTextNode(child));
|
||||
} else {
|
||||
if (child) {
|
||||
el.appendChild(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var attr in attrs) {
|
||||
if (attr == "className") {
|
||||
el[attr] = attrs[attr];
|
||||
} else {
|
||||
el.setAttribute(attr, attrs[attr]);
|
||||
}
|
||||
}
|
||||
|
||||
return el;
|
||||
};
|
||||
|
||||
jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
|
||||
var results = child.results();
|
||||
var status = results.passed() ? 'passed' : 'failed';
|
||||
if (results.skipped) {
|
||||
status = 'skipped';
|
||||
}
|
||||
|
||||
return status;
|
||||
};
|
||||
|
||||
jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
|
||||
var parentDiv = this.dom.summary;
|
||||
var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
|
||||
var parent = child[parentSuite];
|
||||
|
||||
if (parent) {
|
||||
if (typeof this.views.suites[parent.id] == 'undefined') {
|
||||
this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
|
||||
}
|
||||
parentDiv = this.views.suites[parent.id].element;
|
||||
}
|
||||
|
||||
parentDiv.appendChild(childElement);
|
||||
};
|
||||
|
||||
|
||||
jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
|
||||
for(var fn in jasmine.HtmlReporterHelpers) {
|
||||
ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
jasmine.HtmlReporter.ReporterView = function(dom) {
|
||||
this.startedAt = new Date();
|
||||
this.runningSpecCount = 0;
|
||||
this.completeSpecCount = 0;
|
||||
this.passedCount = 0;
|
||||
this.failedCount = 0;
|
||||
this.skippedCount = 0;
|
||||
|
||||
this.createResultsMenu = function() {
|
||||
this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
|
||||
this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
|
||||
' | ',
|
||||
this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
|
||||
|
||||
this.summaryMenuItem.onclick = function() {
|
||||
dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
|
||||
};
|
||||
|
||||
this.detailsMenuItem.onclick = function() {
|
||||
showDetails();
|
||||
};
|
||||
};
|
||||
|
||||
this.addSpecs = function(specs, specFilter) {
|
||||
this.totalSpecCount = specs.length;
|
||||
|
||||
this.views = {
|
||||
specs: {},
|
||||
suites: {}
|
||||
};
|
||||
|
||||
for (var i = 0; i < specs.length; i++) {
|
||||
var spec = specs[i];
|
||||
this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
|
||||
if (specFilter(spec)) {
|
||||
this.runningSpecCount++;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.specComplete = function(spec) {
|
||||
this.completeSpecCount++;
|
||||
|
||||
if (isUndefined(this.views.specs[spec.id])) {
|
||||
this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
|
||||
}
|
||||
|
||||
var specView = this.views.specs[spec.id];
|
||||
|
||||
switch (specView.status()) {
|
||||
case 'passed':
|
||||
this.passedCount++;
|
||||
break;
|
||||
|
||||
case 'failed':
|
||||
this.failedCount++;
|
||||
break;
|
||||
|
||||
case 'skipped':
|
||||
this.skippedCount++;
|
||||
break;
|
||||
}
|
||||
|
||||
specView.refresh();
|
||||
this.refresh();
|
||||
};
|
||||
|
||||
this.suiteComplete = function(suite) {
|
||||
var suiteView = this.views.suites[suite.id];
|
||||
if (isUndefined(suiteView)) {
|
||||
return;
|
||||
}
|
||||
suiteView.refresh();
|
||||
};
|
||||
|
||||
this.refresh = function() {
|
||||
|
||||
if (isUndefined(this.resultsMenu)) {
|
||||
this.createResultsMenu();
|
||||
}
|
||||
|
||||
// currently running UI
|
||||
if (isUndefined(this.runningAlert)) {
|
||||
this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});
|
||||
dom.alert.appendChild(this.runningAlert);
|
||||
}
|
||||
this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
|
||||
|
||||
// skipped specs UI
|
||||
if (isUndefined(this.skippedAlert)) {
|
||||
this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});
|
||||
}
|
||||
|
||||
this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
|
||||
|
||||
if (this.skippedCount === 1 && isDefined(dom.alert)) {
|
||||
dom.alert.appendChild(this.skippedAlert);
|
||||
}
|
||||
|
||||
// passing specs UI
|
||||
if (isUndefined(this.passedAlert)) {
|
||||
this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});
|
||||
}
|
||||
this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
|
||||
|
||||
// failing specs UI
|
||||
if (isUndefined(this.failedAlert)) {
|
||||
this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
|
||||
}
|
||||
this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
|
||||
|
||||
if (this.failedCount === 1 && isDefined(dom.alert)) {
|
||||
dom.alert.appendChild(this.failedAlert);
|
||||
dom.alert.appendChild(this.resultsMenu);
|
||||
}
|
||||
|
||||
// summary info
|
||||
this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
|
||||
this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
|
||||
};
|
||||
|
||||
this.complete = function() {
|
||||
dom.alert.removeChild(this.runningAlert);
|
||||
|
||||
this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
|
||||
|
||||
if (this.failedCount === 0) {
|
||||
dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
|
||||
} else {
|
||||
showDetails();
|
||||
}
|
||||
|
||||
dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
|
||||
};
|
||||
|
||||
return this;
|
||||
|
||||
function showDetails() {
|
||||
if (dom.reporter.className.search(/showDetails/) === -1) {
|
||||
dom.reporter.className += " showDetails";
|
||||
}
|
||||
}
|
||||
|
||||
function isUndefined(obj) {
|
||||
return typeof obj === 'undefined';
|
||||
}
|
||||
|
||||
function isDefined(obj) {
|
||||
return !isUndefined(obj);
|
||||
}
|
||||
|
||||
function specPluralizedFor(count) {
|
||||
var str = count + " spec";
|
||||
if (count > 1) {
|
||||
str += "s"
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
|
||||
this.spec = spec;
|
||||
this.dom = dom;
|
||||
this.views = views;
|
||||
|
||||
this.symbol = this.createDom('li', { className: 'pending' });
|
||||
this.dom.symbolSummary.appendChild(this.symbol);
|
||||
|
||||
this.summary = this.createDom('div', { className: 'specSummary' },
|
||||
this.createDom('a', {
|
||||
className: 'description',
|
||||
href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
|
||||
title: this.spec.getFullName()
|
||||
}, this.spec.description)
|
||||
);
|
||||
|
||||
this.detail = this.createDom('div', { className: 'specDetail' },
|
||||
this.createDom('a', {
|
||||
className: 'description',
|
||||
href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
|
||||
title: this.spec.getFullName()
|
||||
}, this.spec.getFullName())
|
||||
);
|
||||
};
|
||||
|
||||
jasmine.HtmlReporter.SpecView.prototype.status = function() {
|
||||
return this.getSpecStatus(this.spec);
|
||||
};
|
||||
|
||||
jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
|
||||
this.symbol.className = this.status();
|
||||
|
||||
switch (this.status()) {
|
||||
case 'skipped':
|
||||
break;
|
||||
|
||||
case 'passed':
|
||||
this.appendSummaryToSuiteDiv();
|
||||
break;
|
||||
|
||||
case 'failed':
|
||||
this.appendSummaryToSuiteDiv();
|
||||
this.appendFailureDetail();
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
|
||||
this.summary.className += ' ' + this.status();
|
||||
this.appendToSummary(this.spec, this.summary);
|
||||
};
|
||||
|
||||
jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
|
||||
this.detail.className += ' ' + this.status();
|
||||
|
||||
var resultItems = this.spec.results().getItems();
|
||||
var messagesDiv = this.createDom('div', { className: 'messages' });
|
||||
|
||||
for (var i = 0; i < resultItems.length; i++) {
|
||||
var result = resultItems[i];
|
||||
|
||||
if (result.type == 'log') {
|
||||
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
|
||||
} else if (result.type == 'expect' && result.passed && !result.passed()) {
|
||||
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
|
||||
|
||||
if (result.trace.stack) {
|
||||
messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (messagesDiv.childNodes.length > 0) {
|
||||
this.detail.appendChild(messagesDiv);
|
||||
this.dom.details.appendChild(this.detail);
|
||||
}
|
||||
};
|
||||
|
||||
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);
|
||||
@@ -0,0 +1,22 @@
|
||||
jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
|
||||
this.suite = suite;
|
||||
this.dom = dom;
|
||||
this.views = views;
|
||||
|
||||
this.element = this.createDom('div', { className: 'suite' },
|
||||
this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)
|
||||
);
|
||||
|
||||
this.appendToSummary(this.suite, this.element);
|
||||
};
|
||||
|
||||
jasmine.HtmlReporter.SuiteView.prototype.status = function() {
|
||||
return this.getSpecStatus(this.suite);
|
||||
};
|
||||
|
||||
jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
|
||||
this.element.className += " " + this.status();
|
||||
};
|
||||
|
||||
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
/* @deprecated Use jasmine.HtmlReporter instead
|
||||
*/
|
||||
jasmine.TrivialReporter = function(doc) {
|
||||
this.document = doc || document;
|
||||
this.suiteDivs = {};
|
||||
this.logRunningSpecs = false;
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
|
||||
var el = document.createElement(type);
|
||||
|
||||
for (var i = 2; i < arguments.length; i++) {
|
||||
var child = arguments[i];
|
||||
|
||||
if (typeof child === 'string') {
|
||||
el.appendChild(document.createTextNode(child));
|
||||
} else {
|
||||
if (child) { el.appendChild(child); }
|
||||
}
|
||||
}
|
||||
|
||||
for (var attr in attrs) {
|
||||
if (attr == "className") {
|
||||
el[attr] = attrs[attr];
|
||||
} else {
|
||||
el.setAttribute(attr, attrs[attr]);
|
||||
}
|
||||
}
|
||||
|
||||
return el;
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
|
||||
var showPassed, showSkipped;
|
||||
|
||||
this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
|
||||
this.createDom('div', { className: 'banner' },
|
||||
this.createDom('div', { className: 'logo' },
|
||||
this.createDom('span', { className: 'title' }, "Jasmine"),
|
||||
this.createDom('span', { className: 'version' }, runner.env.versionString())),
|
||||
this.createDom('div', { className: 'options' },
|
||||
"Show ",
|
||||
showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
|
||||
this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
|
||||
showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
|
||||
this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
|
||||
)
|
||||
),
|
||||
|
||||
this.runnerDiv = this.createDom('div', { className: 'runner running' },
|
||||
this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
|
||||
this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
|
||||
this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
|
||||
);
|
||||
|
||||
this.document.body.appendChild(this.outerDiv);
|
||||
|
||||
var suites = runner.suites();
|
||||
for (var i = 0; i < suites.length; i++) {
|
||||
var suite = suites[i];
|
||||
var suiteDiv = this.createDom('div', { className: 'suite' },
|
||||
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
|
||||
this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
|
||||
this.suiteDivs[suite.id] = suiteDiv;
|
||||
var parentDiv = this.outerDiv;
|
||||
if (suite.parentSuite) {
|
||||
parentDiv = this.suiteDivs[suite.parentSuite.id];
|
||||
}
|
||||
parentDiv.appendChild(suiteDiv);
|
||||
}
|
||||
|
||||
this.startedAt = new Date();
|
||||
|
||||
var self = this;
|
||||
showPassed.onclick = function(evt) {
|
||||
if (showPassed.checked) {
|
||||
self.outerDiv.className += ' show-passed';
|
||||
} else {
|
||||
self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
|
||||
}
|
||||
};
|
||||
|
||||
showSkipped.onclick = function(evt) {
|
||||
if (showSkipped.checked) {
|
||||
self.outerDiv.className += ' show-skipped';
|
||||
} else {
|
||||
self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
|
||||
var results = runner.results();
|
||||
var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
|
||||
this.runnerDiv.setAttribute("class", className);
|
||||
//do it twice for IE
|
||||
this.runnerDiv.setAttribute("className", className);
|
||||
var specs = runner.specs();
|
||||
var specCount = 0;
|
||||
for (var i = 0; i < specs.length; i++) {
|
||||
if (this.specFilter(specs[i])) {
|
||||
specCount++;
|
||||
}
|
||||
}
|
||||
var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
|
||||
message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
|
||||
this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
|
||||
|
||||
this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
|
||||
var results = suite.results();
|
||||
var status = results.passed() ? 'passed' : 'failed';
|
||||
if (results.totalCount === 0) { // todo: change this to check results.skipped
|
||||
status = 'skipped';
|
||||
}
|
||||
this.suiteDivs[suite.id].className += " " + status;
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
|
||||
if (this.logRunningSpecs) {
|
||||
this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
|
||||
}
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
|
||||
var results = spec.results();
|
||||
var status = results.passed() ? 'passed' : 'failed';
|
||||
if (results.skipped) {
|
||||
status = 'skipped';
|
||||
}
|
||||
var specDiv = this.createDom('div', { className: 'spec ' + status },
|
||||
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
|
||||
this.createDom('a', {
|
||||
className: 'description',
|
||||
href: '?spec=' + encodeURIComponent(spec.getFullName()),
|
||||
title: spec.getFullName()
|
||||
}, spec.description));
|
||||
|
||||
|
||||
var resultItems = results.getItems();
|
||||
var messagesDiv = this.createDom('div', { className: 'messages' });
|
||||
for (var i = 0; i < resultItems.length; i++) {
|
||||
var result = resultItems[i];
|
||||
|
||||
if (result.type == 'log') {
|
||||
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
|
||||
} else if (result.type == 'expect' && result.passed && !result.passed()) {
|
||||
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
|
||||
|
||||
if (result.trace.stack) {
|
||||
messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (messagesDiv.childNodes.length > 0) {
|
||||
specDiv.appendChild(messagesDiv);
|
||||
}
|
||||
|
||||
this.suiteDivs[spec.suite.id].appendChild(specDiv);
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.log = function() {
|
||||
var console = jasmine.getGlobal().console;
|
||||
if (console && console.log) {
|
||||
if (console.log.apply) {
|
||||
console.log.apply(console, arguments);
|
||||
} else {
|
||||
console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.getLocation = function() {
|
||||
return this.document.location;
|
||||
};
|
||||
|
||||
jasmine.TrivialReporter.prototype.specFilter = function(spec) {
|
||||
var paramMap = {};
|
||||
var params = this.getLocation().search.substring(1).split('&');
|
||||
for (var i = 0; i < params.length; i++) {
|
||||
var p = params[i].split('=');
|
||||
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
|
||||
}
|
||||
|
||||
if (!paramMap.spec) {
|
||||
return true;
|
||||
}
|
||||
return spec.getFullName().indexOf(paramMap.spec) === 0;
|
||||
};
|
||||
@@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
|
||||
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.
|
||||
|
||||
-->
|
||||
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Cordova: API Specs</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=yes, initial-scale=1.0;" />
|
||||
|
||||
<!-- Load jasmine -->
|
||||
<link href="jasmine.css" rel="stylesheet"/>
|
||||
<script type="text/javascript" src="jasmine.js"></script>
|
||||
<script type="text/javascript" src="html/HtmlReporterHelpers.js"></script>
|
||||
<script type="text/javascript" src="html/HtmlReporter.js"></script>
|
||||
<script type="text/javascript" src="html/ReporterView.js"></script>
|
||||
<script type="text/javascript" src="html/SpecView.js"></script>
|
||||
<script type="text/javascript" src="html/SuiteView.js"></script>
|
||||
<script type="text/javascript" src="html/TrivialReporter.js"></script>
|
||||
<script type="text/javascript" src="jasmine-jsreporter.js"></script>
|
||||
|
||||
<!-- Source -->
|
||||
<script type="text/javascript" src="cordova.js"></script>
|
||||
<script type="text/javascript" src="barcodescanner.js"></script>
|
||||
|
||||
<!-- Load Test Runner -->
|
||||
<script type="text/javascript" src="test-runner.js"></script>
|
||||
|
||||
<!-- Tests -->
|
||||
<script type="text/javascript" src="barcodescanner.tests.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
document.addEventListener('deviceready', function () {
|
||||
|
||||
// Once root is set up, fire off tests
|
||||
var jasmineEnv = jasmine.getEnv();
|
||||
jasmineEnv.updateInterval = 1000;
|
||||
|
||||
var htmlReporter = new jasmine.HtmlReporter();
|
||||
|
||||
jasmineEnv.addReporter(htmlReporter);
|
||||
|
||||
jasmineEnv.specFilter = function(spec) {
|
||||
return htmlReporter.specFilter(spec);
|
||||
};
|
||||
|
||||
jasmineEnv.execute();
|
||||
}, false);
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a href="javascript:" class="backBtn" onclick="backHome();">Back</a>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,81 @@
|
||||
body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
|
||||
|
||||
#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
|
||||
#HTMLReporter a { text-decoration: none; }
|
||||
#HTMLReporter a:hover { text-decoration: underline; }
|
||||
#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
|
||||
#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
|
||||
#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
|
||||
#HTMLReporter .version { color: #aaaaaa; }
|
||||
#HTMLReporter .banner { margin-top: 14px; }
|
||||
#HTMLReporter .duration { color: #aaaaaa; float: right; }
|
||||
#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
|
||||
#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
|
||||
#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
|
||||
#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
|
||||
#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
|
||||
#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
|
||||
#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
|
||||
#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
|
||||
#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
|
||||
#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
|
||||
#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
|
||||
#HTMLReporter .runningAlert { background-color: #666666; }
|
||||
#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
|
||||
#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
|
||||
#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
|
||||
#HTMLReporter .passingAlert { background-color: #a6b779; }
|
||||
#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
|
||||
#HTMLReporter .failingAlert { background-color: #cf867e; }
|
||||
#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
|
||||
#HTMLReporter .results { margin-top: 14px; }
|
||||
#HTMLReporter #details { display: none; }
|
||||
#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
|
||||
#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
|
||||
#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
|
||||
#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
|
||||
#HTMLReporter.showDetails .summary { display: none; }
|
||||
#HTMLReporter.showDetails #details { display: block; }
|
||||
#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
|
||||
#HTMLReporter .summary { margin-top: 14px; }
|
||||
#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
|
||||
#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
|
||||
#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
|
||||
#HTMLReporter .description + .suite { margin-top: 0; }
|
||||
#HTMLReporter .suite { margin-top: 14px; }
|
||||
#HTMLReporter .suite a { color: #333333; }
|
||||
#HTMLReporter #details .specDetail { margin-bottom: 28px; }
|
||||
#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
|
||||
#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
|
||||
#HTMLReporter .resultMessage span.result { display: block; }
|
||||
#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
|
||||
|
||||
#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
|
||||
#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
|
||||
#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
|
||||
#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
|
||||
#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
|
||||
#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
|
||||
#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
|
||||
#TrivialReporter .runner.running { background-color: yellow; }
|
||||
#TrivialReporter .options { text-align: right; font-size: .8em; }
|
||||
#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
|
||||
#TrivialReporter .suite .suite { margin: 5px; }
|
||||
#TrivialReporter .suite.passed { background-color: #dfd; }
|
||||
#TrivialReporter .suite.failed { background-color: #fdd; }
|
||||
#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
|
||||
#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
|
||||
#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
|
||||
#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
|
||||
#TrivialReporter .spec.skipped { background-color: #bbb; }
|
||||
#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
|
||||
#TrivialReporter .passed { background-color: #cfc; display: none; }
|
||||
#TrivialReporter .failed { background-color: #fbb; }
|
||||
#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
|
||||
#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
|
||||
#TrivialReporter .resultMessage .mismatch { color: black; }
|
||||
#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
|
||||
#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
|
||||
#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
|
||||
#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
|
||||
#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; }
|
||||
+2530
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
if (window.sessionStorage != null) {
|
||||
window.sessionStorage.clear();
|
||||
}
|
||||
|
||||
// Timeout is 2 seconds to allow physical devices enough
|
||||
// time to query the response. This is important for some
|
||||
// Android devices.
|
||||
var Tests = function() {};
|
||||
Tests.TEST_TIMEOUT = 7500;
|
||||
|
||||
// Creates a spy that will fail if called.
|
||||
function createDoNotCallSpy(name, opt_extraMessage) {
|
||||
return jasmine.createSpy().andCallFake(function() {
|
||||
var errorMessage = name + ' should not have been called.';
|
||||
if (arguments.length) {
|
||||
errorMessage += ' Got args: ' + JSON.stringify(arguments);
|
||||
}
|
||||
if (opt_extraMessage) {
|
||||
errorMessage += '\n' + opt_extraMessage;
|
||||
}
|
||||
expect(false).toBe(true, errorMessage);
|
||||
});
|
||||
}
|
||||
|
||||
// Waits for any of the given spys to be called.
|
||||
// Last param may be a custom timeout duration.
|
||||
function waitsForAny() {
|
||||
var spys = [].slice.call(arguments);
|
||||
var timeout = Tests.TEST_TIMEOUT;
|
||||
if (typeof spys[spys.length - 1] == 'number') {
|
||||
timeout = spys.pop();
|
||||
}
|
||||
waitsFor(function() {
|
||||
for (var i = 0; i < spys.length; ++i) {
|
||||
if (spys[i].wasCalled) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}, "Expecting callbacks to be called.", timeout);
|
||||
}
|
||||
@@ -40,7 +40,7 @@
|
||||
android:title="@string/preferences_vibrate_title"/>
|
||||
<CheckBoxPreference
|
||||
android:key="preferences_copy_to_clipboard"
|
||||
android:defaultValue="true"
|
||||
android:defaultValue="false"
|
||||
android:title="@string/preferences_copy_to_clipboard_title"/>
|
||||
<CheckBoxPreference
|
||||
android:key="preferences_remember_duplicates"
|
||||
|
||||
@@ -238,7 +238,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
||||
}
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
copyToClipboard = prefs.getBoolean(PreferencesActivity.KEY_COPY_TO_CLIPBOARD, true)
|
||||
copyToClipboard = prefs.getBoolean(PreferencesActivity.KEY_COPY_TO_CLIPBOARD, false)
|
||||
&& (intent == null || intent.getBooleanExtra(Intents.Scan.SAVE_HISTORY, true));
|
||||
|
||||
beepManager.updatePrefs();
|
||||
|
||||
Binary file not shown.
+54
-44
@@ -6,58 +6,68 @@
|
||||
* Copyright (c) 2011, IBM Corporation
|
||||
*/
|
||||
|
||||
var BarcodeScanner = function() {
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
BarcodeScanner.Encode = {
|
||||
TEXT_TYPE: "TEXT_TYPE",
|
||||
EMAIL_TYPE: "EMAIL_TYPE",
|
||||
PHONE_TYPE: "PHONE_TYPE",
|
||||
SMS_TYPE: "SMS_TYPE",
|
||||
// CONTACT_TYPE: "CONTACT_TYPE", // TODO: not implemented, requires passing a Bundle class from Javascriopt to Java
|
||||
// LOCATION_TYPE: "LOCATION_TYPE" // TODO: not implemented, requires passing a Bundle class from Javascriopt to Java
|
||||
};
|
||||
cordova.define("cordova/plugin/BarcodeScanner",
|
||||
|
||||
function (require, exports, module) {
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
BarcodeScanner.prototype.scan = function(successCallback, errorCallback) {
|
||||
if (errorCallback == null) { errorCallback = function() {}}
|
||||
var exec = require("cordova/exec");
|
||||
|
||||
if (typeof errorCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: failure parameter not a function");
|
||||
return
|
||||
}
|
||||
var BarcodeScanner = function () {
|
||||
};
|
||||
|
||||
if (typeof successCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: success callback parameter must be a function");
|
||||
return
|
||||
}
|
||||
//-------------------------------------------------------------------
|
||||
BarcodeScanner.Encode = {
|
||||
TEXT_TYPE: "TEXT_TYPE",
|
||||
EMAIL_TYPE: "EMAIL_TYPE",
|
||||
PHONE_TYPE: "PHONE_TYPE",
|
||||
SMS_TYPE: "SMS_TYPE",
|
||||
// CONTACT_TYPE: "CONTACT_TYPE", // TODO: not implemented, requires passing a Bundle class from Javascript to Java
|
||||
// LOCATION_TYPE: "LOCATION_TYPE" // TODO: not implemented, requires passing a Bundle class from Javascript to Java
|
||||
};
|
||||
|
||||
cordova.exec(successCallback, errorCallback, 'BarcodeScanner', 'scan', []);
|
||||
};
|
||||
//-------------------------------------------------------------------
|
||||
BarcodeScanner.prototype.scan = function (successCallback, errorCallback) {
|
||||
if (errorCallback == null) {
|
||||
errorCallback = function () {
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
BarcodeScanner.prototype.encode = function(type, data, successCallback, errorCallback, options) {
|
||||
if (errorCallback == null) { errorCallback = function() {}}
|
||||
if (typeof errorCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: failure parameter not a function");
|
||||
return
|
||||
}
|
||||
|
||||
if (typeof errorCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: failure parameter not a function");
|
||||
return
|
||||
}
|
||||
if (typeof successCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: success callback parameter must be a function");
|
||||
return
|
||||
}
|
||||
|
||||
if (typeof successCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: success callback parameter must be a function");
|
||||
return
|
||||
}
|
||||
exec(successCallback, errorCallback, 'BarcodeScanner', 'scan', []);
|
||||
};
|
||||
|
||||
cordova.exec(successCallback, errorCallback, 'BarcodeScanner', 'encode', [{"type": type, "data": data, "options": options}]);
|
||||
};
|
||||
//-------------------------------------------------------------------
|
||||
BarcodeScanner.prototype.encode = function (type, data, successCallback, errorCallback, options) {
|
||||
if (errorCallback == null) {
|
||||
errorCallback = function () {
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
if (typeof errorCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: failure parameter not a function");
|
||||
return
|
||||
}
|
||||
|
||||
if(!window.plugins) {
|
||||
window.plugins = {};
|
||||
}
|
||||
if (!window.plugins.barcodeScanner) {
|
||||
window.plugins.barcodeScanner = new BarcodeScanner();
|
||||
}
|
||||
if (typeof successCallback != "function") {
|
||||
console.log("BarcodeScanner.scan failure: success callback parameter must be a function");
|
||||
return
|
||||
}
|
||||
|
||||
exec(successCallback, errorCallback, 'BarcodeScanner', 'encode', [
|
||||
{"type": type, "data": data, "options": options}
|
||||
]);
|
||||
};
|
||||
|
||||
var barcodeScanner = new BarcodeScanner();
|
||||
module.exports = barcodeScanner;
|
||||
});
|
||||
Reference in New Issue
Block a user