aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Finlay <542863+danfinlay@users.noreply.github.com>2017-10-10 05:15:09 +0800
committerGitHub <noreply@github.com>2017-10-10 05:15:09 +0800
commitf18615a82abafee1a648e8de6f60ecc54e1aabb4 (patch)
tree053914da168a427f0c644f81fa02119aca9ce5b5
parent7f70c866c3a74fadbc34f9b979902b89bba666f5 (diff)
parentd82d9215fbe593293a6badc523218878cfb13dd2 (diff)
downloadtangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.tar
tangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.tar.gz
tangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.tar.bz2
tangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.tar.lz
tangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.tar.xz
tangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.tar.zst
tangerine-wallet-browser-f18615a82abafee1a648e8de6f60ecc54e1aabb4.zip
Merge pull request #2296 from MetaMask/precision-fix
Fix precision to account for small wei increase.
-rw-r--r--test/unit/components/bn-as-decimal-input-test.js38
-rw-r--r--ui/app/components/bn-as-decimal-input.js11
2 files changed, 45 insertions, 4 deletions
diff --git a/test/unit/components/bn-as-decimal-input-test.js b/test/unit/components/bn-as-decimal-input-test.js
index 106b3a871..58ecc9c89 100644
--- a/test/unit/components/bn-as-decimal-input-test.js
+++ b/test/unit/components/bn-as-decimal-input-test.js
@@ -48,4 +48,42 @@ describe('BnInput', function () {
checkValidity () { return true } },
})
})
+
+ it('can tolerate wei precision', function (done) {
+ const renderer = ReactTestUtils.createRenderer()
+
+ let valueStr = '1000000000'
+
+ const value = new BN(valueStr, 10)
+ const inputStr = '1.000000001'
+
+
+ let targetStr = '1000000001'
+
+ const target = new BN(targetStr, 10)
+
+ const precision = 9 // gwei precision
+ const scale = 9
+
+ const props = {
+ value,
+ scale,
+ precision,
+ onChange: (newBn) => {
+ assert.equal(newBn.toString(), target.toString(), 'should tolerate increase')
+ const reInput = BnInput.prototype.downsize(newBn.toString(), 9, 9)
+ assert.equal(reInput.toString(), inputStr, 'should tolerate increase')
+ done()
+ },
+ }
+
+ const inputComponent = h(BnInput, props)
+ const component = additions.renderIntoDocument(inputComponent)
+ renderer.render(inputComponent)
+ const input = additions.find(component, 'input.hex-input')[0]
+ ReactTestUtils.Simulate.change(input, { preventDefault () {}, target: {
+ value: inputStr,
+ checkValidity () { return true } },
+ })
+ })
})
diff --git a/ui/app/components/bn-as-decimal-input.js b/ui/app/components/bn-as-decimal-input.js
index f3ace4720..d84834d06 100644
--- a/ui/app/components/bn-as-decimal-input.js
+++ b/ui/app/components/bn-as-decimal-input.js
@@ -31,7 +31,7 @@ BnAsDecimalInput.prototype.render = function () {
const suffix = props.suffix
const style = props.style
const valueString = value.toString(10)
- const newValue = this.downsize(valueString, scale, precision)
+ const newValue = this.downsize(valueString, scale)
return (
h('.flex-column', [
@@ -145,14 +145,17 @@ BnAsDecimalInput.prototype.constructWarning = function () {
}
-BnAsDecimalInput.prototype.downsize = function (number, scale, precision) {
+BnAsDecimalInput.prototype.downsize = function (number, scale) {
// if there is no scaling, simply return the number
if (scale === 0) {
return Number(number)
} else {
// if the scale is the same as the precision, account for this edge case.
- var decimals = (scale === precision) ? -1 : scale - precision
- return Number(number.slice(0, -scale) + '.' + number.slice(-scale, decimals))
+ var adjustedNumber = number
+ while (adjustedNumber.length < scale) {
+ adjustedNumber = '0' + adjustedNumber
+ }
+ return Number(adjustedNumber.slice(0, -scale) + '.' + adjustedNumber.slice(-scale))
}
}