(t *testing.T)
| 8 | ) |
| 9 | |
| 10 | func TestBasicParser(t *testing.T) { |
| 11 | g := NewGomegaWithT(t) |
| 12 | t.Run("parse expression succeeds", func(t *testing.T) { |
| 13 | s := "name=max" |
| 14 | parser := NewParser(s) |
| 15 | expr, err := parser.parseExpression() |
| 16 | g.Expect(err).To(BeNil()) |
| 17 | g.Expect(expr).To(Equal(&Expression{ |
| 18 | Field: "name", |
| 19 | Comparator: "=", |
| 20 | Value: "max", |
| 21 | })) |
| 22 | }) |
| 23 | t.Run("parse expression succeeds with whitespace", func(t *testing.T) { |
| 24 | s := "name= max " |
| 25 | parser := NewParser(s) |
| 26 | expr, err := parser.parseExpression() |
| 27 | g.Expect(err).To(BeNil()) |
| 28 | g.Expect(expr).To(Equal(&Expression{ |
| 29 | Field: "name", |
| 30 | Comparator: "=", |
| 31 | Value: "max", |
| 32 | })) |
| 33 | }) |
| 34 | t.Run("parse expression fails invalid", func(t *testing.T) { |
| 35 | s := "name==dog" |
| 36 | parser := NewParser(s) |
| 37 | _, err := parser.parseExpression() |
| 38 | g.Expect(err).ToNot(BeNil()) |
| 39 | }) |
| 40 | t.Run("parse operations badly formatted return errors", func(t *testing.T) { |
| 41 | tests := []string{ |
| 42 | "name=max AND AND artifact=wow", |
| 43 | "name=max artifact=wow", |
| 44 | ")(name = max)", |
| 45 | } |
| 46 | for _, test := range tests { |
| 47 | parser := NewParser(test) |
| 48 | _, err := parser.parseOperation() |
| 49 | g.Expect(err).ToNot(BeNil(), fmt.Sprintf("failed case: `%s`", test)) |
| 50 | } |
| 51 | }) |
| 52 | t.Run("parse operations correctly formatted succeeds", func(t *testing.T) { |
| 53 | test := "name=max AND artifact%art1" |
| 54 | parser := NewParser(test) |
| 55 | expected := &Operation{ |
| 56 | LeftNode: &Expression{ |
| 57 | Field: "name", |
| 58 | Comparator: "=", |
| 59 | Value: "max", |
| 60 | }, |
| 61 | Gate: "AND", |
| 62 | RightNode: &Expression{ |
| 63 | Field: "artifact", |
| 64 | Comparator: "%", |
| 65 | Value: "art1", |
| 66 | }, |
| 67 | } |
nothing calls this directly
no test coverage detected