+// End of tests ported from old suit, so no more comments above each test now
+
+it('Can generate more addresses from a custom index', function(done) {
+ var expectedIndexes = [
+ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
+ 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
+ ];
+ driver.findElement(By.css('.phrase'))
+ .sendKeys("abandon abandon ability");
+ driver.sleep(generateDelay).then(function() {
+ // Set start of next lot of rows to be from index 40
+ // which means indexes 20-39 will not be in the table.
+ driver.findElement(By.css('.more-rows-start-index'))
+ .sendKeys("40");
+ driver.findElement(By.css('.more'))
+ .click();
+ driver.sleep(generateDelay).then(function() {
+ // Check actual indexes in the table match the expected pattern
+ driver.findElements(By.css(".index"))
+ .then(function(els) {
+ expect(els.length).toBe(expectedIndexes.length);
+ var testRowAtIndex = function(i) {
+ if (i >= expectedIndexes.length) {
+ done();
+ }
+ else {
+ els[i].getText()
+ .then(function(actualPath) {
+ var noHardened = actualPath.replace(/'/g, "");
+ var pathBits = noHardened.split("/")
+ var lastBit = pathBits[pathBits.length-1];
+ var actualIndex = parseInt(lastBit);
+ var expectedIndex = expectedIndexes[i];
+ expect(actualIndex).toBe(expectedIndex);
+ testRowAtIndex(i+1);
+ });
+ }
+ }
+ testRowAtIndex(0);
+ });
+ });
+ });
+});
+
+it('Can generate BIP141 addresses with P2WPKH-in-P2SH semanitcs', function(done) {
+ // Sourced from BIP49 official test specs
+ driver.findElement(By.css('#bip141-tab a'))
+ .click();
+ driver.findElement(By.css('.bip141-path'))
+ .clear();
+ driver.findElement(By.css('.bip141-path'))
+ .sendKeys("m/49'/1'/0'/0");
+ selectNetwork("BTC - Bitcoin Testnet");
+ driver.findElement(By.css(".phrase"))
+ .sendKeys("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about");
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2");
+ 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
+ // https://github.com/bitcoinjs/bitcoinjs-lib/blob/9c8503cab0c6c30a95127042703bc18e8d28c76d/test/integration/addresses.js#L50
+ // so whilst not directly comparable, substituting the private key produces
+ // identical results between this tool and the bitcoinjs-lib test.
+ // Private key generated is:
+ // L3L8Nu9whawPBNLGtFqDhKut9DKKfG3CQoysupT7BimqVCZsLFNP
+ driver.findElement(By.css('#bip141-tab a'))
+ .click();
+ // Choose P2WPKH
+ driver.executeScript(function() {
+ $(".bip141-semantics option[selected]").removeAttr("selected");
+ $(".bip141-semantics option").filter(function(i,e) {
+ return $(e).html() == "P2WPKH";
+ }).prop("selected", true);
+ $(".bip141-semantics").trigger("change");
+ });
+ driver.findElement(By.css(".phrase"))
+ .sendKeys("abandon abandon ability");
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("bc1qfwu6a5a3evygrk8zvdxxvz4547lmpyx5vsfxe9");
+ done();
+ });
+ });
+});
+
+it('Shows the entropy used by the PRNG when clicking generate', function(done) {
+ driver.findElement(By.css('.generate')).click();
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('.entropy'))
+ .getAttribute("value")
+ .then(function(entropy) {
+ expect(entropy).not.toBe("");
+ done();
+ });
+ });
+});
+
+it('Shows the index of each word in the mnemonic', function(done) {
+ driver.findElement(By.css('.phrase'))
+ .sendKeys("abandon abandon ability");
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('.use-entropy'))
+ .click();
+ driver.findElement(By.css('.word-indexes'))
+ .getText()
+ .then(function(indexes) {
+ expect(indexes).toBe("0, 0, 1");
+ done();
+ });
+ });
+});
+
+it('Shows the derivation path for bip84 tab', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('#bip84 .path'))
+ .getAttribute("value")
+ .then(function(path) {
+ expect(path).toBe("m/84'/0'/0'/0");
+ done();
+ })
+ });
+});
+
+it('Shows the extended private key for bip84 tab', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('.extended-priv-key'))
+ .getAttribute("value")
+ .then(function(path) {
+ expect(path).toBe("zprvAev3RKrZ3QVKiUFCfdeMRen1BPDJgdNt1XpxiDy8acSs4kkAGTCvq7HeRYRNNpo8EtEjCFQBWavJwtCUR29y4TUCH4X5RXMcyq48uN8y9BP");
+ done();
+ })
+ });
+});
+
+it('Shows the extended public key for bip84 tab', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('.extended-pub-key'))
+ .getAttribute("value")
+ .then(function(path) {
+ expect(path).toBe("zpub6suPpqPSsn3cvxKfmfBMnnijjR3o666jNkkZWcNk8wyqwZ5JozXBNuc8Gs7DB3uLwTDvGVTspVEAUQcEjKF3pZHgywVbubdTqbXTUg7usyx");
+ done();
+ })
+ });
+});
+
+it('Changes the address list if bip84 account is changed', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('#bip84 .account'))
+ .sendKeys('1');
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("bc1qp7vv669t2fy965jdzvqwrraana89ctd5ewc662");
+ done();
+ });
+ });
+});
+
+it('Changes the address list if bip84 change is changed', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('#bip84 .change'))
+ .sendKeys('1');
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("bc1qr39vj6rh06ff05m53uxq8uazehwhccswylhrs2");
+ done();
+ });
+ });
+});
+
+it('Passes the official BIP84 test spec for rootpriv', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css(".root-key"))
+ .getAttribute("value")
+ .then(function(rootKey) {
+ expect(rootKey).toBe("zprvAWgYBBk7JR8Gjrh4UJQ2uJdG1r3WNRRfURiABBE3RvMXYSrRJL62XuezvGdPvG6GFBZduosCc1YP5wixPox7zhZLfiUm8aunE96BBa4Kei5");
+ done();
+ })
+ });
+});
+
+it('Passes the official BIP84 test spec for account 0 xprv', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css("#bip84 .account-xprv"))
+ .getAttribute("value")
+ .then(function(rootKey) {
+ expect(rootKey).toBe("zprvAdG4iTXWBoARxkkzNpNh8r6Qag3irQB8PzEMkAFeTRXxHpbF9z4QgEvBRmfvqWvGp42t42nvgGpNgYSJA9iefm1yYNZKEm7z6qUWCroSQnE");
+ done();
+ })
+ });
+});
+
+it('Passes the official BIP84 test spec for account 0 xpub', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css("#bip84 .account-xpub"))
+ .getAttribute("value")
+ .then(function(rootKey) {
+ expect(rootKey).toBe("zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs");
+ done();
+ })
+ });
+});
+
+it('Passes the official BIP84 test spec for account 0 first address', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu");
+ done();
+ });
+ });
+});
+
+it('Passes the official BIP84 test spec for account 0 first change address', function(done) {
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
+ driver.findElement(By.css('#bip84 .change'))
+ .sendKeys('1');
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el");
+ done();
+ });
+ });
+});
+
+it('Can display the table as csv', function(done) {
+ var headings = "path,address,public key,private key";
+ var row1 = "m/44'/0'/0'/0/0,1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug,033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3,L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE";
+ var row20 = "m/44'/0'/0'/0/19,1KhBy28XLAciXnnRvm71PvQJaETyrxGV55,02b4b3e396434d8cdd20c03ac4aaa07387784d5d867b75987f516f5705ee68cb3a,L4GrDrjReMsCAu5DkLXn79jSb95qR7Zfx7eshybCQZ1qL32MXJab";
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('.csv'))
+ .getAttribute("value")
+ .then(function(csv) {
+ expect(csv).toContain(headings);
+ expect(csv).toContain(row1);
+ expect(csv).toContain(row20);
+ done();
+ });
+ });
+});
+