X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests.js;h=6d4702aa0e5a207210f8a90e35c0b7423e94ce63;hb=81f35b5e6643d9ac046ee8f4a5c3b4308ea03ceb;hp=d5a73f6cee83cf1939b08ddfea962184b6952e2d;hpb=c554e6ff5c2c543997841c0fb0a506262843e8df;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/tests.js b/tests.js index d5a73f6..6d4702a 100644 --- a/tests.js +++ b/tests.js @@ -4,7 +4,7 @@ var page = require('webpage').create(); var url = 'src/index.html'; -var testMaxTime = 10000; +var testMaxTime = 20000; page.viewportSize = { width: 1024, @@ -280,7 +280,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=1]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Bitcoin Testnet"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -308,7 +310,39 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=2]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Litecoin"; + }).prop("selected", true); + $(".network").trigger("change"); + }); + // check the address is generated correctly + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("Litecoin address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to ripple +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "rLTFnqbmCVPGx6VfaygdtuKWJgcN4v1zRS"; + page.evaluate(function() { + $(".phrase").val("ill clump only blind unit burden thing track silver cloth review awake useful craft whale all satisfy else trophy sunset walk vanish hope valve"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "Ripple"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -336,7 +370,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=3]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Dogecoin"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -364,7 +400,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=4]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "ShadowCash"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -392,7 +430,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=5]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "ShadowCash Testnet"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -420,7 +460,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=6]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Viacoin"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -448,7 +490,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=7]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Viacoin Testnet"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -476,7 +520,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=8]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Jumbucks"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -504,7 +550,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=9]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "CLAM"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -532,7 +580,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=10]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "DASH"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -551,6 +601,36 @@ page.open(url, function(status) { }); }, +// Network can be set to game +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "GSMY9bAp36cMR4zyT4uGVS7GFjpdXbao5Q"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "GAME"; + }).prop("selected", true); + $(".network").trigger("change"); + }); + // check the address is generated correctly + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("GAME address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + // Network can be set to namecoin function() { page.open(url, function(status) { @@ -560,7 +640,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=11]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Namecoin"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -588,7 +670,9 @@ page.open(url, function(status) { $(".phrase").val("abandon abandon ability"); $(".phrase").trigger("input"); $(".network option[selected]").removeAttr("selected"); - $(".network option[value=12]").prop("selected", true); + $(".network option").filter(function() { + return $(this).html() == "Peercoin"; + }).prop("selected", true); $(".network").trigger("change"); }); // check the address is generated correctly @@ -607,6 +691,128 @@ page.open(url, function(status) { }); }, +// Network can be set to ethereum +function() { + +page.open(url, function(status) { + + // set the phrase and coin + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "Ethereum"; + }).prop("selected", true); + $(".network").trigger("change"); + }); + waitForGenerate(function() { + // check the address is generated correctly + // this value comes from + // https://www.myetherwallet.com/#view-wallet-info + // Unusual capitalization is due to checksum + var expected = "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772"; + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("Ethereum address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + // check the private key is correct + // this private key can be imported into + // https://www.myetherwallet.com/#view-wallet-info + // and it should correlate to the address above + var expected = "8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7"; + var actual = page.evaluate(function() { + return $(".privkey:first").text(); + }); + if (actual != expected) { + console.log("Ethereum privkey is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + // check the public key is correct + // TODO + // don't have any third-party source to generate the expected value + //var expected = "?"; + //var actual = page.evaluate(function() { + // return $(".pubkey:first").text(); + //}); + //if (actual != expected) { + // console.log("Ethereum privkey is incorrect"); + // console.log("Expected: " + expected); + // console.log("Actual: " + actual); + // fail(); + //} + next(); + }); +}); +}, + +// Network can be set to Slimcoin +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "SNzPi1CafHFm3WWjRo43aMgiaEEj3ogjww"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "Slimcoin"; + }).prop("selected", true); + $(".network").trigger("change"); + }); + // check the address is generated correctly + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("Slimcoin address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to Slimcointn +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "n3nMgWufTek5QQAr6uwMhg5xbzj8xqc4Dq"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "Slimcoin Testnet"; + }).prop("selected", true); + $(".network").trigger("change"); + }); + // check the address is generated correctly + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("Slimcoin testnet address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + // BIP39 seed is set from phrase function() { page.open(url, function(status) { @@ -1562,6 +1768,31 @@ page.open(url, function(status) { }); }, +// 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) { @@ -1753,7 +1984,10 @@ page.open(url, function(status) { waitForGenerate(function() { // 4) switch from bitcoin to litecoin page.evaluate(function() { - $(".network").val("2").trigger("change"); + $(".network option").filter(function() { + return $(this).html() == "Litecoin"; + }).prop("selected", true); + $(".network").trigger("change"); }); waitForGenerate(function() { // 5) Check derivation path is displayed correctly @@ -1796,7 +2030,10 @@ page.open(url, function(status) { waitForGenerate(function() { // switch from bitcoin to clam page.evaluate(function() { - $(".network").val("9").trigger("change"); + $(".network option").filter(function() { + return $(this).html() == "CLAM"; + }).prop("selected", true); + $(".network").trigger("change"); }); waitForGenerate(function() { // check derivation path is displayed correctly @@ -1827,7 +2064,10 @@ page.open(url, function(status) { waitForGenerate(function() { // 4) switch from bitcoin to viacoin page.evaluate(function() { - $(".network").val("6").trigger("change"); + $(".network option").filter(function() { + return $(this).html() == "Viacoin"; + }).prop("selected", true); + $(".network").trigger("change"); }); waitForGenerate(function() { // 5) ensure the derived address is correct @@ -2155,10 +2395,10 @@ 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"; } } @@ -2190,24 +2430,24 @@ page.open(url, function(status) { // [ 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