aboutsummaryrefslogtreecommitdiff
path: root/tests/parser.spec.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/parser.spec.ts93
1 files changed, 49 insertions, 44 deletions
diff --git a/tests/parser.spec.ts b/tests/parser.spec.ts
index bd71509..510e5bb 100644
--- a/tests/parser.spec.ts
+++ b/tests/parser.spec.ts
@@ -4,16 +4,27 @@ import {
whitespace,
whitespaces0,
delimited,
+ sepBy1,
+ symbol,
} from '../src/parser/utils'
import { parser } from '../src/parser'
import { none, some } from 'fp-ts/Option'
import { Expr, Literal } from '../src/types'
import { jlog } from '../src/utils'
-const wrap = (l: any) => right([[none, l, none], ''])
+const wrap = (e: Expr) =>
+ right([[none, e, none], ''])
+const grouped = (l: Expr[]) =>
+ wrap(Expr.Group({ exprs: l }))
+const groupedAlt = (l: Expr[]) =>
+ wrap(Expr.Or({ exprs: l }))
describe('Parser', () => {
it('should do shit', () => {
+ // jlog(parser(/ -2.05|\n2|true|\s|\T /.source))
+ })
+
+ it('should do shit', () => {
expect(digits('12901')).toEqual(right(['12901', '']))
expect(digits('12901asas')).toEqual(right(['12901', 'asas']))
expect(whitespace(' ')).toEqual(right([' ', '']))
@@ -28,18 +39,19 @@ describe('Parser', () => {
)
})
- it('should maybeshut', () => {
- expect(parser(/^ .\s(\n)\b \T $/.source)).toEqual(
+ it('should compount expressions', () => {
+ expect(parser(/^ .\s(\n\b) \T $/.source)).toEqual(
right([
[
some(Expr.Start()),
- [
- Expr.AnyItem(),
- Expr.AnyString(),
- Expr.Group({ exprs: [Expr.AnyNumber()] }),
- Expr.AnyBool(),
- Expr.Truthy(),
- ],
+ Expr.Group({
+ exprs: [
+ Expr.AnyItem(),
+ Expr.AnyString(),
+ Expr.Group({ exprs: [Expr.AnyNumber(), Expr.AnyBool()] }),
+ Expr.Truthy(),
+ ],
+ }),
some(Expr.End()),
],
'',
@@ -50,48 +62,41 @@ describe('Parser', () => {
right([
[
some(Expr.Start()),
- [
- Expr.ZeroOrMore({ expr: Expr.AnyString() }),
- Expr.Optional({ expr: Expr.Truthy() }),
- Expr.OneOrMore({ expr: Expr.AnyNumber() }),
- ],
+ Expr.Group({
+ exprs: [
+ Expr.ZeroOrMore({ expr: Expr.AnyString() }),
+ Expr.Optional({ expr: Expr.Truthy() }),
+ Expr.OneOrMore({ expr: Expr.AnyNumber() }),
+ ],
+ }),
some(Expr.End()),
],
'',
]),
)
+ })
+ it('should or expressions', () => {
expect(parser(/ \s|\b\T|\n /.source)).toEqual(
- right([
- [
- none,
- [
- Expr.Or({
- left: Expr.AnyString(),
- right: [
- Expr.AnyBool(),
- Expr.Or({
- left: Expr.Truthy(),
- right: [Expr.AnyNumber()],
- }),
- ],
- }),
- ],
- none,
- ],
- '',
+ groupedAlt([
+ Expr.AnyString(),
+ Expr.Group({ exprs: [Expr.AnyBool(), Expr.Truthy()] }),
+ Expr.AnyNumber(),
]),
)
})
it('object proprtyu', () => {
expect(parser(/ [name \s\T] [age \n] /.source)).toEqual(
- wrap([
+ grouped([
Expr.PropertyMatch({
name: 'name',
expr: Expr.Group({ exprs: [Expr.AnyString(), Expr.Truthy()] }),
}),
- Expr.PropertyMatch({ name: 'age', expr: Expr.Group({ exprs: [Expr.AnyNumber()] }) }),
+ Expr.PropertyMatch({
+ name: 'age',
+ expr: Expr.AnyNumber(),
+ }),
]),
)
})
@@ -99,35 +104,35 @@ describe('Parser', () => {
it('literals', () => {
// unsigned numbers
expect(parser(/ 0.105 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(0.105))]),
+ wrap(Expr.Literal(Literal.Number(0.105))),
)
expect(parser(/ 9 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(9))]),
+ wrap(Expr.Literal(Literal.Number(9))),
)
expect(parser(/ 23 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(23))]),
+ wrap(Expr.Literal(Literal.Number(23))),
)
// signed numbers
expect(parser(/ +23.025 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(23.025))]),
+ wrap(Expr.Literal(Literal.Number(23.025))),
)
expect(parser(/ -23.025 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(-23.025))]),
+ wrap(Expr.Literal(Literal.Number(-23.025))),
)
expect(parser(/ +23 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(23))]),
+ wrap(Expr.Literal(Literal.Number(23))),
)
expect(parser(/ -23 /.source)).toEqual(
- wrap([Expr.Literal(Literal.Number(-23))]),
+ wrap(Expr.Literal(Literal.Number(-23))),
)
// boolean
expect(parser(/ true /.source)).toEqual(
- wrap([Expr.Literal(Literal.Boolean(true))]),
+ wrap(Expr.Literal(Literal.Boolean(true))),
)
expect(parser(/ false /.source)).toEqual(
- wrap([Expr.Literal(Literal.Boolean(false))]),
+ wrap(Expr.Literal(Literal.Boolean(false))),
)
})
})