X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests.js;h=c0f7df78377972a221f6707c322c254e69aef081;hb=fe8f2d140d9c9e260ebeab7135aa5197b27df406;hp=2e2e38bc7ecd0d642f3da71da3ffb56cb7c4f094;hpb=daab55dc613a1eef22463356eba1a742cb814cb2;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/tests.js b/tests.js index 2e2e38b..c0f7df7 100644 --- a/tests.js +++ b/tests.js @@ -902,6 +902,186 @@ page.open(url, function(status) { }); }, +// Network can be set to myriadcoin +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "MJEswvRR46wh9BoiVj9DzKYMBkCramhoBV"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "XMY - Myriadcoin"; + }).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("Myriadcoin address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to pivx +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "DBxgT7faCuno7jmtKuu6KWCiwqsVPqh1tS"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "PIVX - PIVX"; + }).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("PIVX address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to pivx testnet +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "yB5U384n6dGkVE3by5y9VdvHHPwPg68fQj"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "PIVX - PIVX 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("PIVX Testnet address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to maza +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "MGW4Bmi2NEm4PxSjgeFwhP9vg18JHoRnfw"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "MAZA - Maza"; + }).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("Maza address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to fujicoin +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "FgiaLpG7C99DyR4WnPxXedRVHXSfKzUDhF"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "FJC - Fujicoin"; + }).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("Fujicoin address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Network can be set to nubits +function() { +page.open(url, function(status) { + // set the phrase and coin + var expected = "BLxkabXuZSJSdesLD7KxZdqovd4YwyBTU6"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "USNBT - NuBits"; + }).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("NuBits 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) { @@ -4030,6 +4210,231 @@ page.open(url, function(status) { }); }, +// github issue 43 +// Cleared mnemonic and root key still allows addresses to be generated +// https://github.com/iancoleman/bip39/issues/43 +function() { +page.open(url, function(status) { + // set the phrase + page.evaluate(function() { + $("#bip49-tab a").click(); + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + }); + waitForGenerate(function() { + // clear the mnemonic and root key + page.evaluate(function() { + $(".phrase").val(""); + $(".phrase").trigger("input"); + $(".root-key").val(""); + $(".root-key").trigger("input"); + $(".more").click(); + }); + waitForFeedback(function() { + // check there are no addresses shown + var addressCount = page.evaluate(function() { + return $(".address").length; + }); + if (addressCount != 0) { + console.log("Clearing mnemonic should not allow addresses to be generated"); + fail(); + } + next(); + }); + }); +}); +}, + +// Github issue 95 +// error trying to generate addresses from xpub with hardened derivation +function() { +page.open(url, function(status) { + // set the phrase + page.evaluate(function() { + // Use bip32 tab with hardened addresses + $(".hardened-addresses").prop("checked", true); + $("#bip32-tab a").click(); + // 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 the error message shows + 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 addresses does not show feedback"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Litecoin uses xprv by default, and can optionally be set to ltpv +// github issue 96 +// https://github.com/iancoleman/bip39/issues/96 +// Issue with extended keys on Litecoin +function() { +page.open(url, function(status) { + // set the phrase and coin + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "LTC - Litecoin"; + }).prop("selected", true); + $(".network").trigger("change"); + $(".phrase").trigger("input"); + }); + // check the extended key is generated correctly + waitForGenerate(function() { + var expected = "xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi"; + var actual = page.evaluate(function() { + return $(".root-key").val(); + }); + if (actual != expected) { + console.log("Litecoin root key does not default to xprv"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + // set litecoin to use ltub + page.evaluate(function() { + $(".addresses").empty(); + $(".litecoin-use-ltub").prop("checked", true); + $(".litecoin-use-ltub").trigger("change"); + }); + waitForGenerate(function() { + var expected = "Ltpv71G8qDifUiNesiPqf6h5V6eQ8ic77oxQiYtawiACjBEx3sTXNR2HGDGnHETYxESjqkMLFBkKhWVq67ey1B2MKQXannUqNy1RZVHbmrEjnEU"; + var actual = page.evaluate(function() { + return $(".root-key").val(); + }); + if (actual != expected) { + console.log("Litecoin root key cannot be set to use ltub"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); + }); +}); +}, + +// BIP32 tab can use P2WPKH Nested In P2SH +// github issue 91 part 2 +// https://github.com/iancoleman/bip39/issues/91 +// generate new addresses from xpub? +function() { +page.open(url, function(status) { + // set the xpub and coin and select bip32 tab with p2wpkh addresses + page.evaluate(function() { + // use p2wpkh addresses + $(".p2wpkh-nested-in-p2sh").prop("checked", true); + // use bip32 tab + $("#bip32-tab a").click(); + // use testnet + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "BTC - Bitcoin Testnet"; + }).prop("selected", true); + $(".network").trigger("change"); + // Set root xpub to BIP49 official test vector account 0 + $(".root-key").val("tpubDD7tXK8KeQ3YY83yWq755fHY2JW8Ha8Q765tknUM5rSvjPcGWfUppDFMpQ1ScziKfW3ZNtZvAD7M3u7bSs7HofjTD3KP3YxPK7X6hwV8Rk2"); + $(".root-key").trigger("input"); + }); + // check the address is generated correctly + waitForGenerate(function() { + var expected = "2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2"; + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("BIP32 tab cannot generate P2WPKH Nested In P2SH addresses"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// github issue 99 +// https://github.com/iancoleman/bip39/issues/99#issuecomment-327094159 +// "warn me emphatically when they have detected invalid input" to the entropy field +// A warning is shown when entropy is filtered and discarded +function() { +page.open(url, function(status) { + // use entropy + page.evaluate(function() { + $(".use-entropy").prop("checked", true).trigger("change"); + $(".entropy").val("00000000 00000000 00000000 00000000").trigger("input"); + }); + // check the filter warning does not show + waitForGenerate(function() { + var warningIsHidden = page.evaluate(function() { + return $(".entropy-container .filter-warning").hasClass("hidden"); + }); + if (!warningIsHidden) { + console.log("Entropy filter warning is showing when it should not"); + fail(); + } + page.evaluate(function() { + $(".entropy").val("10000000 zxcvbn 00000000 00000000 00000000").trigger("input"); + }); + // check the filter warning shows + waitForEntropyFeedback(function() { + var warningIsHidden = page.evaluate(function() { + return $(".entropy-container .filter-warning").hasClass("hidden"); + }); + if (warningIsHidden) { + console.log("Entropy filter warning is not showing when it should"); + fail(); + } + next(); + }); + }); +}); +}, + +// Bitcoin Cash address can be set to use bitpay format +function() { +page.open(url, function(status) { + // set the phrase and coin and address format + var expected = "CZnpA9HPmvhuhLLPWJP8rNDpLUYXy1LXFk"; + page.evaluate(function() { + $(".use-bitpay-addresses").prop("checked", true); + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "BCH - Bitcoin Cash"; + }).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("Bitcoin Cash address is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + // If you wish to add more tests, do so here... // Here is a blank test template