]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - tests/spec/tests.js
Add bitcoin regtest params
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / tests / spec / tests.js
index 528f562eb0989233c42504b9277fe9600819afb5..260ff2c73a72b9eadfb44e6047387de18784bf14 100644 (file)
@@ -412,6 +412,13 @@ it('Allows selection of bitcoin testnet', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of bitcoin regtest', function(done) {
+    var params = {
+        selectText: "BTC - Bitcoin RegTest",
+        firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of litecoin', function(done) {
     var params = {
         selectText: "LTC - Litecoin",
@@ -434,6 +441,14 @@ it('Allows selection of ripple', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of casinocoin', function(done) {
+    var params = {
+        selectText: "CSC - CasinoCoin",
+        firstAddress: "c3P5EUb27Pzk9dcGt4s7zQDQj4sC6Y81mT",
+        phrase: "ill clump only blind unit burden thing track silver cloth review awake useful craft whale all satisfy else trophy sunset walk vanish hope valve",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of dogecoin', function(done) {
     var params = {
         selectText: "DOGE - Dogecoin",
@@ -724,6 +739,13 @@ it('Allows selection of Asiacoin', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of Aryacoin', function(done) {
+    var params = {
+        selectText: "ARYA - Aryacoin",
+        firstAddress: "Abr6gX25KaU9BpwD34UfsL3A4n89NvYYSf",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Auroracoin', function(done) {
     var params = {
         selectText: "AUR - Auroracoin",
@@ -766,6 +788,13 @@ it('Allows selection of Bitcoin Private', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of Bitcoin SV', function(done) {
+    var params = {
+        selectText: "BSV - BitcoinSV",
+        firstAddress: "1N4mgtE5yxifch9jWs7Sds6oVqxdy2t576",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Bitcoinz', function(done) {
     var params = {
         selectText: "BTCZ - Bitcoinz",
@@ -829,6 +858,13 @@ it('Allows selection of Compcoin', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of CPUchain', function(done) {
+    var params = {
+        selectText: "CPU - CPUchain",
+        firstAddress: "CWSpLpW7jS4mBHJnkz3mmL5s3yQMg93zK8",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Crave', function(done) {
     var params = {
         selectText: "CRAVE - Crave",
@@ -1165,6 +1201,13 @@ it('Allows selection of Putincoin', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of Rapids', function(done) {
+    var params = {
+        selectText: "RPD - Rapids",
+        firstAddress: "Ri8XxUdZaXS5LqxmFJcFEjFinkaMbmhSUp",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Ravencoin', function(done) {
     var params = {
         selectText: "RVN - Ravencoin",
@@ -1319,6 +1362,13 @@ it('Allows selection of Vpncoin', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of VeChain', function(done) {
+    var params = {
+        selectText: "VET - VeChain",
+        firstAddress: "0xdba55B1B6070f3a733D5eDFf35F0da4A00E455F2",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Whitecoin', function(done) {
     var params = {
         selectText: "XWC - Whitecoin",
@@ -1354,9 +1404,9 @@ it('Allows selection of Zclassic', function(done) {
     };
     testNetwork(done, params);
 });
-it('Allows selection of Zencash', function(done) {
+it('Allows selection of Horizen', function(done) {
     var params = {
-        selectText: "ZEN - Zencash",
+        selectText: "ZEN - Horizen",
         firstAddress: "znWh9XASyW2dZq5tck84wFjiwuqVysi7q3p",
     };
     testNetwork(done, params);
@@ -1389,6 +1439,14 @@ it('Allows selection of MIX', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of Monkey Project', function(done) {
+    var params = {
+        selectText: "MONK - Monkey Project",
+        firstAddress: "MnLrcnnUzKnf7TzufjRe5DLZqQJz18oYyu",
+    };
+    testNetwork(done, params);
+});
+
 it('Allows selection of Musicoin', function(done) {
     var params = {
         selectText: "MUSIC - Musicoin",
@@ -1419,11 +1477,18 @@ it('Allows selection of Callisto', function(done) {
 });
 it('Allows selection of HUSH', function(done) {
     var params = {
-        selectText: "HUSH - Hush",
+        selectText: "HUSH - Hush (Legacy)",
         firstAddress: "t1g6rLXUnJaiJuu4q4zmJjoa9Gk4fwKpiuA",
     };
     testNetwork(done, params);
 });
+it('Allows selection of HUSH3', function(done) {
+    var params = {
+        selectText: "HUSH - Hush3",
+        firstAddress: "RXWSQhwvw5jHPGP8bjwJhWoRnMLBnuPDKD",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of ExchangeCoin', function(done) {
     var params = {
         selectText: "EXCC - ExchangeCoin",
@@ -1522,17 +1587,52 @@ it('Allows selection of Ethersocial Network', function(done) {
     };
     testNetwork(done, params);
 });
-it('Allows selection of Monkey Project', function(done) {
+it('Allows selection of Stellar', function(done) {
     var params = {
-        selectText: "MONK - Monkey Project",
-        firstAddress: "MnLrcnnUzKnf7TzufjRe5DLZqQJz18oYyu",
+        selectText: "XLM - Stellar",
+        firstAddress: "GCUK3NYYUXA2QGN6KU5RR36WAKN3Y5EANZV65XNAWN4XM4CHQ3G4DMO2",
     };
     testNetwork(done, params);
 });
-it('Allows selection of Stellar', function(done) {
+it('Allows selection of Wagerr', function(done) {
     var params = {
-        selectText: "XLM - Stellar",
-        firstAddress: "GCUK3NYYUXA2QGN6KU5RR36WAKN3Y5EANZV65XNAWN4XM4CHQ3G4DMO2",
+        selectText: "WGR - Wagerr",
+        firstAddress: "WYiVgQU39VcQxcnacoCiaZHZZLjDCJoS95",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Groestlcoin', function(done) {
+    var params = {
+        selectText: "GRS - Groestlcoin",
+        firstAddress: "FZycsFvZ1eH1hbtyjBpAgJSukVw1bN6PBN",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Groestlcoin Testnet', function(done) {
+    var params = {
+        selectText: "GRS - Groestlcoin Testnet",
+        firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiygRPne9",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Elastos', function(done) {
+    var params = {
+        selectText: "ELA - Elastos",
+        firstAddress: "EMccDcsn3SwPDcfeQMf3w7utqi8ioWYtkg",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Energyweb', function(done) {
+    var params = {
+        selectText: "EWT - EnergyWeb",
+        firstAddress: "0x22171474844Fc7E8E99A3A69CCf1eDb5574FdD4c",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Thought', function(done) {
+    var params = {
+        selectText: "THT - Thought",
+        firstAddress: "4B1Bh9GibDarFQrhtYU8krpc7WSjgGfYvo",
     };
     testNetwork(done, params);
 });
@@ -2116,6 +2216,7 @@ it('Ignores excess whitespace in the mnemonic', function(done) {
 
 // Github Issue 23: Part 1: Use correct derivation path when changing tabs
 // https://github.com/iancoleman/bip39/issues/23
+// This test was failing for default timeout of 5000ms so changed it to +10s
 it('Uses the correct derivation path when changing tabs', function(done) {
     // 1) and 2) set the phrase
     driver.findElement(By.css('.phrase'))
@@ -2140,7 +2241,7 @@ it('Uses the correct derivation path when changing tabs', function(done) {
             });
         });
     });
-});
+}, generateDelay + 10000);
 
 // Github Issue 23 Part 2: Coin selection in derivation path
 // https://github.com/iancoleman/bip39/issues/23#issuecomment-238011920
@@ -3600,6 +3701,106 @@ it('Can generate BIP141 addresses with P2WPKH-in-P2SH semanitcs', function(done)
     });
 });
 
+it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) {
+    driver.findElement(By.css('#bip141-tab a'))
+        .click();
+    // Choose P2WSH
+    driver.executeScript(function() {
+        $(".bip141-semantics option[selected]").removeAttr("selected");
+        $(".bip141-semantics option").filter(function(i,e) {
+            return $(e).html() == "P2WSH (1-of-1 multisig)";
+        }).prop("selected", true);
+        $(".bip141-semantics").trigger("change");
+    });
+    driver.findElement(By.css(".phrase"))
+        .sendKeys("abandon abandon ability");
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css("#root-key"))
+        .getAttribute("value")
+        .then(function(rootKey) {
+            expect(rootKey).toBe("ZprvAhadJRUYsNge9uHspaggavxU1BUQ8QwfT4Z9UGq5sKF2mSt1mVy8EckLAaoBdmLHyP5eYDJ3LxtmzMNnLg2MRFe7QN2ueF4NCH4s5PrCDR6");
+            getFirstAddress(function(address) {
+                expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r");
+                done();
+            });
+        })
+    });
+});
+
+it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done) {
+    driver.findElement(By.css('#bip141-tab a'))
+        .click();
+    // Choose P2WSH-in-P2SH
+    driver.executeScript(function() {
+        $(".bip141-semantics option[selected]").removeAttr("selected");
+        $(".bip141-semantics option").filter(function(i,e) {
+            return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)";
+        }).prop("selected", true);
+        $(".bip141-semantics").trigger("change");
+    });
+    driver.findElement(By.css(".phrase"))
+        .sendKeys("abandon abandon ability");
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css("#root-key"))
+        .getAttribute("value")
+        .then(function(rootKey) {
+            expect(rootKey).toBe("YprvANkMzkodih9AJc6kzDu4NqrxqDKxBnxAXx2vgswCVJs9iM4nWqoZcZ6C9NqbdrgNZjxqnjhUtJYE74mDcycLd1xWY2LV4LEsvZ1DgqxuAKe");
+            getFirstAddress(function(address) {
+                expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G");
+                done();
+            });
+        })
+    });
+});
+
+it('Uses Vprv for bitcoin testnet p2wsh', function(done) {
+    selectNetwork("BTC - Bitcoin Testnet");
+    driver.findElement(By.css('#bip141-tab a'))
+        .click()
+    // Choose P2WSH
+    driver.executeScript(function() {
+        $(".bip141-semantics option[selected]").removeAttr("selected");
+        $(".bip141-semantics option").filter(function(i,e) {
+            return $(e).html() == "P2WSH (1-of-1 multisig)";
+        }).prop("selected", true);
+        $(".bip141-semantics").trigger("change");
+    });
+    driver.findElement(By.css('.phrase'))
+        .sendKeys('abandon abandon ability');
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css('.root-key'))
+            .getAttribute("value")
+            .then(function(path) {
+                expect(path).toBe("Vprv16YtLrHXxePM5ja5hXQbiJs5JKDAc4WcaXo5rZcrVMU6bMhUg1oY7fpPku3i819gvMcHvq1h8aELDsyfCEs19vj1Q3iDHRrESWyJConkoT1");
+                done();
+            })
+    });
+});
+
+it('Uses Uprv for bitcoin testnet p2wsh-in-p2sh', function(done) {
+    selectNetwork("BTC - Bitcoin Testnet");
+    driver.findElement(By.css('#bip141-tab a'))
+        .click()
+    // Choose P2WSH-in-P2SH
+    driver.executeScript(function() {
+        $(".bip141-semantics option[selected]").removeAttr("selected");
+        $(".bip141-semantics option").filter(function(i,e) {
+            return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)";
+        }).prop("selected", true);
+        $(".bip141-semantics").trigger("change");
+    });
+    driver.findElement(By.css('.phrase'))
+        .sendKeys('abandon abandon ability');
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css('.root-key'))
+            .getAttribute("value")
+            .then(function(path) {
+                expect(path).toBe("Uprv95RJn67y7xyEuRLHenkZYVUx9LkARJzAsVx3ZJMeyHMdVwosWD9K8JTe4Z1FeE4gwBVcnqKF3f82ZvJxkBxHS5E74fYnigxvqeke8ZV3Fp2");
+                done();
+            })
+    });
+});
+
 it('Can generate BIP141 addresses with P2WPKH semanitcs', function(done) {
     // This result tested against bitcoinjs-lib test spec for segwit address
     // using the first private key of this mnemonic and default path m/0
@@ -3998,6 +4199,27 @@ it('Shows litecoin BIP49 addresses', function(done) {
     });
 });
 
+it('Shows Groestlcoin BIP49 addresses', function(done) {
+    driver.findElement(By.css('.phrase'))
+        .sendKeys('abandon abandon ability');
+    selectNetwork("GRS - Groestlcoin");
+    driver.findElement(By.css('#bip49-tab a'))
+        .click()
+    // bip49 addresses are shown
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css('#bip49 .available'))
+            .getAttribute("class")
+            .then(function(classes) {
+                expect(classes).not.toContain("hidden");
+                // check first address
+                getFirstAddress(function(address) {
+                    expect(address).toBe("3HXSCZwCypLyixMsF4Z1sN49noJtrm8gnX");
+                    done();
+                });
+            });
+    });
+});
+
 it('Can use root keys to generate segwit table rows', function(done) {
     // segwit uses ypub / zpub instead of xpub but the root key should still
     // be valid regardless of the encoding used to import that key.
@@ -4017,4 +4239,101 @@ it('Can use root keys to generate segwit table rows', function(done) {
     });
 });
 
+// Pull Request 271
+// Allow converting mnemonic back to raw entropy value
+it('Converts mnemonics into raw entropy', function(done) {
+    driver.findElement(By.css('.phrase'))
+        .sendKeys('abandon abandon about');
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css('.use-entropy'))
+            .click();
+        driver.findElement(By.css('.entropy'))
+            .getAttribute("value")
+            .then(function(entropy) {
+                expect(entropy).toBe("00000001");
+                driver.findElement(By.css('.phrase'))
+                    .getAttribute("value")
+                    .then(function(phrase) {
+                        expect(phrase).toBe("abandon abandon about");
+                        done();
+                    });
+            });
+    });
+});
+
+// Pull Request 279
+// Added Split Phrase Card Output
+it('Shows split prase cards', function(done) {
+    var originalPhrase = "ugly charge strong giant once anchor capable october thumb inject dwarf legal alley mixture shoot";
+    var originalWords = originalPhrase.split(' ');
+    driver.findElement(By.css('.phrase'))
+        .sendKeys(originalPhrase);
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css('.phraseSplit'))
+            .getAttribute("value")
+            .then(function(cardsStr) {
+                var cards = cardsStr.split("\n");
+                expect(cards.length).toBe(3);
+                // test all 2-of-3 combos can be used to form full phrase
+                var combos = [[0,1],[0,2],[1,2]];
+                for (var i=0; i<combos.length; i++) {
+                    var combo = combos[i];
+                    var a = combo[0];
+                    var b = combo[1];
+                    var phrase = cards[a] + " " + cards[b];
+                    // check all original words are present
+                    for (var j=0; j<originalWords.length; j++) {
+                        var originalWord = originalWords[j];
+                        expect(phrase).toContain(originalWord);
+                    }
+                }
+                done();
+            });
+    });
+});
+
+// It allows manually specifying the entropy type
+it('Allows entropy type to be manually selected', function(done) {
+    driver.findElement(By.css('.use-entropy'))
+        .click();
+    // use decimal entropy
+    driver.findElement(By.css('.entropy'))
+        .sendKeys("91");
+    // manually change to binary entropy
+    driver.executeScript(function() {
+        $(".entropy-container input[value='binary']").click();
+    });
+    driver.sleep(entropyFeedbackDelay).then(function() {
+        driver.findElement(By.css('.entropy-container'))
+            .getText()
+            .then(function(text) {
+                // overide 91 to be just 1
+                var key = "Filtered Entropy";
+                var value = "1";
+                var reText = key + "\\s+" + value;
+                var re = new RegExp(reText);
+                expect(text).toMatch(re);
+                // overide automatic decimal to binary
+                var key = "Entropy Type";
+                var value = "binary";
+                var reText = key + "\\s+" + value;
+                var re = new RegExp(reText);
+                expect(text).toMatch(re);
+                // overide 2 events to 1
+                var key = "Event Count";
+                var value = 1;
+                var reText = key + "\\s+" + value;
+                var re = new RegExp(reText);
+                expect(text).toMatch(re);
+                // overide log2(10)*2 bits to 1 bit
+                var key = "Total Bits";
+                var value = 1;
+                var reText = key + "\\s+" + value;
+                var re = new RegExp(reText);
+                expect(text).toMatch(re);
+                done();
+            });
+    });
+});
+
 });