From ea2e2d4e1959b52616f7c64e69a7d3cd382b7814 Mon Sep 17 00:00:00 2001 From: "Ryan X. Charles" Date: Tue, 24 Jun 2014 08:36:32 -0700 Subject: [PATCH] run js-beautify on everything ...with two spaces. Command: js-beautify -s 2 -r [filename] --- API.js | 26 +-- Gruntfile.js | 4 +- app.js | 4 +- js/app.js | 3 +- js/controllers/addresses.js | 16 +- js/controllers/footer.js | 59 +++--- js/controllers/header.js | 31 ++-- js/controllers/import.js | 20 ++- js/controllers/send.js | 5 +- js/controllers/setup.js | 2 +- js/directives.js | 4 +- js/filters.js | 15 +- js/models/blockchain/Insight.js | 28 ++- js/models/core/PrivateKey.js | 36 ++-- js/models/core/PublicKeyRing.js | 130 +++++++------- js/models/core/TxProposals.js | 6 +- js/models/core/Wallet.js | 17 +- js/models/network/WebRTC.js | 112 ++++++------ js/models/storage/File.js | 4 +- js/models/storage/LocalPlain.js | 41 +++-- js/routes.js | 5 +- js/services/backupService.js | 2 +- js/services/controllerUtils.js | 4 +- js/services/isMobile.js | 10 +- js/services/notifications.js | 218 ++++++++++++----------- js/services/socket.js | 12 +- js/services/walletFactory.js | 1 - js/shell.js | 33 ++-- karma.conf.js | 2 +- launch.js | 13 +- server.js | 2 +- test/mocha.conf.js | 4 +- test/mocks/FakeNetwork.js | 16 +- test/mocks/FakeWallet.js | 4 +- test/test.API.js | 54 ++++-- test/test.AddressIndex.js | 52 +++--- test/test.Passphrase.js | 14 +- test/test.PrivateKey.js | 70 ++++---- test/test.PublicKeyRing.js | 199 ++++++++++++--------- test/test.Structure.js | 26 +-- test/test.blockchain.Insight.js | 41 +++-- test/test.network.WebRTC.js | 22 ++- test/test.storage.File.js | 66 +++++-- test/test.storage.LocalEncrypted.js | 44 +++-- test/test.storage.LocalPlain.js | 10 +- test/unit/controllers/controllersSpec.js | 7 +- test/unit/directives/directivesSpec.js | 6 +- test/unit/filters/filtersSpec.js | 35 ++-- test/unit/services/servicesSpec.js | 2 +- 49 files changed, 857 insertions(+), 680 deletions(-) diff --git a/API.js b/API.js index e5e36636c..dbfd9ae8e 100644 --- a/API.js +++ b/API.js @@ -6,7 +6,7 @@ var API = function(opts) { API.prototype._init = function(opts) { var self = this; - + opts = opts || {}; self.opts = opts; @@ -53,12 +53,12 @@ API.prototype._command = function(command, args, callback) { if (typeof self["_cmd_" + command] == 'function') { var f = API.prototype[command]; - if (f.argTypes[f.argTypes.length-1][1] == 'function') + if (f.argTypes[f.argTypes.length - 1][1] == 'function') return self["_cmd_" + command].apply(self, args.concat([callback])); else return callback(null, self["_cmd_" + command].apply(self, args)); }; - + return callback(new Error('invalid command')); }; @@ -66,9 +66,9 @@ API._checkArgTypes = function(command, args) { var f = API.prototype[command]; if (f.argTypes.length != args.length) { - + //if the function doesn't have a callback - if (!(f.argTypes.length == args.length + 1 && f.argTypes[f.argTypes.length-1][1] == 'function')) + if (!(f.argTypes.length == args.length + 1 && f.argTypes[f.argTypes.length - 1][1] == 'function')) return false; } @@ -98,7 +98,7 @@ API.prototype._cmd_echo = function(str, callback) { API.prototype.echo = decorate('echo', [ ['str', 'string'], ['callback', 'function'] - ]); +]); API.prototype._cmd_echoNumber = function(num, callback) { var self = this; @@ -109,7 +109,7 @@ API.prototype._cmd_echoNumber = function(num, callback) { API.prototype.echoNumber = decorate('echoNumber', [ ['num', 'number'], ['callback', 'function'] - ]); +]); API.prototype._cmd_echoObject = function(obj, callback) { var self = this; @@ -120,7 +120,7 @@ API.prototype._cmd_echoObject = function(obj, callback) { API.prototype.echoObject = decorate('echoObject', [ ['obj', 'object'], ['callback', 'function'] - ]); +]); /* API.prototype.getBalance = function(callback) { @@ -140,7 +140,7 @@ API.prototype._cmd_getArgTypes = function(command, callback) { if (command[0] == '_' || typeof API.prototype[command] != 'function') return callback(new Error('Invalid command')); - + var argTypes = API.prototype[command].argTypes; return callback(null, argTypes); @@ -149,7 +149,7 @@ API.prototype._cmd_getArgTypes = function(command, callback) { API.prototype.getArgTypes = decorate('getArgTypes', [ ['command', 'string'], ['callback', 'function'] - ]); +]); API.prototype._cmd_getCommands = function(callback) { var self = this; @@ -167,7 +167,7 @@ API.prototype._cmd_getCommands = function(callback) { API.prototype.getCommands = decorate('getCommands', [ ['callback', 'function'] - ]); +]); API.prototype._cmd_getWallets = function(callback) { var self = this; @@ -177,7 +177,7 @@ API.prototype._cmd_getWallets = function(callback) { API.prototype.getWallets = decorate('getWallets', [ ['callback', 'function'] - ]); +]); API.prototype._cmd_help = function(callback) { this._cmd_getCommands.apply(this, arguments); @@ -185,6 +185,6 @@ API.prototype._cmd_help = function(callback) { API.prototype.help = decorate('help', [ ['callback', 'function'] - ]); +]); module.exports = require('soop')(API); diff --git a/Gruntfile.js b/Gruntfile.js index 3951d93c1..809a2cc95 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -15,7 +15,7 @@ module.exports = function(grunt) { stderr: true }, command: grunt.option('target') === 'dev' ? - 'node ./util/build.js -d ' : 'node ./util/build.js ' + 'node ./util/build.js -d ' : 'node ./util/build.js ' } }, watch: { @@ -46,6 +46,6 @@ module.exports = function(grunt) { } }); - grunt.registerTask('default', ['shell','watch']); + grunt.registerTask('default', ['shell', 'watch']); }; diff --git a/app.js b/app.js index 08351a4f5..2c514a2fa 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,6 @@ var express = require('express'); -var http = require('http'); -var app = express(); +var http = require('http'); +var app = express(); app.start = function(port, callback) { diff --git a/js/app.js b/js/app.js index 703fcd1d5..624c12f0d 100644 --- a/js/app.js +++ b/js/app.js @@ -19,7 +19,7 @@ var log = function() { // From the bundle var copay = require('copay'); -var copayApp = window.copayApp = angular.module('copayApp',[ +var copayApp = window.copayApp = angular.module('copayApp', [ 'ngRoute', 'angularMoment', 'mm.foundation', @@ -34,4 +34,3 @@ angular.module('copayApp.filters', []); angular.module('copayApp.services', []); angular.module('copayApp.controllers', []); angular.module('copayApp.directives', []); - diff --git a/js/controllers/addresses.js b/js/controllers/addresses.js index 8e9e0a213..4efb31fa3 100644 --- a/js/controllers/addresses.js +++ b/js/controllers/addresses.js @@ -12,27 +12,27 @@ angular.module('copayApp.controllers').controller('AddressesController', controllerUtils.setSocketHandlers(); controllerUtils.updateAddressList(); $scope.loading = false; - },1); + }, 1); }); }; - $scope.selectAddress = function (addr) { + $scope.selectAddress = function(addr) { $scope.selectedAddr = addr; }; $rootScope.$watch('addrInfos', function() { $scope.addressList(); - }); + }); - $scope.addressList = function () { + $scope.addressList = function() { $scope.addresses = []; var addrInfos = $rootScope.addrInfos; if (addrInfos) { - for(var i=0;i 0 ) { + if ($rootScope.addrInfos.length > 0) { controllerUtils.updateBalance(function() { $rootScope.$digest(); }); diff --git a/js/controllers/import.js b/js/controllers/import.js index 2157b4f00..c3401862b 100644 --- a/js/controllers/import.js +++ b/js/controllers/import.js @@ -5,11 +5,14 @@ angular.module('copayApp.controllers').controller('ImportController', $scope.title = 'Import a backup'; var reader = new FileReader(); var _importBackup = function(encryptedObj) { - Passphrase.getBase64Async($scope.password, function(passphrase){ + Passphrase.getBase64Async($scope.password, function(passphrase) { walletFactory.import(encryptedObj, passphrase, function(err, w) { if (err) { $scope.loading = false; - $rootScope.$flashMessage = { message: err.errMsg || 'Wrong password', type: 'error'}; + $rootScope.$flashMessage = { + message: err.errMsg || 'Wrong password', + type: 'error' + }; $rootScope.$digest(); return; } @@ -43,7 +46,10 @@ angular.module('copayApp.controllers').controller('ImportController', $scope.import = function(form) { if (form.$invalid) { $scope.loading = false; - $rootScope.$flashMessage = { message: 'There is an error in the form. Please, try again', type: 'error'}; + $rootScope.$flashMessage = { + message: 'There is an error in the form. Please, try again', + type: 'error' + }; return; } @@ -53,7 +59,10 @@ angular.module('copayApp.controllers').controller('ImportController', if (!backupFile && !backupText) { $scope.loading = false; - $rootScope.$flashMessage = { message: 'Please, select your backup file or paste the text', type: 'error'}; + $rootScope.$flashMessage = { + message: 'Please, select your backup file or paste the text', + type: 'error' + }; $scope.loading = false; return; } @@ -62,8 +71,7 @@ angular.module('copayApp.controllers').controller('ImportController', if (backupFile) { reader.readAsBinaryString(backupFile); - } - else { + } else { _importBackup(backupText); } }; diff --git a/js/controllers/send.js b/js/controllers/send.js index 349d60d82..b6ba1c7d1 100644 --- a/js/controllers/send.js +++ b/js/controllers/send.js @@ -207,7 +207,7 @@ angular.module('copayApp.controllers').controller('SendController', templateUrl: 'addressBookModal.html', windowClass: 'tiny', controller: function($scope, $modalInstance) { - + $scope.submitAddressBook = function(form) { if (form.$invalid) { $rootScope.$flashMessage = { @@ -255,8 +255,7 @@ angular.module('copayApp.controllers').controller('SendController', }; $scope.topAmount = function() { - var maxSat = ($rootScope.availableBalance * config.unitToSatoshi).toFixed(0) - - bitcore.TransactionBuilder.FEE_PER_1000B_SAT; + var maxSat = ($rootScope.availableBalance * config.unitToSatoshi).toFixed(0) - bitcore.TransactionBuilder.FEE_PER_1000B_SAT; $scope.amount = maxSat / config.unitToSatoshi; }; }); diff --git a/js/controllers/setup.js b/js/controllers/setup.js index ce36e12ef..915e401c5 100644 --- a/js/controllers/setup.js +++ b/js/controllers/setup.js @@ -51,7 +51,7 @@ angular.module('copayApp.controllers').controller('SetupController', var updateRCSelect = function(n) { $scope.requiredCopayers = (valid_pairs[[parseInt(n / 2 + 1), n]] > 0 || config.networkName === 'testnet') ? - parseInt(n / 2 + 1) : 1; + parseInt(n / 2 + 1) : 1; $scope.RCValues = []; for (var m = 1; m <= n; m++) { if (valid_pairs[[m, n]] > 0 || config.networkName === 'testnet') { diff --git a/js/directives.js b/js/directives.js index c72ffc970..586a1ac31 100644 --- a/js/directives.js +++ b/js/directives.js @@ -125,7 +125,7 @@ angular.module('copayApp.directives') .directive('contact', function() { return { restrict: 'E', - link:function(scope, element, attrs) { + link: function(scope, element, attrs) { if (!scope.wallet) return; var address = attrs.address; @@ -137,7 +137,7 @@ angular.module('copayApp.directives') element.append(address); } } - }; + }; }) .directive('highlightOnChange', function() { return { diff --git a/js/filters.js b/js/filters.js index d5f5821e3..9668c71bf 100644 --- a/js/filters.js +++ b/js/filters.js @@ -1,11 +1,13 @@ 'use strict'; angular.module('copayApp.filters', []) - .filter('amTimeAgo', ['amMoment', function(amMoment) { - return function(input) { - return amMoment.preprocessDate(input).fromNow(); - }; - }]) + .filter('amTimeAgo', ['amMoment', + function(amMoment) { + return function(input) { + return amMoment.preprocessDate(input).fromNow(); + }; + } + ]) .filter('paged', function() { return function(elements) { if (elements) { @@ -28,5 +30,4 @@ angular.module('copayApp.filters', []) return addrs; }; - }) -; + }); diff --git a/js/models/blockchain/Insight.js b/js/models/blockchain/Insight.js index 4fa24ca5e..354a54242 100644 --- a/js/models/blockchain/Insight.js +++ b/js/models/blockchain/Insight.js @@ -168,15 +168,29 @@ Insight.prototype.checkActivity = function(addresses, cb) { if (!addresses) throw new Error('address must be set'); this.getTransactions(addresses, function onResult(txs) { - var flatArray = function (xss) { return xss.reduce(function(r, xs) { return r.concat(xs); }, []); }; - var getInputs = function (t) { return t.vin.map(function (vin) { return vin.addr }); }; - var getOutputs = function (t) { return flatArray( - t.vout.map(function (vout) { return vout.scriptPubKey.addresses; }) - );}; + var flatArray = function(xss) { + return xss.reduce(function(r, xs) { + return r.concat(xs); + }, []); + }; + var getInputs = function(t) { + return t.vin.map(function(vin) { + return vin.addr + }); + }; + var getOutputs = function(t) { + return flatArray( + t.vout.map(function(vout) { + return vout.scriptPubKey.addresses; + }) + ); + }; var activityMap = new Array(addresses.length); - var activeAddress = flatArray(txs.map(function(t) { return getInputs(t).concat(getOutputs(t)); })); - activeAddress.forEach(function (addr) { + var activeAddress = flatArray(txs.map(function(t) { + return getInputs(t).concat(getOutputs(t)); + })); + activeAddress.forEach(function(addr) { var index = addresses.indexOf(addr); if (index != -1) activityMap[index] = true; }); diff --git a/js/models/core/PrivateKey.js b/js/models/core/PrivateKey.js index 09411ab05..ff8b70e79 100644 --- a/js/models/core/PrivateKey.js +++ b/js/models/core/PrivateKey.js @@ -1,17 +1,17 @@ 'use strict'; -var imports = require('soop').imports(); -var bitcore = require('bitcore'); -var HK = bitcore.HierarchicalKey; -var WalletKey = bitcore.WalletKey; -var networks = bitcore.networks; -var util = bitcore.util; -var Structure = require('./Structure'); +var imports = require('soop').imports(); +var bitcore = require('bitcore'); +var HK = bitcore.HierarchicalKey; +var WalletKey = bitcore.WalletKey; +var networks = bitcore.networks; +var util = bitcore.util; +var Structure = require('./Structure'); function PrivateKey(opts) { opts = opts || {}; - this.network = opts.networkName === 'testnet' ? + this.network = opts.networkName === 'testnet' ? networks.testnet : networks.livenet; var init = opts.extendedPrivateKeyString || this.network.name; this.bip = opts.HK || new HK(init); @@ -81,15 +81,19 @@ PrivateKey.prototype.getForPaths = function(paths) { PrivateKey.prototype.getForPath = function(path) { var pk = this.privateKeyCache[path]; if (!pk) { - var derivedHK = this._getHK(path); + var derivedHK = this._getHK(path); pk = this.privateKeyCache[path] = derivedHK.eckey.private.toString('hex'); } - var wk = new WalletKey({network: this.network}); - wk.fromObj({priv: pk}); + var wk = new WalletKey({ + network: this.network + }); + wk.fromObj({ + priv: pk + }); return wk; }; -PrivateKey.prototype.get = function(index,isChange) { +PrivateKey.prototype.get = function(index, isChange) { var path = Structure.FullBranch(index, isChange); return this.getForPath(path); }; @@ -99,11 +103,11 @@ PrivateKey.prototype.getAll = function(receiveIndex, changeIndex) { throw new Error('Invalid parameters'); var ret = []; - for(var i=0;i this.addressBook[key].createdTs) { this.addressBook[key] = rcv[key]; hasChange = true; @@ -395,7 +394,7 @@ Wallet.prototype.sendAllTxProposals = function(recipients) { Wallet.prototype.sendTxProposal = function(ntxid, recipients) { preconditions.checkArgument(ntxid); preconditions.checkState(this.txProposals.txps[ntxid]); - this.log('### SENDING txProposal '+ntxid+' TO:', recipients || 'All', this.txProposals); + this.log('### SENDING txProposal ' + ntxid + ' TO:', recipients || 'All', this.txProposals); this.network.send(recipients, { type: 'txProposal', txProposal: this.txProposals.txps[ntxid].toObj(), @@ -771,7 +770,7 @@ Wallet.prototype.updateIndexes = function(callback) { Wallet.prototype.deriveAddresses = function(index, amout, isChange) { var ret = new Array(amout); - for(var i = 0; i < amout; i++) { + for (var i = 0; i < amout; i++) { ret[i] = this.publicKeyRing.getAddress(index + i, isChange).toString(); } return ret; @@ -791,7 +790,7 @@ Wallet.prototype.indexDiscovery = function(start, change, gap, cb) { // Optimize window to minimize the derivations. var scanWindow = (lastActive == -1) ? gap : gap - (scanIndex - lastActive) + 1; var addresses = self.deriveAddresses(scanIndex, scanWindow, change); - self.blockchain.checkActivity(addresses, function(err, actives){ + self.blockchain.checkActivity(addresses, function(err, actives) { if (err) throw err; // Check for new activities in the newlly scanned addresses @@ -804,7 +803,9 @@ Wallet.prototype.indexDiscovery = function(start, change, gap, cb) { next(); }); }, - function _while() { return hasActivity; }, + function _while() { + return hasActivity; + }, function _finnaly(err) { if (err) return cb(err); cb(null, lastActive); diff --git a/js/models/network/WebRTC.js b/js/models/network/WebRTC.js index 169bfe570..98e660a7a 100644 --- a/js/models/network/WebRTC.js +++ b/js/models/network/WebRTC.js @@ -1,10 +1,10 @@ 'use strict'; -var imports = require('soop').imports(); -var EventEmitter= imports.EventEmitter || require('events').EventEmitter; -var bitcore = require('bitcore'); -var util = bitcore.util; -var extend = require('util')._extend; +var imports = require('soop').imports(); +var EventEmitter = imports.EventEmitter || require('events').EventEmitter; +var bitcore = require('bitcore'); +var util = bitcore.util; +var extend = require('util')._extend; /* * Emits * 'connect' @@ -19,17 +19,17 @@ var extend = require('util')._extend; */ function Network(opts) { - var self = this; - opts = opts || {}; - this.apiKey = opts.apiKey || 'lwjd5qra8257b9'; - this.debug = opts.debug || 3; - this.maxPeers = opts.maxPeers || 10; + var self = this; + opts = opts || {}; + this.apiKey = opts.apiKey || 'lwjd5qra8257b9'; + this.debug = opts.debug || 3; + this.maxPeers = opts.maxPeers || 10; this.reconnectAttempts = opts.reconnectAttempts || 3; - this.sjclParams = opts.sjclParams || { - salt: 'f28bfb49ef70573c', - iter:500, - mode:'ccm', - ts:parseInt(64), + this.sjclParams = opts.sjclParams || { + salt: 'f28bfb49ef70573c', + iter: 500, + mode: 'ccm', + ts: parseInt(64), }; this.opts = {}; ['config', 'port', 'host', 'path', 'debug', 'key', 'secure'].forEach(function(k) { @@ -47,11 +47,11 @@ Network.prototype.cleanUp = function() { this.privkey = null; //TODO: hide privkey in a closure this.copayerId = null; this.signingKey = null; - this.allowedCopayerIds=null; - this.isInboundPeerAuth=[]; - this.copayerForPeer={}; - this.connections={}; - this.criticalErr=''; + this.allowedCopayerIds = null; + this.isInboundPeerAuth = []; + this.copayerForPeer = {}; + this.connections = {}; + this.criticalErr = ''; if (this.peer) { this.peer.disconnect(); this.peer.destroy(); @@ -62,7 +62,7 @@ Network.prototype.cleanUp = function() { this.tries = 0; }; -Network.parent=EventEmitter; +Network.parent = EventEmitter; // Array helpers Network._arrayDiff = function(a, b) { @@ -99,9 +99,9 @@ Network._arrayRemove = function(el, array) { }; Network.prototype.connectedCopayers = function() { - var ret =[]; - for(var i in this.connectedPeers){ - var copayerId =this.copayerForPeer[this.connectedPeers[i]]; + var ret = []; + for (var i in this.connectedPeers) { + var copayerId = this.copayerForPeer[this.connectedPeers[i]]; if (copayerId) ret.push(copayerId); } return ret; @@ -126,7 +126,7 @@ Network.prototype._onClose = function(peerID) { Network.prototype.connectToCopayers = function(copayerIds) { var self = this; - var arrayDiff= Network._arrayDiff(copayerIds, self.connectedCopayers()); + var arrayDiff = Network._arrayDiff(copayerIds, self.connectedCopayers()); arrayDiff.forEach(function(copayerId) { if (self.allowedCopayerIds && !self.allowedCopayerIds[copayerId]) { @@ -146,7 +146,7 @@ Network.prototype._sendHello = function(copayerId) { Network.prototype._addConnectedCopayer = function(copayerId, isInbound) { var peerId = this.peerFromCopayer(copayerId); - this._addCopayerMap(peerId,copayerId); + this._addCopayerMap(peerId, copayerId); Network._arrayPushOnce(peerId, this.connectedPeers); this.emit('connect', copayerId); }; @@ -158,15 +158,15 @@ Network.prototype._onData = function(enchex, isInbound, peerId) { var privkey = this.privkey; - try { + try { var data = this._decrypt(privkey, encbuf); - payload= JSON.parse(data); + payload = JSON.parse(data); } catch (e) { this._deletePeer(peerId); return; } - if(isInbound && payload.type === 'hello') { + if (isInbound && payload.type === 'hello') { var payloadStr = JSON.stringify(payload); if (this.allowedCopayerIds && !this.allowedCopayerIds[payload.copayerId]) { @@ -179,13 +179,13 @@ Network.prototype._onData = function(enchex, isInbound, peerId) { return; } - if ( !this.copayerForPeer[peerId] || (isInbound && !this.isInboundPeerAuth[peerId]) ) { + if (!this.copayerForPeer[peerId] || (isInbound && !this.isInboundPeerAuth[peerId])) { this._deletePeer(peerId); return; } - var self=this; - switch(payload.type) { + var self = this; + switch (payload.type) { case 'disconnect': this._onClose(peerId); break; @@ -206,21 +206,21 @@ Network.prototype._setupConnectionHandlers = function(dataConn, toCopayerId) { var isInbound = toCopayerId ? false : true; dataConn.on('open', function() { - if (!Network._inArray(dataConn.peer, self.connectedPeers) && - !self.connections[dataConn.peer]) { + if (!Network._inArray(dataConn.peer, self.connectedPeers) && + !self.connections[dataConn.peer]) { self.connections[dataConn.peer] = dataConn; // The connecting peer send hello - if(toCopayerId) { + if (toCopayerId) { self.emit('connected'); - self._sendHello(toCopayerId); + self._sendHello(toCopayerId); self._addConnectedCopayer(toCopayerId); } } }); - dataConn.on('data', function(data) { + dataConn.on('data', function(data) { self._onData(data, isInbound, dataConn.peer); }); @@ -244,14 +244,14 @@ Network.prototype._setupPeerHandlers = function(openCallback) { p.on('open', function() { self.connectedPeers = [self.peerId]; - self.copayerForPeer[self.peerId]= self.copayerId; + self.copayerForPeer[self.peerId] = self.copayerId; return openCallback(); }); p.on('error', function(err) { console.log('RECV ERROR: ', err); //TODO - if (!err.message.match(/Could\snot\sconnect\sto peer/) ) { - self.criticalError=err.message; + if (!err.message.match(/Could\snot\sconnect\sto peer/)) { + self.criticalError = err.message; } }); @@ -270,11 +270,9 @@ Network.prototype._setupPeerHandlers = function(openCallback) { Network.prototype._addCopayerMap = function(peerId, copayerId) { if (!this.copayerForPeer[peerId]) { - if(Object.keys(this.copayerForPeer).length < this.maxPeers) { - this.copayerForPeer[peerId]=copayerId; - } - else { - } + if (Object.keys(this.copayerForPeer).length < this.maxPeers) { + this.copayerForPeer[peerId] = copayerId; + } else {} } }; @@ -288,16 +286,16 @@ Network.prototype.setCopayerId = function(copayerId) { throw new Error('network already started: can not change peerId') } this.copayerId = copayerId; - this.copayerIdBuf = new Buffer(copayerId,'hex'); + this.copayerIdBuf = new Buffer(copayerId, 'hex'); this.peerId = this.peerFromCopayer(this.copayerId); - this._addCopayerMap(this.peerId,copayerId); + this._addCopayerMap(this.peerId, copayerId); }; // TODO cache this. Network.prototype.peerFromCopayer = function(hex) { var SIN = bitcore.SIN; - return new SIN(new Buffer(hex,'hex')).toString(); + return new SIN(new Buffer(hex, 'hex')).toString(); }; Network.prototype.start = function(opts, openCallback) { @@ -317,7 +315,7 @@ Network.prototype.start = function(opts, openCallback) { this.setCopayerId(opts.copayerId); var self = this; - var setupPeer = function () { + var setupPeer = function() { if (self.connectedPeers.length > 0) return; // Already connected! if (self.peer) { self.peer.destroy(); @@ -333,7 +331,7 @@ Network.prototype.start = function(opts, openCallback) { return; } if (self.criticalError && self.criticalError.match(/taken/)) { - self.criticalError=' Looks like you are already connected to this wallet please close all other Copay Wallets ' + self.criticalError = ' Looks like you are already connected to this wallet please close all other Copay Wallets ' } self.emit('serverError', self.criticalError); self.cleanUp(); @@ -376,7 +374,7 @@ Network.prototype._sendToOne = function(copayerId, payload, sig, cb) { Network.prototype.send = function(copayerIds, payload, cb) { if (!payload) return cb(); - var self=this; + var self = this; if (!copayerIds) { copayerIds = this.connectedCopayers(); payload.isBroadcast = 1; @@ -394,7 +392,7 @@ Network.prototype.send = function(copayerIds, payload, cb) { copayerIds.forEach(function(copayerId) { var copayerIdBuf = new Buffer(copayerId, 'hex'); var encPayload = self._encrypt(copayerIdBuf, payloadBuf); - self._sendToOne(copayerId, encPayload, sig, function () { + self._sendToOne(copayerId, encPayload, sig, function() { if (++i === l && typeof cb === 'function') cb(); }); }); @@ -417,16 +415,18 @@ Network.prototype.connectTo = function(copayerId) { }; Network.prototype.lockIncommingConnections = function(allowedCopayerIdsArray) { - this.allowedCopayerIds={}; - for(var i in allowedCopayerIdsArray) { - this.allowedCopayerIds[ allowedCopayerIdsArray[i] ] = true; + this.allowedCopayerIds = {}; + for (var i in allowedCopayerIdsArray) { + this.allowedCopayerIds[allowedCopayerIdsArray[i]] = true; } }; Network.prototype.disconnect = function(cb, forced) { var self = this; self.closing = 1; - self.send(null, { type: 'disconnect' }, function(){ + self.send(null, { + type: 'disconnect' + }, function() { self.cleanUp(); if (typeof cb === 'function') cb(); }); diff --git a/js/models/storage/File.js b/js/models/storage/File.js index beca5eb58..abee8ee6b 100644 --- a/js/models/storage/File.js +++ b/js/models/storage/File.js @@ -111,7 +111,7 @@ Storage.prototype.get = function(walletId, k) { // set value for key Storage.prototype.set = function(walletId, k, v, callback) { - this.setGlobal(this._key(walletId,k), v, callback); + this.setGlobal(this._key(walletId, k), v, callback); }; // remove value for key @@ -143,6 +143,6 @@ Storage.prototype.getEncryptedObj = function(walletId) { Storage.prototype.clearAll = function(callback) { this.data = {}; this.save(callback); -}; +}; module.exports = require('soop')(Storage); diff --git a/js/models/storage/LocalPlain.js b/js/models/storage/LocalPlain.js index d75bc711f..85ebd19bc 100644 --- a/js/models/storage/LocalPlain.js +++ b/js/models/storage/LocalPlain.js @@ -2,8 +2,7 @@ var imports = require('soop').imports(); -function Storage() { -} +function Storage() {} Storage.prototype._read = function(k) { var ret; @@ -13,7 +12,7 @@ Storage.prototype._read = function(k) { return ret; }; -Storage.prototype._write = function(k,v) { +Storage.prototype._write = function(k, v) { localStorage.setItem(k, JSON.stringify(v)); }; @@ -27,7 +26,7 @@ Storage.prototype._getWalletKeys = function(walletId) { if (walletId = split[0]) keys.push(split[2]); } - } + } return keys; }; @@ -38,8 +37,8 @@ Storage.prototype.getGlobal = function(k) { }; // set value for key -Storage.prototype.setGlobal = function(k,v) { - this._write(k,v); +Storage.prototype.setGlobal = function(k, v) { + this._write(k, v); }; // remove value for key @@ -54,44 +53,44 @@ Storage.prototype._key = function(walletId, k) { }; // get value by key Storage.prototype.get = function(walletId, k) { - return this.getGlobal(this._key(walletId,k)); + return this.getGlobal(this._key(walletId, k)); }; // set value for key -Storage.prototype.set = function(walletId, k,v) { - this.setGlobal(this._key(walletId,k), v); +Storage.prototype.set = function(walletId, k, v) { + this.setGlobal(this._key(walletId, k), v); }; // remove value for key Storage.prototype.remove = function(walletId, k) { - this.removeGlobal(this._key(walletId,k)); + this.removeGlobal(this._key(walletId, k)); }; Storage.prototype.setName = function(walletId, name) { - this.setGlobal('nameFor::'+walletId, name); + this.setGlobal('nameFor::' + walletId, name); }; Storage.prototype.getName = function(walletId) { - return this.getGlobal('nameFor::'+walletId); + return this.getGlobal('nameFor::' + walletId); }; Storage.prototype.getWalletIds = function() { var walletIds = []; var uniq = {}; for (var i = 0; i < localStorage.length; i++) { - var key = localStorage.key(i); - var split = key.split('::'); - if (split.length == 2) { + var key = localStorage.key(i); + var split = key.split('::'); + if (split.length == 2) { var walletId = split[0]; if (walletId === 'nameFor') continue; - if (typeof uniq[walletId] === 'undefined' ) { + if (typeof uniq[walletId] === 'undefined') { walletIds.push(walletId); uniq[walletId] = 1; } - } - } + } + } return walletIds; }; @@ -100,9 +99,9 @@ Storage.prototype.getWallets = function() { var uniq = {}; var ids = this.getWalletIds(); - for (var i in ids){ + for (var i in ids) { wallets.push({ - id:ids[i], + id: ids[i], name: this.getName(ids[i]), }); } @@ -120,6 +119,6 @@ Storage.prototype.setFromObj = function(walletId, obj) { // remove all values Storage.prototype.clearAll = function() { localStorage.clear(); -}; +}; module.exports = require('soop')(Storage); diff --git a/js/routes.js b/js/routes.js index 366b5f29f..a4218112c 100644 --- a/js/routes.js +++ b/js/routes.js @@ -60,15 +60,14 @@ angular .config(function($locationProvider) { $locationProvider .html5Mode(false); - //.hashPrefix('!'); + //.hashPrefix('!'); }) .run(function($rootScope, $location) { $rootScope.$on('$routeChangeStart', function(event, next, current) { if (!util.supports.data) { $location.path('unsupported'); - } - else { + } else { if ((!$rootScope.wallet || !$rootScope.wallet.id) && next.validate) { $location.path('signin'); } diff --git a/js/services/backupService.js b/js/services/backupService.js index 20d73dd74..689604e47 100644 --- a/js/services/backupService.js +++ b/js/services/backupService.js @@ -6,7 +6,7 @@ var BackupService = function(notification) { }; BackupService.prototype.getName = function(wallet) { - return (wallet.name ? (wallet.name+'-') : '') + wallet.id; + return (wallet.name ? (wallet.name + '-') : '') + wallet.id; }; BackupService.prototype.download = function(wallet) { diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js index 4cfc731f5..4b0c0484a 100644 --- a/js/services/controllerUtils.js +++ b/js/services/controllerUtils.js @@ -122,7 +122,7 @@ angular.module('copayApp.services') }); }, 3000); }); - w.on('txProposalEvent', function(e){ + w.on('txProposalEvent', function(e) { switch (e.type) { case 'signed': var user = w.publicKeyRing.nicknameForCopayer(e.cId); @@ -297,7 +297,7 @@ angular.module('copayApp.services') Socket.emit('subscribe', 'inv'); Socket.on('block', function(block) { root.updateBalance(function() { - $rootScope.$digest(); + $rootScope.$digest(); }); }); } diff --git a/js/services/isMobile.js b/js/services/isMobile.js index de0150070..1a859064d 100644 --- a/js/services/isMobile.js +++ b/js/services/isMobile.js @@ -3,19 +3,19 @@ // Detect mobile devices var isMobile = { Android: function() { - return !! navigator.userAgent.match(/Android/i); + return !!navigator.userAgent.match(/Android/i); }, BlackBerry: function() { - return !! navigator.userAgent.match(/BlackBerry/i); + return !!navigator.userAgent.match(/BlackBerry/i); }, iOS: function() { - return !! navigator.userAgent.match(/iPhone|iPad|iPod/i); + return !!navigator.userAgent.match(/iPhone|iPad|iPod/i); }, Opera: function() { - return !! navigator.userAgent.match(/Opera Mini/i); + return !!navigator.userAgent.match(/Opera Mini/i); }, Windows: function() { - return !! navigator.userAgent.match(/IEMobile/i); + return !!navigator.userAgent.match(/IEMobile/i); }, any: function() { return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); diff --git a/js/services/notifications.js b/js/services/notifications.js index 114d9a6bd..22645ec17 100644 --- a/js/services/notifications.js +++ b/js/services/notifications.js @@ -1,40 +1,61 @@ 'use strict'; angular.module('copayApp.services'). - factory('notification', ['$timeout',function($timeout){ +factory('notification', ['$timeout', + function($timeout) { var notifications = JSON.parse(localStorage.getItem('notifications')) || [], - queue = []; + queue = []; var settings = { - info: { duration: 5000, enabled: true }, - funds: { duration: 5000, enabled: true }, - warning: { duration: 5000, enabled: true }, - error: { duration: 1e10, enabled: true }, - success: { duration: 5000, enabled: true }, - progress: { duration: 0, enabled: true }, - custom: { duration: 35000, enabled: true }, + info: { + duration: 5000, + enabled: true + }, + funds: { + duration: 5000, + enabled: true + }, + warning: { + duration: 5000, + enabled: true + }, + error: { + duration: 1e10, + enabled: true + }, + success: { + duration: 5000, + enabled: true + }, + progress: { + duration: 0, + enabled: true + }, + custom: { + duration: 35000, + enabled: true + }, details: true, localStorage: false, html5Mode: false, html5DefaultIcon: 'img/favicon.ico' }; - function html5Notify(icon, title, content, ondisplay, onclose){ - if(window.webkitNotifications.checkPermission() === 0){ - if(!icon){ + function html5Notify(icon, title, content, ondisplay, onclose) { + if (window.webkitNotifications.checkPermission() === 0) { + if (!icon) { icon = 'img/favicon.ico'; } var noti = window.webkitNotifications.createNotification(icon, title, content); - if(typeof ondisplay === 'function'){ + if (typeof ondisplay === 'function') { noti.ondisplay = ondisplay; } - if(typeof onclose === 'function'){ + if (typeof onclose === 'function') { noti.onclose = onclose; } noti.show(); - } - else { + } else { settings.html5Mode = false; } } @@ -44,53 +65,50 @@ angular.module('copayApp.services'). /* ========== SETTINGS RELATED METHODS =============*/ - disableHtml5Mode: function(){ + disableHtml5Mode: function() { settings.html5Mode = false; }, - disableType: function(notificationType){ + disableType: function(notificationType) { settings[notificationType].enabled = false; }, - enableHtml5Mode: function(){ + enableHtml5Mode: function() { // settings.html5Mode = true; settings.html5Mode = this.requestHtml5ModePermissions(); }, - enableType: function(notificationType){ + enableType: function(notificationType) { settings[notificationType].enabled = true; }, - getSettings: function(){ + getSettings: function() { return settings; }, - toggleType: function(notificationType){ + toggleType: function(notificationType) { settings[notificationType].enabled = !settings[notificationType].enabled; }, - toggleHtml5Mode: function(){ + toggleHtml5Mode: function() { settings.html5Mode = !settings.html5Mode; }, - requestHtml5ModePermissions: function(){ - if (window.webkitNotifications){ + requestHtml5ModePermissions: function() { + if (window.webkitNotifications) { if (window.webkitNotifications.checkPermission() === 0) { return true; - } - else{ - window.webkitNotifications.requestPermission(function(){ - if(window.webkitNotifications.checkPermission() === 0){ + } else { + window.webkitNotifications.requestPermission(function() { + if (window.webkitNotifications.checkPermission() === 0) { settings.html5Mode = true; - } - else{ + } else { settings.html5Mode = false; } }); return false; } - } - else{ + } else { return false; } }, @@ -98,38 +116,38 @@ angular.module('copayApp.services'). /* ============ QUERYING RELATED METHODS ============*/ - getAll: function(){ + getAll: function() { // Returns all notifications that are currently stored return notifications; }, - getQueue: function(){ + getQueue: function() { return queue; }, /* ============== NOTIFICATION METHODS ==============*/ - info: function(title, content, userData){ + info: function(title, content, userData) { return this.awesomeNotify('info', 'info', title, content, userData); }, - - funds: function(title, content, userData){ + + funds: function(title, content, userData) { return this.awesomeNotify('funds', 'bitcoin', title, content, userData); }, - error: function(title, content, userData){ + error: function(title, content, userData) { return this.awesomeNotify('error', 'x', title, content, userData); }, - success: function(title, content, userData){ + success: function(title, content, userData) { return this.awesomeNotify('success', 'check', title, content, userData); }, - warning: function(title, content, userData){ + warning: function(title, content, userData) { return this.awesomeNotify('warning', 'alert', title, content, userData); }, - awesomeNotify: function(type, icon, title, content, userData){ + awesomeNotify: function(type, icon, title, content, userData) { /** * Supposed to wrap the makeNotification method for drawing icons using font-awesome * rather than an image. @@ -143,13 +161,13 @@ angular.module('copayApp.services'). return this.makeNotification(type, false, icon, title, content, userData); }, - notify: function(image, title, content, userData){ + notify: function(image, title, content, userData) { // Wraps the makeNotification method for displaying notifications with images // rather than icons return this.makeNotification('custom', image, true, title, content, userData); }, - makeNotification: function(type, image, icon, title, content, userData){ + makeNotification: function(type, image, icon, title, content, userData) { var notification = { 'type': type, 'image': image, @@ -161,16 +179,15 @@ angular.module('copayApp.services'). }; notifications.push(notification); - if(settings.html5Mode){ - html5Notify(image, title, content, function(){ + if (settings.html5Mode) { + html5Notify(image, title, content, function() { // inner on display function - }, function(){ + }, function() { // inner on close function }); - } - else{ + } else { queue.push(notification); - $timeout(function removeFromQueueTimeout(){ + $timeout(function removeFromQueueTimeout() { queue.splice(queue.indexOf(notification), 1); }, settings[type].duration); @@ -183,80 +200,77 @@ angular.module('copayApp.services'). /* ============ PERSISTENCE METHODS ============ */ - save: function(){ + save: function() { // Save all the notifications into localStorage - if(settings.localStorage){ + if (settings.localStorage) { localStorage.setItem('notifications', JSON.stringify(notifications)); } }, - restore: function(){ + restore: function() { // Load all notifications from localStorage }, - clear: function(){ + clear: function() { notifications = []; this.save(); } }; - }]). - directive('notifications', function(notification, $compile){ - /** - * - * It should also parse the arguments passed to it that specify - * its position on the screen like "bottom right" and apply those - * positions as a class to the container element - * - * Finally, the directive should have its own controller for - * handling all of the notifications from the notification service - */ - var html = - '
' + - '
' + - '' + - '
' + - '
' + - '
' + - '' + - '' + - '
' + - '
' + - '

{{noti.title}}

' + - '

{{noti.content}}

' + - '
' + - '
' + - '
'; + } +]). +directive('notifications', function(notification, $compile) { + /** + * + * It should also parse the arguments passed to it that specify + * its position on the screen like "bottom right" and apply those + * positions as a class to the container element + * + * Finally, the directive should have its own controller for + * handling all of the notifications from the notification service + */ + var html = + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '

{{noti.title}}

' + + '

{{noti.content}}

' + + '
' + + '
' + + '
'; - function link(scope, element, attrs){ - var position = attrs.notifications; - position = position.split(' '); - element.addClass('dr-notification-container'); - for(var i = 0; i < position.length ; i++){ - element.addClass(position[i]); - } + function link(scope, element, attrs) { + var position = attrs.notifications; + position = position.split(' '); + element.addClass('dr-notification-container'); + for (var i = 0; i < position.length; i++) { + element.addClass(position[i]); } + } - return { - restrict: 'A', - scope: {}, - template: html, - link: link, - controller: ['$scope', function NotificationsCtrl( $scope ){ + return { + restrict: 'A', + scope: {}, + template: html, + link: link, + controller: ['$scope', + function NotificationsCtrl($scope) { $scope.queue = notification.getQueue(); - $scope.removeNotification = function(noti){ + $scope.removeNotification = function(noti) { $scope.queue.splice($scope.queue.indexOf(noti), 1); }; } ] - }; - }); - - - - - + }; +}); diff --git a/js/services/socket.js b/js/services/socket.js index 10f843b6f..dd786da1d 100644 --- a/js/services/socket.js +++ b/js/services/socket.js @@ -38,8 +38,12 @@ angular.module('copayApp.services').factory('Socket', var ret = {}; var addrList = listeners - .filter(function(i) { return i.event != 'block'; }) - .map(function(i) {return i.event;}); + .filter(function(i) { + return i.event != 'block'; + }) + .map(function(i) { + return i.event; + }); for (var i in addrList) { ret[addrList[i]] = 1; @@ -47,7 +51,9 @@ angular.module('copayApp.services').factory('Socket', return ret; }, isListeningBlocks: function() { - return listeners.filter(function(i) { return i.event == 'block'; }).length > 0; + return listeners.filter(function(i) { + return i.event == 'block'; + }).length > 0; }, emit: function(event, data, callback) { socket.emit(event, data, function() { diff --git a/js/services/walletFactory.js b/js/services/walletFactory.js index 3e201b6f1..16580af9d 100644 --- a/js/services/walletFactory.js +++ b/js/services/walletFactory.js @@ -1,4 +1,3 @@ 'use strict'; angular.module('copayApp.services').value('walletFactory', new copay.WalletFactory(config, copay.version)); - diff --git a/js/shell.js b/js/shell.js index 4fe83d25c..053cebea2 100644 --- a/js/shell.js +++ b/js/shell.js @@ -1,23 +1,24 @@ /* -** copay-shell integration -*/ + ** copay-shell integration + */ (function() { /* - ** This is a monkey patch for when Copay is running from - ** within Copay-Shell (atom-shell). Since the renderer (the frontend) - ** receives context from Node.js, we get a `module.exports` contruct - ** available to us. Because of this, some libs (specifically Moment.js) - ** attempt to assume their CommonJS form and bind to this. This causes - ** there to be no references in the window to these libs, so let's trick - ** the renderer into thinking that we are _not_ in a CommonJS environment. - */ - if (typeof module !== 'undefined') module = { exports: null }; + ** This is a monkey patch for when Copay is running from + ** within Copay-Shell (atom-shell). Since the renderer (the frontend) + ** receives context from Node.js, we get a `module.exports` contruct + ** available to us. Because of this, some libs (specifically Moment.js) + ** attempt to assume their CommonJS form and bind to this. This causes + ** there to be no references in the window to these libs, so let's trick + ** the renderer into thinking that we are _not_ in a CommonJS environment. + */ + if (typeof module !== 'undefined') module = { + exports: null + }; // are we running in copay shell? if (window.process && process.type === 'renderer') { window.cshell = initCopayShellBindings(); - } - else { + } else { return; } @@ -35,12 +36,14 @@ function initCopayShellBindings() { - var ipc = require('ipc'); + var ipc = require('ipc'); var clipb = require('clipboard'); // atom shell forces to implement the clipboard on our own - thanks obama. - Mousetrap.stopCallback = function() { return false }; + Mousetrap.stopCallback = function() { + return false + }; Mousetrap.bind('ctrl+c', function(e) { clipb.writeText(window.getSelection().toString()); diff --git a/karma.conf.js b/karma.conf.js index 48b6655b3..8bd9d8e1b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -53,7 +53,7 @@ module.exports = function(config) { 'test/lib/chai-should.js', 'test/lib/chai-expect.js', 'test/mocks/FakeWallet.js', - + 'test/mocha.conf.js', //test files diff --git a/launch.js b/launch.js index dbbf11ee2..5b9d9c2ab 100755 --- a/launch.js +++ b/launch.js @@ -6,7 +6,10 @@ var sys = require('sys') var exec = require('child_process').exec; -function puts(error, stdout, stderr) { sys.puts(stdout) } + +function puts(error, stdout, stderr) { + sys.puts(stdout) +} function isNumber(n) { return !isNaN(parseInt(n)) && isFinite(n); @@ -23,9 +26,9 @@ var N = parseInt(n_str); var DEFAULT_PORT = process.env.DEFAULT_PORT || 3000; -for (var i=0; i1) { - w.getAddress(i-1,isChange).toString().should - .not.equal(w.getAddress(i-2,isChange).toString()); + if (i > 1) { + w.getAddress(i - 1, isChange).toString().should + .not.equal(w.getAddress(i - 2, isChange).toString()); } } } }); - it('should return PublicKeyRing addresses', function () { + it('should return PublicKeyRing addresses', function() { var k = createW(); var w = k.w; @@ -134,38 +143,38 @@ describe('PublicKeyRing model', function() { var a = w.getAddresses(); a.length.should.equal(0); - for(var isChange=0; isChange<2; isChange++) - for(var i=0; i<2; i++) - w.generateAddress(isChange); - + for (var isChange = 0; isChange < 2; isChange++) + for (var i = 0; i < 2; i++) + w.generateAddress(isChange); + var as = w.getAddresses(); as.length.should.equal(4); - for(var j in as) { + for (var j in as) { var a = as[j]; a.isValid().should.equal(true); } }); - it('should count generation indexes', function () { + it('should count generation indexes', function() { var k = createW(); var w = k.w; - for(var i=0; i<3; i++) + for (var i = 0; i < 3; i++) w.generateAddress(true); - for(var i=0; i<2; i++) + for (var i = 0; i < 2; i++) w.generateAddress(false); - w.indexes.getChangeIndex().should.equal(3); - w.indexes.getReceiveIndex().should.equal(2); + w.indexes.getChangeIndex().should.equal(3); + w.indexes.getReceiveIndex().should.equal(2); }); - it('#merge index tests', function () { + it('#merge index tests', function() { var k = createW(); var w = k.w; - for(var i=0; i<2; i++) + for (var i = 0; i < 2; i++) w.generateAddress(true); - for(var i=0; i<3; i++) + for (var i = 0; i < 3; i++) w.generateAddress(false); var w2 = new PublicKeyRing({ @@ -173,17 +182,17 @@ describe('PublicKeyRing model', function() { walletId: w.walletId, }); w2.merge(w).should.equal(true); - w2.requiredCopayers.should.equal(3); - w2.totalCopayers.should.equal(5); - w2.indexes.getChangeIndex().should.equal(2); - w2.indexes.getReceiveIndex().should.equal(3); + w2.requiredCopayers.should.equal(3); + w2.totalCopayers.should.equal(5); + w2.indexes.getChangeIndex().should.equal(2); + w2.indexes.getReceiveIndex().should.equal(3); // w2.merge(w).should.equal(false); }); - it('#merge check tests', function () { + it('#merge check tests', function() { var config = { networkName: 'livenet', }; @@ -191,32 +200,42 @@ describe('PublicKeyRing model', function() { var w = new PublicKeyRing(config); w.walletId = 'lwjd5qra8257b9'; var w2 = new PublicKeyRing({ - networkName: 'testnet', //wrong + networkName: 'testnet', //wrong walletId: w.walletId, }); - (function() { w2.merge(w);}).should.throw(); + (function() { + w2.merge(w); + }).should.throw(); var w3 = new PublicKeyRing({ networkName: 'livenet', walletId: w.walletId, - requiredCopayers: 2, // wrong + requiredCopayers: 2, // wrong }); - (function() { w3.merge(w);}).should.throw(); + (function() { + w3.merge(w); + }).should.throw(); var w4 = new PublicKeyRing({ networkName: 'livenet', walletId: w.walletId, - totalCopayers: 3, // wrong + totalCopayers: 3, // wrong }); - (function() { w4.merge(w);}).should.throw(); + (function() { + w4.merge(w); + }).should.throw(); var w6 = new PublicKeyRing({ networkName: 'livenet', }); - (function() { w6.merge(w);}).should.throw(); - w.networkName= 'livenet'; - (function() { w6.merge(w);}).should.throw(); + (function() { + w6.merge(w); + }).should.throw(); + w.networkName = 'livenet'; + (function() { + w6.merge(w); + }).should.throw(); var w0 = new PublicKeyRing({ @@ -227,28 +246,32 @@ describe('PublicKeyRing model', function() { w0.addCopayer(); w0.addCopayer(); w0.addCopayer(); - (function() { w0.merge(w);}).should.throw(); - w.merge(w0,true).should.equal(true); + (function() { + w0.merge(w); + }).should.throw(); + w.merge(w0, true).should.equal(true); w.isComplete().should.equal(true); var wx = new PublicKeyRing({ networkName: 'livenet', }); wx.addCopayer(); - (function() { w.merge(wx);}).should.throw(); + (function() { + w.merge(wx); + }).should.throw(); }); - it('#merge pubkey tests', function () { + it('#merge pubkey tests', function() { var config = { - networkName:'livenet', + networkName: 'livenet', }; var w = new PublicKeyRing(config); should.exist(w); var copayers = []; - for(var i=0; i<2; i++) { + for (var i = 0; i < 2; i++) { w.isComplete().should.equal(false); w.addCopayer(); } @@ -259,7 +282,7 @@ describe('PublicKeyRing model', function() { }); should.exist(w); var copayers = []; - for(var i=0; i<3; i++) { + for (var i = 0; i < 3; i++) { w2.isComplete().should.equal(false); w2.addCopayer(); } @@ -273,14 +296,14 @@ describe('PublicKeyRing model', function() { w.merge(w2).should.equal(false); }); - it('#merge pubkey tests (case 2)', function () { + it('#merge pubkey tests (case 2)', function() { var config = { - networkName:'livenet', + networkName: 'livenet', }; var w = new PublicKeyRing(config); should.exist(w); - for(var i=0; i<5; i++) { + for (var i = 0; i < 5; i++) { w.isComplete().should.equal(false); var w2 = new PublicKeyRing({ networkName: 'livenet', @@ -293,31 +316,31 @@ describe('PublicKeyRing model', function() { }); - it('#merge with nickname', function () { + it('#merge with nickname', function() { var config = { - networkName:'livenet', + networkName: 'livenet', }; var w = new PublicKeyRing(config); should.exist(w); - for(var i=0; i<3; i++) { + for (var i = 0; i < 3; i++) { w.addCopayer(); }; - w._setNicknameForIndex(0,'pepe0'); - w._setNicknameForIndex(1,'pepe1'); + w._setNicknameForIndex(0, 'pepe0'); + w._setNicknameForIndex(1, 'pepe1'); w.nicknameForIndex(0).should.equal('pepe0'); w.nicknameForIndex(1).should.equal('pepe1'); should.not.exist(w.nicknameForIndex(2)); - for(var i=0; i<2; i++) { + for (var i = 0; i < 2; i++) { w.isComplete().should.equal(false); var w2 = new PublicKeyRing({ networkName: 'livenet', id: w.id, }); w2.addCopayer(); - w2._setNicknameForIndex(0,'juan' + i); + w2._setNicknameForIndex(0, 'juan' + i); w.merge(w2).should.equal(true); } w.isComplete().should.equal(true); @@ -330,14 +353,14 @@ describe('PublicKeyRing model', function() { }); - it('#toObj #fromObj with nickname', function () { + it('#toObj #fromObj with nickname', function() { var config = { - networkName:'livenet', + networkName: 'livenet', }; var w = new PublicKeyRing(config); should.exist(w); - for(var i=0; i<3; i++) { - w.addCopayer(null, 'tito'+i); + for (var i = 0; i < 3; i++) { + w.addCopayer(null, 'tito' + i); }; w.nicknameForIndex(0).should.equal('tito0'); w.nicknameForIndex(1).should.equal('tito1'); @@ -345,7 +368,7 @@ describe('PublicKeyRing model', function() { should.not.exist(w.nicknameForIndex(3)); var o = JSON.parse(JSON.stringify(w.toObj())); - var w2 = PublicKeyRing.fromObj( o ); + var w2 = PublicKeyRing.fromObj(o); w2.nicknameForIndex(0).should.equal('tito0'); w2.nicknameForIndex(1).should.equal('tito1'); w2.nicknameForIndex(2).should.equal('tito2'); @@ -353,22 +376,20 @@ describe('PublicKeyRing model', function() { }); - it('#getRedeemScriptMap check tests', function () { + it('#getRedeemScriptMap check tests', function() { var k = createW(); var w = k.w; - for(var i=0; i<2; i++) + for (var i = 0; i < 2; i++) w.generateAddress(true); - for(var i=0; i<2; i++) + for (var i = 0; i < 2; i++) w.generateAddress(false); var m = w.getRedeemScriptMap(); Object.keys(m).length.should.equal(4); - Object.keys(m).forEach(function (k) { + Object.keys(m).forEach(function(k) { should.exist(m[k]); }); }); }); - - diff --git a/test/test.Structure.js b/test/test.Structure.js index 845032b14..47fe4cce1 100644 --- a/test/test.Structure.js +++ b/test/test.Structure.js @@ -1,41 +1,41 @@ 'use strict'; -var chai = chai || require('chai'); -var should = chai.should(); -var bitcore = bitcore || require('bitcore'); +var chai = chai || require('chai'); +var should = chai.should(); +var bitcore = bitcore || require('bitcore'); try { var copay = require('copay'); //browser } catch (e) { var copay = require('../copay'); //node } -var Structure = require('../js/models/core/Structure'); +var Structure = require('../js/models/core/Structure'); describe('Structure model', function() { - it('should have the correct constants', function () { - Structure.MAX_NON_HARDENED.should.equal(Math.pow(2,31) - 1); + it('should have the correct constants', function() { + Structure.MAX_NON_HARDENED.should.equal(Math.pow(2, 31) - 1); Structure.SHARED_INDEX.should.equal(Structure.MAX_NON_HARDENED); Structure.ID_INDEX.should.equal(Structure.SHARED_INDEX - 1); Structure.IdFullBranch.should.equal('m/45\'/2147483646/0/0'); }); - it('should get the correct branches', function () { + it('should get the correct branches', function() { // shared branch (no cosigner index specified) - Structure.FullBranch(0,false).should.equal('m/45\'/2147483647/0/0'); + Structure.FullBranch(0, false).should.equal('m/45\'/2147483647/0/0'); // copayer 0, address 0, external address (receiving) - Structure.FullBranch(0,false,0).should.equal('m/45\'/0/0/0'); + Structure.FullBranch(0, false, 0).should.equal('m/45\'/0/0/0'); // copayer 0, address 10, external address (receiving) - Structure.FullBranch(0,false,10).should.equal('m/45\'/10/0/0'); + Structure.FullBranch(0, false, 10).should.equal('m/45\'/10/0/0'); // copayer 0, address 0, internal address (change) - Structure.FullBranch(0,true,0).should.equal('m/45\'/0/1/0'); + Structure.FullBranch(0, true, 0).should.equal('m/45\'/0/1/0'); // copayer 0, address 10, internal address (change) - Structure.FullBranch(10,true,0).should.equal('m/45\'/0/1/10'); + Structure.FullBranch(10, true, 0).should.equal('m/45\'/0/1/10'); // copayer 7, address 10, internal address (change) - Structure.FullBranch(10,true,7).should.equal('m/45\'/7/1/10'); + Structure.FullBranch(10, true, 7).should.equal('m/45\'/7/1/10'); }); }); diff --git a/test/test.blockchain.Insight.js b/test/test.blockchain.Insight.js index 4f5bb3af4..72144e08e 100644 --- a/test/test.blockchain.Insight.js +++ b/test/test.blockchain.Insight.js @@ -132,27 +132,48 @@ describe('Insight model', function() { cb([]); }; - w.checkActivity(addresses, function(err, actives){ + w.checkActivity(addresses, function(err, actives) { console.log(err); actives.length.should.equal(addresses.length); - actives.filter(function(i) { return i }).length.should.equal(0); + actives.filter(function(i) { + return i + }).length.should.equal(0); done(); }); }); it('#checkActivity for active addreses', function(done) { var w = new Insight(); w.getTransactions = function(addresses, cb) { - cb([ - {vin: [{ addr: '2NATQJnaQe2CUKLyhL1zdNkttJM1dUH9HaM'}], vout: []}, - {vin: [{ addr: '2NATQJnaQe2CUKLyhL1zdNkttJM1dUH9HaM'}], vout: []}, - {vin: [{ addr: '2N9D5bcCQ2bPWUDByQ6Qb5bMgMtgsk1rw3x'}], vout: []}, - {vin: [], vout: [{scriptPubKey: {addresses: ['2NFjCBFZSsxiwWAD7CKQ3hzWFtf9DcqTucY']}}]} - ]); + cb([{ + vin: [{ + addr: '2NATQJnaQe2CUKLyhL1zdNkttJM1dUH9HaM' + }], + vout: [] + }, { + vin: [{ + addr: '2NATQJnaQe2CUKLyhL1zdNkttJM1dUH9HaM' + }], + vout: [] + }, { + vin: [{ + addr: '2N9D5bcCQ2bPWUDByQ6Qb5bMgMtgsk1rw3x' + }], + vout: [] + }, { + vin: [], + vout: [{ + scriptPubKey: { + addresses: ['2NFjCBFZSsxiwWAD7CKQ3hzWFtf9DcqTucY'] + } + }] + }]); }; - w.checkActivity(addresses, function(err, actives){ + w.checkActivity(addresses, function(err, actives) { actives.length.should.equal(addresses.length); - actives.filter(function(i) { return i }).length.should.equal(3); + actives.filter(function(i) { + return i + }).length.should.equal(3); done(); }); }); diff --git a/test/test.network.WebRTC.js b/test/test.network.WebRTC.js index 0eb21b247..d880d006d 100644 --- a/test/test.network.WebRTC.js +++ b/test/test.network.WebRTC.js @@ -1,15 +1,15 @@ 'use strict'; -var chai = chai || require('chai'); -var should = chai.should(); -var expect = chai.expect; -var sinon = sinon || require('sinon'); -var bitcore = bitcore || require('bitcore'); +var chai = chai || require('chai'); +var should = chai.should(); +var expect = chai.expect; +var sinon = sinon || require('sinon'); +var bitcore = bitcore || require('bitcore'); var WebRTC = require('../js/models/network/WebRTC'); describe('Network / WebRTC', function() { - it('should create an instance', function () { + it('should create an instance', function() { var n = new WebRTC(); should.exist(n); }); @@ -28,7 +28,7 @@ describe('Network / WebRTC', function() { n.cleanUp.calledOnce.should.equal(true); WebRTC.prototype.cleanUp = save; }); - + }); describe('#cleanUp', function() { @@ -95,7 +95,9 @@ describe('Network / WebRTC', function() { key.regenerateSync(); var copayerId = key.public.toString('hex'); - n._sendToOne = function(a1, a2, a3, cb) {cb();}; + n._sendToOne = function(a1, a2, a3, cb) { + cb(); + }; var sig = undefined; n.send(copayerId, data, function() { done(); @@ -138,7 +140,9 @@ describe('Network / WebRTC', function() { key.regenerateSync(); var copayerIds = [key.public.toString('hex')]; - n._sendToOne = function(a1, a2, a3, cb) {cb();}; + n._sendToOne = function(a1, a2, a3, cb) { + cb(); + }; var sig = undefined; n.send(copayerIds, data, function() { done(); diff --git a/test/test.storage.File.js b/test/test.storage.File.js index 97a33c9b0..23212871c 100644 --- a/test/test.storage.File.js +++ b/test/test.storage.File.js @@ -1,11 +1,11 @@ 'use strict'; -var chai = require('chai'); -var should = chai.should(); -var Storage = require('../js/models/storage/File.js'); -var sinon = require('sinon'); -var crypto = require('crypto'); -var CryptoJS = require('node-cryptojs-aes').CryptoJS; +var chai = require('chai'); +var should = chai.should(); +var Storage = require('../js/models/storage/File.js'); +var sinon = require('sinon'); +var crypto = require('crypto'); +var CryptoJS = require('node-cryptojs-aes').CryptoJS; describe('Storage/File', function() { it('should exist', function() { @@ -17,12 +17,18 @@ describe('Storage/File', function() { var fs = {} fs.readFile = function(filename, callback) { filename.should.equal('myfilename'); - var obj = {"test":"test"}; + var obj = { + "test": "test" + }; var encryptedStr = CryptoJS.AES.encrypt(JSON.stringify(obj), "password").toString(); callback(null, encryptedStr); }; - var Storage = require('soop').load('../js/models/storage/File.js', {fs: fs}); - var storage = new Storage({password: 'password'}); + var Storage = require('soop').load('../js/models/storage/File.js', { + fs: fs + }); + var storage = new Storage({ + password: 'password' + }); storage.load('myfilename', function(err) { done(); }); @@ -36,8 +42,12 @@ describe('Storage/File', function() { filename.should.equal('myfilename'); callback(); }; - var Storage = require('soop').load('../js/models/storage/File.js', {fs: fs}); - var storage = new Storage({password: 'password'}); + var Storage = require('soop').load('../js/models/storage/File.js', { + fs: fs + }); + var storage = new Storage({ + password: 'password' + }); storage.save('myfilename', function(err) { done(); }); @@ -47,7 +57,11 @@ describe('Storage/File', function() { describe('#_read', function() { it('should return the value of a key', function() { var storage = new Storage(); - storage.data = {'walletId':{'test':'data'}}; + storage.data = { + 'walletId': { + 'test': 'data' + } + }; storage._read('walletId::test').should.equal('data'); }); }); @@ -68,7 +82,11 @@ describe('Storage/File', function() { describe('#getGlobal', function() { it('should call storage._read', function() { var storage = new Storage(); - storage.data = {'walletId':{'test':'test'}}; + storage.data = { + 'walletId': { + 'test': 'test' + } + }; storage._read = sinon.spy(); storage.getGlobal('walletId::test'); storage._read.calledOnce.should.equal(true); @@ -91,7 +109,11 @@ describe('Storage/File', function() { describe('#removeGlobal', function() { it('should remove a global key', function(done) { var storage = new Storage(); - storage.data = {'walletId':{'key':'value'}}; + storage.data = { + 'walletId': { + 'key': 'value' + } + }; storage.save = function(walletId, callback) { should.not.exist(storage.data[walletId]['key']); callback(); @@ -141,7 +163,9 @@ describe('Storage/File', function() { describe('#setFromObj', function() { it('should set this object for a wallet', function(done) { - var obj = {test:'testval'}; + var obj = { + test: 'testval' + }; var storage = new Storage(); storage.save = function(walletId, callback) { callback(); @@ -155,25 +179,29 @@ describe('Storage/File', function() { describe('#getEncryptedObj', function() { it('should give an encrypted object', function() { - var obj = {test:'testval'}; + var obj = { + test: 'testval' + }; var data = JSON.stringify(obj); var encrypted = CryptoJS.AES.encrypt(data, 'password'); var base64 = encrypted.toString(); - var storage = new Storage({password: 'password'}); + var storage = new Storage({ + password: 'password' + }); storage.data['walletId'] = obj; var enc = storage.getEncryptedObj('walletId'); //enc.length.should.equal(96); enc.length.should.be.greaterThan(10); - enc.slice(0,10).should.equal(base64.slice(0,10)); + enc.slice(0, 10).should.equal(base64.slice(0, 10)); //enc.slice(0,6).should.equal("53616c"); }); }); describe('#clearAll', function() { it('should set data to {}', function() { - + }); }); diff --git a/test/test.storage.LocalEncrypted.js b/test/test.storage.LocalEncrypted.js index 8b614cd68..55477bad6 100644 --- a/test/test.storage.LocalEncrypted.js +++ b/test/test.storage.LocalEncrypted.js @@ -20,48 +20,58 @@ if (typeof process === 'undefined' || !process.version) { }); it('should fail when encrypting without a password', function() { var s = new LocalEncrypted(); - (function(){ + (function() { s.set(fakeWallet, timeStamp, 1); - localStorage.removeItem(fakeWallet +'::'+ timeStamp); + localStorage.removeItem(fakeWallet + '::' + timeStamp); }).should.throw(); }); it('should be able to encrypt and decrypt', function() { - s._write(fakeWallet+timeStamp, 'value'); - s._read(fakeWallet+timeStamp).should.equal('value'); - localStorage.removeItem(fakeWallet+timeStamp); + s._write(fakeWallet + timeStamp, 'value'); + s._read(fakeWallet + timeStamp).should.equal('value'); + localStorage.removeItem(fakeWallet + timeStamp); }); it('should be able to set a value', function() { s.set(fakeWallet, timeStamp, 1); - localStorage.removeItem(fakeWallet +'::'+ timeStamp); + localStorage.removeItem(fakeWallet + '::' + timeStamp); }); var getSetData = [ - 1,1000,-15, -1000, + 1, 1000, -15, -1000, 0.1, -0.5, -0.5e-10, Math.PI, 'hi', 'auydoaiusyodaisudyoa', '0b5b8556a0c2ce828c9ccfa58b3dd0a1ae879b9b', - '1CjPR7Z5ZSyWk6WtXvSFgkptmpoi4UM9BC', 'OP_DUP OP_HASH160 80ad90d4035', - [1,2,3,4,5,6], - { x: 1, y: 2}, - { x: 'hi', y: null}, - { a: {}, b: [], c: [1,2,'hi']}, + '1CjPR7Z5ZSyWk6WtXvSFgkptmpoi4UM9BC', 'OP_DUP OP_HASH160 80ad90d4035', [1, 2, 3, 4, 5, 6], { + x: 1, + y: 2 + }, { + x: 'hi', + y: null + }, { + a: {}, + b: [], + c: [1, 2, 'hi'] + }, null ]; getSetData.forEach(function(obj) { - it('should be able to set a value and get it for '+JSON.stringify(obj), function() { + it('should be able to set a value and get it for ' + JSON.stringify(obj), function() { s.set(fakeWallet, timeStamp, obj); var obj2 = s.get(fakeWallet, timeStamp); JSON.stringify(obj2).should.equal(JSON.stringify(obj)); - localStorage.removeItem(fakeWallet +'::'+ timeStamp); + localStorage.removeItem(fakeWallet + '::' + timeStamp); }); }); describe('#export', function() { it('should export the encrypted wallet', function() { - var storage = new LocalEncrypted({password: 'password'}); + var storage = new LocalEncrypted({ + password: 'password' + }); storage.set(fakeWallet, timeStamp, 'testval'); - var obj = {test:'testval'}; + var obj = { + test: 'testval' + }; var encrypted = storage.export(obj); encrypted.length.should.be.greaterThan(10); - localStorage.removeItem(fakeWallet +'::'+ timeStamp); + localStorage.removeItem(fakeWallet + '::' + timeStamp); //encrypted.slice(0,6).should.equal("53616c"); }); }); diff --git a/test/test.storage.LocalPlain.js b/test/test.storage.LocalPlain.js index 06d474f5c..30eaa552f 100644 --- a/test/test.storage.LocalPlain.js +++ b/test/test.storage.LocalPlain.js @@ -26,13 +26,13 @@ if (typeof process === 'undefined' || !process.version) { } }; var storage = new LocalPlain(); - storage.setFromObj(fakeWallet+timeStamp, obj); - storage.get(fakeWallet+timeStamp, 'test').should.equal('testval'); + storage.setFromObj(fakeWallet + timeStamp, obj); + storage.get(fakeWallet + timeStamp, 'test').should.equal('testval'); // Clean data used in localstorage - localStorage.removeItem(fakeWallet+timeStamp+'::test'); - localStorage.removeItem(fakeWallet+timeStamp+'::opts'); - localStorage.removeItem('nameFor::'+fakeWallet+timeStamp); + localStorage.removeItem(fakeWallet + timeStamp + '::test'); + localStorage.removeItem(fakeWallet + timeStamp + '::opts'); + localStorage.removeItem('nameFor::' + fakeWallet + timeStamp); }); }); }); diff --git a/test/unit/controllers/controllersSpec.js b/test/unit/controllers/controllersSpec.js index d56804be9..aea9f5e74 100644 --- a/test/unit/controllers/controllersSpec.js +++ b/test/unit/controllers/controllersSpec.js @@ -21,7 +21,7 @@ describe("Unit: Controllers", function() { totalCopayers: 5, spendUnconfirmed: 1, reconnectDelay: 100, - networkName: 'testnet' + networkName: 'testnet' }; describe('Backup Controller', function() { @@ -117,7 +117,7 @@ describe("Unit: Controllers", function() { describe('Send Controller', function() { var scope, form; beforeEach(angular.mock.module('copayApp')); - beforeEach(angular.mock.inject(function($compile, $rootScope, $controller){ + beforeEach(angular.mock.inject(function($compile, $rootScope, $controller) { scope = $rootScope.$new(); $rootScope.wallet = new FakeWallet(config); var element = angular.element( @@ -131,7 +131,8 @@ describe("Unit: Controllers", function() { newlabel: null, }; $compile(element)(scope); - $controller('SendController', {$scope: scope, + $controller('SendController', { + $scope: scope, $modal: {}, }); scope.$digest(); diff --git a/test/unit/directives/directivesSpec.js b/test/unit/directives/directivesSpec.js index 755281893..882939143 100644 --- a/test/unit/directives/directivesSpec.js +++ b/test/unit/directives/directivesSpec.js @@ -85,7 +85,11 @@ describe("Unit: Testing Directives", function() { beforeEach(inject(function($compile, $rootScope) { $rootScope.wallet = { - addressBook: {'2MtBXKLtZuXGDshUcyH6yq7aZ33Snbb49pT': {label: ':)'}} + addressBook: { + '2MtBXKLtZuXGDshUcyH6yq7aZ33Snbb49pT': { + label: ':)' + } + } } element1 = angular.element( '' diff --git a/test/unit/filters/filtersSpec.js b/test/unit/filters/filtersSpec.js index d7c13955d..d9d52fe74 100644 --- a/test/unit/filters/filtersSpec.js +++ b/test/unit/filters/filtersSpec.js @@ -22,16 +22,31 @@ describe('Unit: Testing Filters', function() { it('should filter correctly', inject(function($filter) { var limitAddress = $filter('limitAddress'); - var addresses = [ - {isChange: true, balance: 0}, - {isChange: false, balance: 0}, - {isChange: true, balance: 0}, - {isChange: false, balance: 0}, - {isChange: true, balance: 0}, - {isChange: false, balance: 0}, - {isChange: true, balance: 0}, - {isChange: false, balance: 0} - ]; + var addresses = [{ + isChange: true, + balance: 0 + }, { + isChange: false, + balance: 0 + }, { + isChange: true, + balance: 0 + }, { + isChange: false, + balance: 0 + }, { + isChange: true, + balance: 0 + }, { + isChange: false, + balance: 0 + }, { + isChange: true, + balance: 0 + }, { + isChange: false, + balance: 0 + }]; expect(limitAddress(addresses, false).length).to.equal(1); addresses[0].isChange = false; diff --git a/test/unit/services/servicesSpec.js b/test/unit/services/servicesSpec.js index 9e658c42b..4bb1e959b 100644 --- a/test/unit/services/servicesSpec.js +++ b/test/unit/services/servicesSpec.js @@ -126,7 +126,7 @@ describe("Unit: isMobile Service", function() { isMobile.any().should.equal(false); })); it('should detect mobile if user agent is Android', inject(function(isMobile) { - navigator.__defineGetter__('userAgent', function(){ + navigator.__defineGetter__('userAgent', function() { return 'Android 2.2.3'; }); isMobile.any().should.equal(true);