Skip to content

Commit c218b7d

Browse files
committed
Add json.Number test.
1 parent 22d91ba commit c218b7d

3 files changed

Lines changed: 85 additions & 62 deletions

File tree

attrexp_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,29 @@ func TestParseNumber(t *testing.T) {
7272
t.Error(test.nStr, i)
7373
}
7474

75+
// Check if equal to json.Decode.
76+
if i != number {
77+
t.Error(number, i)
78+
}
79+
}
80+
{ // Config with useNumber = true.
81+
d := json.NewDecoder(strings.NewReader(test.nStr))
82+
d.UseNumber()
83+
var number json.Number
84+
if err := d.Decode(&number); err != nil {
85+
t.Error(err)
86+
}
87+
88+
i, err := config{
89+
useNumber: true,
90+
}.parseNumber(n)
91+
if err != nil {
92+
t.Fatal(err)
93+
}
94+
if i != json.Number(test.nStr) {
95+
t.Error(test.nStr, i)
96+
}
97+
7598
// Check if equal to json.Decode.
7699
if i != number {
77100
t.Error(number, i)

filter.go

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -32,86 +32,86 @@ func parseFilter(raw []byte, c config) (Expression, error) {
3232
return c.parseFilterOr(node)
3333
}
3434

35-
func (p config) parseFilterOr(node *ast.Node) (Expression, error) {
36-
if node.Type != typ.FilterOr {
37-
return nil, invalidTypeError(typ.FilterOr, node.Type)
35+
func (p config) parseFilterAnd(node *ast.Node) (Expression, error) {
36+
if node.Type != typ.FilterAnd {
37+
return nil, invalidTypeError(typ.FilterAnd, node.Type)
3838
}
3939

4040
children := node.Children()
4141
if len(children) == 0 {
42-
return nil, invalidLengthError(typ.FilterOr, 1, 0)
42+
return nil, invalidLengthError(typ.FilterAnd, 1, 0)
4343
}
4444

4545
if len(children) == 1 {
46-
return p.parseFilterAnd(children[0])
46+
return p.parseFilterValue(children[0])
4747
}
4848

49-
var or LogicalExpression
49+
var and LogicalExpression
5050
for _, node := range children {
51-
exp, err := p.parseFilterAnd(node)
51+
exp, err := p.parseFilterValue(node)
5252
if err != nil {
5353
return nil, err
5454
}
5555
switch {
56-
case or.Left == nil:
57-
or.Left = exp
58-
case or.Right == nil:
59-
or.Right = exp
60-
or.Operator = OR
56+
case and.Left == nil:
57+
and.Left = exp
58+
case and.Right == nil:
59+
and.Right = exp
60+
and.Operator = AND
6161
default:
62-
or = LogicalExpression{
62+
and = LogicalExpression{
6363
Left: &LogicalExpression{
64-
Left: or.Left,
65-
Right: or.Right,
66-
Operator: OR,
64+
Left: and.Left,
65+
Right: and.Right,
66+
Operator: AND,
6767
},
6868
Right: exp,
69-
Operator: OR,
69+
Operator: AND,
7070
}
7171
}
7272
}
73-
return &or, nil
73+
return &and, nil
7474
}
7575

76-
func (p config) parseFilterAnd(node *ast.Node) (Expression, error) {
77-
if node.Type != typ.FilterAnd {
78-
return nil, invalidTypeError(typ.FilterAnd, node.Type)
76+
func (p config) parseFilterOr(node *ast.Node) (Expression, error) {
77+
if node.Type != typ.FilterOr {
78+
return nil, invalidTypeError(typ.FilterOr, node.Type)
7979
}
8080

8181
children := node.Children()
8282
if len(children) == 0 {
83-
return nil, invalidLengthError(typ.FilterAnd, 1, 0)
83+
return nil, invalidLengthError(typ.FilterOr, 1, 0)
8484
}
8585

8686
if len(children) == 1 {
87-
return p.parseFilterValue(children[0])
87+
return p.parseFilterAnd(children[0])
8888
}
8989

90-
var and LogicalExpression
90+
var or LogicalExpression
9191
for _, node := range children {
92-
exp, err := p.parseFilterValue(node)
92+
exp, err := p.parseFilterAnd(node)
9393
if err != nil {
9494
return nil, err
9595
}
9696
switch {
97-
case and.Left == nil:
98-
and.Left = exp
99-
case and.Right == nil:
100-
and.Right = exp
101-
and.Operator = AND
97+
case or.Left == nil:
98+
or.Left = exp
99+
case or.Right == nil:
100+
or.Right = exp
101+
or.Operator = OR
102102
default:
103-
and = LogicalExpression{
103+
or = LogicalExpression{
104104
Left: &LogicalExpression{
105-
Left: and.Left,
106-
Right: and.Right,
107-
Operator: AND,
105+
Left: or.Left,
106+
Right: or.Right,
107+
Operator: OR,
108108
},
109109
Right: exp,
110-
Operator: AND,
110+
Operator: OR,
111111
}
112112
}
113113
}
114-
return &and, nil
114+
return &or, nil
115115
}
116116

117117
func (p config) parseFilterValue(node *ast.Node) (Expression, error) {

valuepath.go

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,6 @@ func parseValuePath(raw []byte, c config) (ValuePath, error) {
3232
return c.parseValuePath(node)
3333
}
3434

35-
func (p config) parseValuePath(node *ast.Node) (ValuePath, error) {
36-
if node.Type != typ.ValuePath {
37-
return ValuePath{}, invalidTypeError(typ.ValuePath, node.Type)
38-
}
39-
40-
children := node.Children()
41-
if l := len(children); l != 2 {
42-
return ValuePath{}, invalidLengthError(typ.ValuePath, 2, l)
43-
}
44-
45-
attrPath, err := parseAttrPath(children[0])
46-
if err != nil {
47-
return ValuePath{}, err
48-
}
49-
50-
valueFilter, err := p.parseValueFilter(children[1])
51-
if err != nil {
52-
return ValuePath{}, err
53-
}
54-
55-
return ValuePath{
56-
AttributePath: attrPath,
57-
ValueFilter: valueFilter,
58-
}, nil
59-
}
60-
6135
func (p config) parseValueFilter(node *ast.Node) (Expression, error) {
6236
switch t := node.Type; t {
6337
case typ.ValueLogExpOr, typ.ValueLogExpAnd:
@@ -110,3 +84,29 @@ func (p config) parseValueFilter(node *ast.Node) (Expression, error) {
11084
return nil, invalidChildTypeError(typ.ValuePath, t)
11185
}
11286
}
87+
88+
func (p config) parseValuePath(node *ast.Node) (ValuePath, error) {
89+
if node.Type != typ.ValuePath {
90+
return ValuePath{}, invalidTypeError(typ.ValuePath, node.Type)
91+
}
92+
93+
children := node.Children()
94+
if l := len(children); l != 2 {
95+
return ValuePath{}, invalidLengthError(typ.ValuePath, 2, l)
96+
}
97+
98+
attrPath, err := parseAttrPath(children[0])
99+
if err != nil {
100+
return ValuePath{}, err
101+
}
102+
103+
valueFilter, err := p.parseValueFilter(children[1])
104+
if err != nil {
105+
return ValuePath{}, err
106+
}
107+
108+
return ValuePath{
109+
AttributePath: attrPath,
110+
ValueFilter: valueFilter,
111+
}, nil
112+
}

0 commit comments

Comments
 (0)