X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests.js;h=914be245532a28eb921bf3e36ec8207b78a60204;hb=1b12b2f5f12b32a2ed6e69ff77f10b889b383e97;hp=3518aa04f601a6be921e1fee11cc06f167733586;hpb=558ef9ac0568b37c2167e94de2ac6c30d8110936;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/tests.js b/tests.js index 3518aa0..914be24 100644 --- a/tests.js +++ b/tests.js @@ -1166,6 +1166,56 @@ page.open(url, function(status) { }); }, +// Public key is shown +function() { +page.open(url, function(status) { + var expected = "033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3"; + // set the phrase + page.evaluate(function() { + $(".phrase").val("abandon abandon ability").trigger("input"); + }); + // get the address + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".pubkey:first").text(); + }); + if (actual != expected) { + console.log("Public key is not shown"); + console.log("Expected: " + expected); + console.log("Got: " + actual); + fail(); + } + next(); + }); +}); +}, + +// Public key visibility can be toggled +function() { +page.open(url, function(status) { + // set the phrase + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + }); + waitForGenerate(function() { + // toggle public key visibility + page.evaluate(function() { + $(".public-key-toggle").click(); + }); + // check the public key is not visible + var isInvisible = page.evaluate(function() { + return $(".pubkey:first span").hasClass("invisible"); + }); + if (!isInvisible) { + console.log("Toggled public key is visible"); + fail(); + } + next(); + }); +}); +}, + // Private key is shown function() { page.open(url, function(status) { @@ -1566,7 +1616,7 @@ page.open(url, function(status) { }, // Github Issue 11: Default word length is 15 -// https://github.com/dcpos/bip39/issues/11 +// https://github.com/iancoleman/bip39/issues/11 function() { page.open(url, function(status) { // get the word length @@ -1583,7 +1633,7 @@ page.open(url, function(status) { // Github Issue 12: Generate more rows with private keys hidden -// https://github.com/dcpos/bip39/issues/12 +// https://github.com/iancoleman/bip39/issues/12 function() { page.open(url, function(status) { // set the phrase @@ -1626,7 +1676,7 @@ page.open(url, function(status) { }, // Github Issue 19: Mnemonic is not sensitive to whitespace -// https://github.com/dcpos/bip39/issues/19 +// https://github.com/iancoleman/bip39/issues/19 function() { page.open(url, function(status) { // set the phrase @@ -1653,7 +1703,7 @@ page.open(url, function(status) { }, // Github Issue 23: Part 1: Use correct derivation path when changing tabs -// https://github.com/dcpos/bip39/issues/23 +// https://github.com/iancoleman/bip39/issues/23 function() { page.open(url, function(status) { // 1) and 2) set the phrase @@ -1701,7 +1751,7 @@ page.open(url, function(status) { }, // Github Issue 23 Part 2: Coin selection in derivation path -// https://github.com/dcpos/bip39/issues/23#issuecomment-238011920 +// https://github.com/iancoleman/bip39/issues/23#issuecomment-238011920 function() { page.open(url, function(status) { // set the phrase @@ -1732,7 +1782,7 @@ page.open(url, function(status) { }, // Github Issue 26: When using a Root key derrived altcoins are incorrect -// https://github.com/dcpos/bip39/issues/26 +// https://github.com/iancoleman/bip39/issues/26 function() { page.open(url, function(status) { // 1) 2) and 3) set the root key @@ -1762,6 +1812,185 @@ page.open(url, function(status) { }); }, +// Selecting a language with no existing phrase should generate a phrase in +// that language. +function() { +page.open(url, function(status) { + // Select a language + // Need to manually simulate hash being set due to quirk between + // 'click' event triggered by javascript vs triggered by mouse. + // Perhaps look into page.sendEvent + // http://phantomjs.org/api/webpage/method/send-event.html + page.evaluate(function() { + window.location.hash = "#japanese"; + $("a[href='#japanese']").trigger("click"); + }); + waitForGenerate(function() { + // Check the mnemonic is in Japanese + var phrase = page.evaluate(function() { + return $(".phrase").val(); + }); + if (phrase.length <= 0) { + console.log("No Japanese phrase generated"); + fail(); + } + if (phrase.charCodeAt(0) < 128) { + console.log("First character of Japanese phrase is ascii"); + console.log("Phrase: " + phrase); + fail(); + } + next(); + }); +}); +}, + +// Selecting a language with existing phrase should update the phrase to use +// that language. +function() { +page.open(url, function(status) { + // Set the phrase to an English phrase. + page.evaluate(function() { + $(".phrase").val("abandon abandon ability").trigger("input"); + }); + waitForGenerate(function() { + // Change to Italian + // Need to manually simulate hash being set due to quirk between + // 'click' event triggered by javascript vs triggered by mouse. + // Perhaps look into page.sendEvent + // http://phantomjs.org/api/webpage/method/send-event.html + page.evaluate(function() { + window.location.hash = "#italian"; + $("a[href='#italian']").trigger("click"); + }); + waitForGenerate(function() { + // Check only the language changes, not the phrase + var expected = "abaco abaco abbaglio"; + var actual = page.evaluate(function() { + return $(".phrase").val(); + }); + if (actual != expected) { + console.log("Changing language with existing phrase"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + // Check the address is correct + var expected = "1Dz5TgDhdki9spa6xbPFbBqv5sjMrx3xgV"; + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("Changing language generates incorrect address"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); + }); +}); +}, + +// Suggested replacement for erroneous word in non-English language +function() { +page.open(url, function(status) { + // Set an incorrect phrase in Italian + page.evaluate(function() { + $(".phrase").val("abaco abaco zbbaglio").trigger("input"); + }); + waitForFeedback(function() { + // Check the suggestion is correct + var feedback = page.evaluate(function() { + return $(".feedback").text(); + }); + if (feedback.indexOf("did you mean abbaglio?") < 0) { + console.log("Incorrect Italian word does not show suggested replacement"); + console.log("Error: " + error); + fail(); + } + next(); + }); +}); +}, + + +// Japanese word does not break across lines. +// Point 2 from +// https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese +function() { +page.open(url, function(status) { + hasWordBreakCss = page.content.indexOf("word-break: keep-all;") > -1; + if (!hasWordBreakCss) { + console.log("Japanese words can break across lines mid-word"); + console.log("Check CSS for '.phrase { word-break: keep-all; }'"); + fail(); + } + // Run the next test + next(); +}); +}, + +// Language can be specified at page load using hash value in url +function() { +page.open(url, function(status) { + // Set the page hash as if it were on a fresh page load + page.evaluate(function() { + window.location.hash = "#japanese"; + }); + // Generate a random phrase + page.evaluate(function() { + $(".generate").trigger("click"); + }); + waitForGenerate(function() { + // Check the phrase is in Japanese + var phrase = page.evaluate(function() { + return $(".phrase").val(); + }); + if (phrase.length <= 0) { + console.log("No phrase generated using url hash"); + fail(); + } + if (phrase.charCodeAt(0) < 128) { + console.log("Language not detected from url hash on page load."); + console.log("Phrase: " + phrase); + fail(); + } + next(); + }); +}); +}, + +// If you wish to add more tests, do so here... + +// Here is a blank test template +/* + +function() { +page.open(url, function(status) { + // Do something on the page + page.evaluate(function() { + $(".phrase").val("abandon abandon ability").trigger("input"); + }); + waitForGenerate(function() { + // Check the result of doing the thing + var expected = "1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug"; + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("A specific message about what failed"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + // Run the next test + next(); + }); +}); +}, + +*/ + ]; console.log("Running tests...");