Skip to content

Commit

Permalink
bug #83: fromTransformAttribute function doesn't parse exponential nu…
Browse files Browse the repository at this point in the history
…mbers (#84)

* adds tests about bug #83

* standardJS

* fixes fromTransformAttribute issue when parsing exponential values
  • Loading branch information
chrvadala authored Jan 5, 2021
1 parent 2cb575d commit e6d5e0e
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 13 deletions.
23 changes: 13 additions & 10 deletions src/fromTransformAttribute.autogenerated.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions src/fromTransformAttribute.pegjs
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,15 @@ integerConstant
= ds:digitSequence { return ds.join(""); }

floatingPointConstant
= fractionalConstant exponent?
/ digitSequence exponent
= f:fractionalConstant e:exponent? { return [f, e || null].join("")}
/ d:digitSequence e:exponent { return [d, e].join("")}

fractionalConstant "fractionalConstant"
= d1:digitSequence? "." d2:digitSequence { return [d1 ? d1.join("") : null, ".", d2.join("")].join(""); }
/ d:digitSequence "." { return d.join(""); }

exponent
= [eE] sign? digitSequence
= [eE] s:sign? d:digitSequence { return ['e', s, d.join("")].join("") }

sign
= [+-]
Expand Down
3 changes: 3 additions & 0 deletions test/fromString.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,8 @@ describe('fromString', () => {
expect(fromString.bind(this, 'matrix()')).toThrow()
expect(fromString.bind(this, 'matrix(1,2,3,4,5)')).toThrow()
expect(fromString.bind(this, 'matrix(a,b,c,d,e,f)')).toThrow()

expect(fromString('matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,440,-350)'))
.toEqual({ a: 6.123233995736766e-17, b: 1, c: -1, d: 6.123233995736766e-17, e: 440, f: -350 })
})
})
18 changes: 18 additions & 0 deletions test/fromTransformAttribute.pegjs.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ describe('fromTransformAttribute.pegjs', () => {
expect(parse('skewY(56.11)')).toEqual([{ type: 'skewY', angle: 56.11 }])

expect(parse('matrix(1 2 3,4,5 6)')).toEqual([{ type: 'matrix', a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }])

expect(parse('matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,440,-350)'))
.toEqual([{ type: 'matrix', a: 6.123233995736766e-17, b: 1, c: -1, d: 6.123233995736766e-17, e: 440, f: -350 }])
})

it('should throw exception', () => {
Expand All @@ -28,6 +31,21 @@ describe('fromTransformAttribute.pegjs', () => {
})
})

describe('exponential values', () => {
it('should parse without errors', () => {
// it is tested with rotate function, but it doesn't matter because any parser make use of the same number parser
expect(parse('rotate(1e1)')).toEqual([{ type: 'rotate', angle: 1e1 }])
expect(parse('rotate(-1e1)')).toEqual([{ type: 'rotate', angle: -1e1 }])
expect(parse('rotate(1e-1)')).toEqual([{ type: 'rotate', angle: 1e-1 }])
expect(parse('rotate(-1e-1)')).toEqual([{ type: 'rotate', angle: -1e-1 }])

expect(parse('rotate(1.1e1)')).toEqual([{ type: 'rotate', angle: 1.1e1 }])
expect(parse('rotate(-1.1e1)')).toEqual([{ type: 'rotate', angle: -1.1e1 }])
expect(parse('rotate(1.1e-1)')).toEqual([{ type: 'rotate', angle: 1.1e-1 }])
expect(parse('rotate(-1.1e-1)')).toEqual([{ type: 'rotate', angle: -1.1e-1 }])
})
})

describe('complex transformations', () => {
it('should parse in the right order', () => {
expect(parse('translate(1,2) translate(3,4) translate(5,6)')).toEqual([
Expand Down

0 comments on commit e6d5e0e

Please # to comment.