mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-09 23:24:05 -08:00
193 lines
2.9 KiB
Plaintext
193 lines
2.9 KiB
Plaintext
package main
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
type lexTest struct {
|
|
name string
|
|
input string
|
|
elements []element
|
|
}
|
|
|
|
var (
|
|
tEof = element{itemEof, ""}
|
|
tOpenRuleset = element{itemOpenBracket, "{"}
|
|
tCloseBracket = element{itemCloseBracket, "}"}
|
|
tIllegal = element{itemError, "illegal input"}
|
|
tSet = element{itemSetKeyword, "set"}
|
|
tEqual = element{itemEqual, "="}
|
|
tQuote = element{itemQuote, `"`}
|
|
tSemicolon = element{itemSemicolon, ";"}
|
|
tRules = element{itemRulesKeyword, "rules"}
|
|
)
|
|
|
|
var lexTests = []lexTest{
|
|
{
|
|
"empty",
|
|
"",
|
|
[]element{
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"empty with new line",
|
|
"\n\n",
|
|
[]element{
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"one empty ruleset",
|
|
"{}",
|
|
[]element{
|
|
tOpenRuleset,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"one empty ruleset distributed over new line",
|
|
"{\n}",
|
|
[]element{
|
|
tOpenRuleset,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"two empty rulesets",
|
|
"{} {}",
|
|
[]element{
|
|
tOpenRuleset,
|
|
tCloseBracket,
|
|
tOpenRuleset,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"two empty rulesets distributed over new line",
|
|
"{}\n{}",
|
|
[]element{
|
|
tOpenRuleset,
|
|
tCloseBracket,
|
|
tOpenRuleset,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"garbage",
|
|
"garbage",
|
|
[]element{tIllegal},
|
|
},
|
|
{
|
|
"one set",
|
|
`{ set foo = "bar"; }`,
|
|
[]element{
|
|
tOpenRuleset,
|
|
tSet,
|
|
element{itemKey, "foo"},
|
|
tEqual,
|
|
tQuote,
|
|
element{itemValue, "bar"},
|
|
tQuote,
|
|
tSemicolon,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"one set over multiple lines",
|
|
`{
|
|
set
|
|
foo
|
|
=
|
|
"bar"
|
|
;
|
|
}`,
|
|
[]element{tOpenRuleset, tSet, element{itemKey, "foo"}, tEqual, tQuote, element{itemValue, "bar"}, tQuote, tSemicolon, tCloseBracket, tEof},
|
|
},
|
|
{
|
|
"two sets",
|
|
`{ set foo = "bar";set baz = "qux"; }`,
|
|
[]element{
|
|
tOpenRuleset,
|
|
tSet,
|
|
element{itemKey, "foo"},
|
|
tEqual,
|
|
tQuote,
|
|
element{itemValue, "bar"},
|
|
tQuote,
|
|
tSemicolon,
|
|
tSet,
|
|
element{itemKey, "baz"},
|
|
tEqual,
|
|
tQuote,
|
|
element{itemValue, "qux"},
|
|
tQuote,
|
|
tSemicolon,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
{
|
|
"two over multiple lines",
|
|
`{ set foo = "bar";
|
|
set
|
|
baz
|
|
=
|
|
"qux"
|
|
;
|
|
}`,
|
|
[]element{
|
|
tOpenRuleset,
|
|
tSet,
|
|
element{itemKey, "foo"},
|
|
tEqual,
|
|
tQuote,
|
|
element{itemValue, "bar"},
|
|
tQuote,
|
|
tSemicolon,
|
|
tSet,
|
|
element{itemKey, "baz"},
|
|
tEqual,
|
|
tQuote,
|
|
element{itemValue, "qux"},
|
|
tQuote,
|
|
tSemicolon,
|
|
tCloseBracket,
|
|
tEof,
|
|
},
|
|
},
|
|
}
|
|
|
|
func collect(l *lexTest) []element {
|
|
_, v := lex("", l.input)
|
|
|
|
emission := make([]element, 0)
|
|
|
|
for i := range v {
|
|
emission = append(emission, i)
|
|
}
|
|
|
|
return emission
|
|
}
|
|
|
|
func TestFoo(t *testing.T) {
|
|
for _, test := range lexTests {
|
|
e := collect(&test)
|
|
|
|
if len(e) != len(test.elements) {
|
|
t.Errorf("%s: got\n\n\t%v\nexpected\n\n\t%v", test.name, e, test.elements)
|
|
}
|
|
|
|
for i, _ := range test.elements {
|
|
if test.elements[i] != e[i] {
|
|
t.Errorf("%s[%d]: got\n\n\t%v\nexpected\n\n\t%v", test.name, i, e[i], test.elements[i])
|
|
}
|
|
}
|
|
}
|
|
}
|