});
},
+// Github pull request 48
+// First four letters of word shows that word, not closest
+// since first four letters gives unique word in BIP39 wordlist
+// eg ille should show illegal, not idle
+function() {
+page.open(url, function(status) {
+ // set the incomplete word
+ page.evaluate(function() {
+ $(".phrase").val("ille").trigger("input");
+ });
+ // check there is a suggestion shown
+ waitForFeedback(function() {
+ var feedback = page.evaluate(function() {
+ return $(".feedback").text();
+ });
+ if (feedback.indexOf("did you mean illegal?") < 0) {
+ console.log("Start of word does not show correct suggestion");
+ console.log("Error: " + error);
+ fail();
+ }
+ next();
+ });
+});
+},
+
// Incorrect BIP32 root key shows error
function() {
page.open(url, function(status) {
return e.message;
}
// Leading zeros for card entropy as binary string.
- // Card entropy is hashed so 2c does not produce leading zeros.
+ // Card entropy is hashed so 2c does not necessarily produce leading zeros.
try {
- e = Entropy.fromString("4c");
- if (e.binaryStr != "0001") {
+ e = Entropy.fromString("2c");
+ if (e.binaryStr != "0010") {
return "Card entropy as binary has leading zeros";
}
}
// [ cards, binary ]
try {
var cards = [
- [ "ac", "0100" ],
- [ "acqs", "10111101" ],
- [ "acks", "11110000" ],
- [ "2cac", "11000010" ],
- [ "2c", "1000" ],
- [ "3d", "1111" ],
- [ "4h", "0011" ],
+ [ "ac", "0101" ],
+ [ "acqs", "11011100" ],
+ [ "acks", "01011100" ],
+ [ "2cac", "11111000" ],
+ [ "2c", "0010" ],
+ [ "3d", "0001" ],
+ [ "4h", "1001" ],
[ "5s", "1001" ],
- [ "6c", "1011" ],
- [ "7d", "1101" ],
+ [ "6c", "0000" ],
+ [ "7d", "0001" ],
[ "8h", "1011" ],
- [ "9s", "1010" ],
- [ "tc", "1101" ],
- [ "jd", "1101" ],
- [ "qh", "1100" ],
- [ "ks", "1111" ],
- [ "ks2c", "10000001" ],
- [ "KS2C", "10000001" ],
+ [ "9s", "0010" ],
+ [ "tc", "1001" ],
+ [ "jd", "1111" ],
+ [ "qh", "0010" ],
+ [ "ks", "0101" ],
+ [ "ks2c", "01010100" ],
+ [ "KS2C", "01010100" ],
];
for (var i=0; i<cards.length; i++) {
var card = cards[i][0];
});
},
+// github issue 40
+// BIP32 root key can be set as an xpub
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ page.evaluate(function() {
+ // set xpub for account 0 of bip44 for 'abandon abandon ability'
+ var bip44AccountXpub = "xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf";
+ $("#root-key").val(bip44AccountXpub);
+ $("#root-key").trigger("input");
+ });
+ waitForFeedback(function() {
+ page.evaluate(function() {
+ // Use bip32 tab
+ $("#bip32-tab a").click();
+ });
+ waitForGenerate(function() {
+ page.evaluate(function() {
+ // derive external addresses for this xpub
+ var firstAccountDerivationPath = "m/0";
+ $("#bip32-path").val(firstAccountDerivationPath);
+ $("#bip32-path").trigger("input");
+ });
+ waitForGenerate(function() {
+ // check the addresses are generated
+ var expected = "1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug";
+ var actual = page.evaluate(function() {
+ return $(".address:first").text();
+ });
+ if (actual != expected) {
+ console.log("xpub key does not generate addresses in table");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ // check the xprv key is not set
+ var expected = "NA";
+ var actual = page.evaluate(function() {
+ return $(".extended-priv-key").val();
+ });
+ if (actual != expected) {
+ console.log("xpub key as root shows derived bip32 xprv key");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ // check the private key is not set
+ var expected = "NA";
+ var actual = page.evaluate(function() {
+ return $(".privkey:first").text();
+ });
+ if (actual != expected) {
+ console.log("xpub key generates private key in addresses table");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+ });
+ });
+});
+},
+
+// github issue 40
+// xpub for bip32 root key will not work with hardened derivation paths
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ page.evaluate(function() {
+ // set xpub for account 0 of bip44 for 'abandon abandon ability'
+ var bip44AccountXpub = "xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf";
+ $("#root-key").val(bip44AccountXpub);
+ $("#root-key").trigger("input");
+ });
+ waitForFeedback(function() {
+ // Check feedback is correct
+ var expected = "Hardened derivation path is invalid with xpub key";
+ var actual = page.evaluate(function() {
+ return $(".feedback").text();
+ });
+ if (actual != expected) {
+ console.log("xpub key with hardened derivation path does not show feedback");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ // Check no addresses are shown
+ var expected = 0;
+ var actual = page.evaluate(function() {
+ return $(".addresses tr").length;
+ });
+ if (actual != expected) {
+ console.log("addresses still show after setting xpub key with hardened derivation path");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+});
+},
+
+// github issue 39
+// no root key shows feedback
+function() {
+page.open(url, function(status) {
+ // click the bip32 tab on fresh page
+ page.evaluate(function() {
+ $("#bip32-tab a").click();
+ });
+ waitForFeedback(function() {
+ // Check feedback is correct
+ var expected = "No root key";
+ var actual = page.evaluate(function() {
+ return $(".feedback").text();
+ });
+ if (actual != expected) {
+ console.log("Blank root key not detected");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ next();
+ });
+});
+},
+
+// Github issue 44
+// display error switching tabs while addresses are generating
+function() {
+page.open(url, function(status) {
+ // set the phrase
+ page.evaluate(function() {
+ $(".phrase").val("abandon abandon ability").trigger("input");
+ });
+ waitForGenerate(function() {
+ // set to generate 500 more addresses
+ // generate more addresses
+ // change tabs which should cancel the previous generating
+ page.evaluate(function() {
+ $(".rows-to-add").val("100");
+ $(".more").click();
+ $("#bip32-tab a").click();
+ });
+ // check the derivation paths are in order and of the right quantity
+ waitForGenerate(function() {
+ var paths = page.evaluate(function() {
+ return $(".index").map(function(i, e) {
+ return $(e).text();
+ });
+ });
+ for (var i=0; i<paths.length; i++) {
+ var expected = "m/0/" + i;
+ var actual = paths[i];
+ if (actual != expected) {
+ console.log("Path " + i + " is not in correct order");
+ console.log("Expected: " + expected);
+ console.log("Actual: " + actual);
+ fail();
+ }
+ }
+ if (paths.length != 20) {
+ console.log("Generation was not cancelled by new action");
+ fail();
+ }
+ next();
+ });
+ });
+});
+},
// If you wish to add more tests, do so here...