From c9075367a178644d12a179919aa07616938b7315 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sun, 21 Jan 2024 17:48:28 +0530 Subject: fix: fixes nested fixity issue --- tests/parser.spec.ts | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'tests/parser.spec.ts') diff --git a/tests/parser.spec.ts b/tests/parser.spec.ts index 16480e6..6e8431d 100644 --- a/tests/parser.spec.ts +++ b/tests/parser.spec.ts @@ -285,5 +285,62 @@ describe('parser', () => { }), ]) }) + + it('preserves order of operations (same operator)', () => { + expect(parse(`calc(30 - 5 - 3)`)).toEqual([ + Expr.Call({ + name: 'calc', + args: [ + Expr.BinOp({ + op: '-', + left: Expr.BinOp({ + op: '-', + left: Expr.LiteralNumber({ value: 30, unit: '' }), + right: Expr.LiteralNumber({ value: 5, unit: '' }), + }), + right: Expr.LiteralNumber({ value: 3, unit: '' }), + }), + ], + }), + ]) + }) + + it('preserves order of operations (different operators, same precedance)', () => { + expect(parse(`calc(30 + 5 - 3)`)).toEqual([ + Expr.Call({ + name: 'calc', + args: [ + Expr.BinOp({ + op: '-', + left: Expr.BinOp({ + op: '+', + left: Expr.LiteralNumber({ value: 30, unit: '' }), + right: Expr.LiteralNumber({ value: 5, unit: '' }), + }), + right: Expr.LiteralNumber({ value: 3, unit: '' }), + }), + ], + }), + ]) + }) + + it('preserves order of operations (different operators, different precedance)', () => { + expect(parse(`calc(30 / 5 * 3)`)).toEqual([ + Expr.Call({ + name: 'calc', + args: [ + Expr.BinOp({ + op: '*', + left: Expr.BinOp({ + op: '/', + left: Expr.LiteralNumber({ value: 30, unit: '' }), + right: Expr.LiteralNumber({ value: 5, unit: '' }), + }), + right: Expr.LiteralNumber({ value: 3, unit: '' }), + }), + ], + }), + ]) + }) }) }) -- cgit v1.3.1