}
}
+/**
+ * Randomize array element order in-place.
+ * Using Durstenfeld shuffle algorithm.
+ * See http://stackoverflow.com/a/12646864
+ */
+function shuffle(array) {
+ for (var i = array.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = array[i];
+ array[i] = array[j];
+ array[j] = temp;
+ }
+ return array;
+}
+
tests = [
// Page loads with status of 'success'
},
// BIP44 derivation path is shown
-// TODO finish these tests
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "m/44'/0'/0'/0";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ // check the derivation path of the first address
+ waitForGenerate(function() {
+ var actual = page.evaluate(function() {
+ return $("#bip44 .path").val();
+ });
+ if (actual != expected) {
+ console.log("BIP44 derivation path is incorrect");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+});
+},
// BIP44 extended private key is shown
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "xprvA2DxxvPZcyRvYgZMGS53nadR32mVDeCyqQYyFhrCVbJNjPoxMeVf7QT5g7mQASbTf9Kp4cryvcXnu2qurjWKcrdsr91jXymdCDNxKgLFKJG";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ // check the BIP44 extended private key
+ waitForGenerate(function() {
+ var actual = page.evaluate(function() {
+ return $(".extended-priv-key").val();
+ });
+ if (actual != expected) {
+ console.log("BIP44 extended private key is incorrect");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+});
+},
+
// BIP44 extended public key is shown
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "xpub6FDKNRvTTLzDmAdpNTc49ia9b4byd6vqCdUa46Fp3vqMcC96uBoufCmZXQLiN5AK3iSCJMhf9gT2sxkpyaPepRuA7W3MujV5tGmF5VfbueM";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ // check the BIP44 extended public key
+ waitForGenerate(function() {
+ var actual = page.evaluate(function() {
+ return $(".extended-pub-key").val();
+ });
+ if (actual != expected) {
+ console.log("BIP44 extended public key is incorrect");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+});
+},
+
// BIP44 purpose field changes address list
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "1JbDzRJ2cDT8aat2xwKd6Pb2zzavow5MhF";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ waitForGenerate(function() {
+ // change the bip44 purpose field to 45
+ page.evaluate(function() {
+ $("#bip44 .purpose").val("45");
+ $("#bip44 .purpose").trigger("input");
+ });
+ waitForGenerate(function() {
+ // check the address for the new derivation path
+ var actual = page.evaluate(function() {
+ return $(".address:first").text();
+ });
+ if (actual != expected) {
+ console.log("BIP44 purpose field generates incorrect address");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+ });
+});
+},
+
// BIP44 coin field changes address list
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "1F6dB2djQYrxoyfZZmfr6D5voH8GkJTghk";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ waitForGenerate(function() {
+ // change the bip44 purpose field to 45
+ page.evaluate(function() {
+ $("#bip44 .coin").val("1");
+ $("#bip44 .coin").trigger("input");
+ });
+ waitForGenerate(function() {
+ // check the address for the new derivation path
+ var actual = page.evaluate(function() {
+ return $(".address:first").text();
+ });
+ if (actual != expected) {
+ console.log("BIP44 coin field generates incorrect address");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+ });
+});
+},
+
// BIP44 account field changes address list
-// BIP44 external/internal field changes address list
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "1Nq2Wmu726XHCuGhctEtGmhxo3wzk5wZ1H";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ waitForGenerate(function() {
+ // change the bip44 purpose field to 45
+ page.evaluate(function() {
+ $("#bip44 .account").val("1");
+ $("#bip44 .account").trigger("input");
+ });
+ waitForGenerate(function() {
+ // check the address for the new derivation path
+ var actual = page.evaluate(function() {
+ return $(".address:first").text();
+ });
+ if (actual != expected) {
+ console.log("BIP44 account field generates incorrect address");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+ });
+});
+},
+
+// BIP44 change field changes address list
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ var expected = "1KAGfWgqfVbSSXY56fNQ7YnhyKuoskHtYo";
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability");
+ $(".phrase").trigger("input");
+ });
+ waitForGenerate(function() {
+ // change the bip44 purpose field to 45
+ page.evaluate(function() {
+ $("#bip44 .change").val("1");
+ $("#bip44 .change").trigger("input");
+ });
+ waitForGenerate(function() {
+ // check the address for the new derivation path
+ var actual = page.evaluate(function() {
+ return $(".address:first").text();
+ });
+ if (actual != expected) {
+ console.log("BIP44 change field generates incorrect address");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+ });
+});
+},
+
+// TODO finish these tests
// BIP32 derivation path can be set
// BIP32 can use hardened derivation paths
];
console.log("Running tests...");
+tests = shuffle(tests);
next();