File: syntax_test.go

package info (click to toggle)
aptly 1.6.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 49,928 kB
  • sloc: python: 10,398; sh: 252; makefile: 184
file content (112 lines) | stat: -rw-r--r-- 4,214 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package query

import (
	"regexp"

	"github.com/aptly-dev/aptly/deb"

	. "gopkg.in/check.v1"
)

type SyntaxSuite struct {
}

var _ = Suite(&SyntaxSuite{})

func (s *SyntaxSuite) TestParsing(c *C) {
	l, _ := lex("query", "package (<< 1.3~dev), $Source")
	q, err := parse(l)

	c.Assert(err, IsNil)
	c.Check(q.(*deb.AndQuery).L, DeepEquals, &deb.DependencyQuery{Dep: deb.Dependency{Pkg: "package", Relation: deb.VersionLess, Version: "1.3~dev"}})
	c.Check(q.(*deb.AndQuery).R, DeepEquals, &deb.FieldQuery{Field: "$Source"})

	l, _ = lex("query", "package (1.3), Name (lala) | !$Source")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q.(*deb.OrQuery).L.(*deb.AndQuery).L, DeepEquals, &deb.DependencyQuery{Dep: deb.Dependency{Pkg: "package", Relation: deb.VersionEqual, Version: "1.3"}})
	c.Check(q.(*deb.OrQuery).L.(*deb.AndQuery).R, DeepEquals, &deb.FieldQuery{Field: "Name", Relation: deb.VersionEqual, Value: "lala"})
	c.Check(q.(*deb.OrQuery).R.(*deb.NotQuery).Q, DeepEquals, &deb.FieldQuery{Field: "$Source"})

	l, _ = lex("query", "package, ((!(Name | $Source (~ a.*))))")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q.(*deb.AndQuery).L, DeepEquals, &deb.DependencyQuery{Dep: deb.Dependency{Pkg: "package", Relation: deb.VersionDontCare}})
	c.Check(q.(*deb.AndQuery).R.(*deb.NotQuery).Q.(*deb.OrQuery).L, DeepEquals, &deb.FieldQuery{Field: "Name", Relation: deb.VersionDontCare})
	c.Check(q.(*deb.AndQuery).R.(*deb.NotQuery).Q.(*deb.OrQuery).R, DeepEquals, &deb.FieldQuery{Field: "$Source", Relation: deb.VersionRegexp, Value: "a.*",
		Regexp: regexp.MustCompile("a.*")})

	l, _ = lex("query", "package (> 5.3.7)")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q, DeepEquals, &deb.DependencyQuery{Dep: deb.Dependency{Pkg: "package", Relation: deb.VersionGreaterOrEqual, Version: "5.3.7"}})

	l, _ = lex("query", "package (~ 5\\.3.*~dev)")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q, DeepEquals, &deb.DependencyQuery{Dep: deb.Dependency{Pkg: "package", Relation: deb.VersionRegexp, Version: "5\\.3.*~dev",
		Regexp: regexp.MustCompile(`5\.3.*~dev`)}})

	l, _ = lex("query", "alien-data_1.3.4~dev_i386")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q, DeepEquals, &deb.PkgQuery{Pkg: "alien-data", Version: "1.3.4~dev", Arch: "i386"})

	l, _ = lex("query", "Alien-data_1.3.4~dev_i386")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q, DeepEquals, &deb.PkgQuery{Pkg: "Alien-data", Version: "1.3.4~dev", Arch: "i386"})

	l, _ = lex("query", "Name")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q, DeepEquals, &deb.FieldQuery{Field: "Name"})

	l, _ = lex("query", "package (> 5.3.7) {amd64}")
	q, err = parse(l)

	c.Assert(err, IsNil)
	c.Check(q, DeepEquals, &deb.DependencyQuery{
		Dep: deb.Dependency{Pkg: "package", Relation: deb.VersionGreaterOrEqual, Version: "5.3.7", Architecture: "amd64"}})
}

func (s *SyntaxSuite) TestParsingErrors(c *C) {
	l, _ := lex("query", "package (> 5.3.7), ")
	_, err := parse(l)
	c.Check(err, ErrorMatches, "parsing failed: unexpected token <EOL>: expecting field or package name")

	l, _ = lex("query", "package>5.3.7)")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: unexpected token \\): expecting end of query")

	l, _ = lex("query", "package | !|")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: unexpected token |: expecting field or package name")

	l, _ = lex("query", "((package )")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: unexpected token <EOL>: expecting '\\)'")

	l, _ = lex("query", "!package )")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: unexpected token \\): expecting end of query")

	l, _ = lex("query", "'package )")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: unexpected token error: unexpected eof in quoted string: expecting field or package name")

	l, _ = lex("query", "package (~ 1.2[34)")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: regexp compile failed: error parsing regexp: missing closing \\]: `\\[34`")

	l, _ = lex("query", "$Name (~ 1.2[34)")
	_, err = parse(l)
	c.Check(err, ErrorMatches, "parsing failed: regexp compile failed: error parsing regexp: missing closing \\]: `\\[34`")
}