filters: clean up implementation

Address a few cleanup items in the parser. Currently, we don't handle
compound values and we remove a panic when part of the input is not
consumed.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
Stephen J Day
2017-06-20 17:50:06 -07:00
parent 80656bf8ca
commit 3d5ee9e8b8
4 changed files with 49 additions and 33 deletions

View File

@@ -38,7 +38,7 @@ func TestScanner(t *testing.T) {
{pos: 0, token: tokenField, text: "name"},
{pos: 4, token: tokenOperator, text: "=="},
{pos: 6, token: tokenValue, text: "value"},
{pos: 11, token: tokenSelectorSeparator, text: ","},
{pos: 11, token: tokenSeparator, text: ","},
{pos: 12, token: tokenField, text: "foo"},
{pos: 15, token: tokenOperator, text: "!="},
{pos: 17, token: tokenValue, text: "bar"},
@@ -52,15 +52,15 @@ func TestScanner(t *testing.T) {
{pos: 0, token: tokenField, text: "name"},
{pos: 4, token: tokenOperator, text: "=="},
{pos: 6, token: tokenValue, text: "value"},
{pos: 11, token: tokenSelectorSeparator, text: ","},
{pos: 11, token: tokenSeparator, text: ","},
{pos: 12, token: tokenField, text: "labels"},
{pos: 18, token: tokenFieldSeparator, text: "."},
{pos: 18, token: tokenSeparator, text: "."},
{pos: 19, token: tokenField, text: "foo"},
{pos: 22, token: tokenOperator, text: "="},
{pos: 23, token: tokenValue, text: "value"},
{pos: 28, token: tokenSelectorSeparator, text: ","},
{pos: 28, token: tokenSeparator, text: ","},
{pos: 29, token: tokenField, text: "other"},
{pos: 34, token: tokenFieldSeparator, text: "."},
{pos: 34, token: tokenSeparator, text: "."},
{pos: 35, token: tokenField, text: "bar"},
{pos: 38, token: tokenOperator, text: "~="},
{pos: 40, token: tokenValue, text: "match"},
@@ -74,7 +74,7 @@ func TestScanner(t *testing.T) {
{pos: 0, token: tokenField, text: "name"},
{pos: 4, token: tokenOperator, text: "~="},
{pos: 6, token: tokenValue, text: "[abc]+"},
{pos: 12, token: tokenSelectorSeparator, text: ","},
{pos: 12, token: tokenSeparator, text: ","},
{pos: 13, token: tokenField, text: "foo"},
{pos: 16, token: tokenOperator, text: "="},
{pos: 17, token: tokenValue, text: "test"},
@@ -88,7 +88,7 @@ func TestScanner(t *testing.T) {
{pos: 0, token: tokenField, text: "name"},
{pos: 4, token: tokenOperator, text: "~="},
{pos: 6, token: tokenValue, text: "[abc]\\+"},
{pos: 13, token: tokenSelectorSeparator, text: ","},
{pos: 13, token: tokenSeparator, text: ","},
{pos: 14, token: tokenField, text: "foo"},
{pos: 17, token: tokenOperator, text: "="},
{pos: 18, token: tokenValue, text: "test"},
@@ -102,9 +102,9 @@ func TestScanner(t *testing.T) {
{pos: 0, token: tokenField, text: "name"},
{pos: 4, token: tokenOperator, text: "~="},
{pos: 6, token: tokenValue, text: "牛"},
{pos: 9, token: tokenSelectorSeparator, text: ","},
{pos: 9, token: tokenSeparator, text: ","},
{pos: 10, token: tokenField, text: "labels"},
{pos: 16, token: tokenFieldSeparator, text: "."},
{pos: 16, token: tokenSeparator, text: "."},
{pos: 17, token: tokenField, text: "moo"},
{pos: 20, token: tokenOperator, text: "="},
{pos: 21, token: tokenValue, text: "true"},
@@ -141,6 +141,18 @@ func TestScanner(t *testing.T) {
{pos: 13, token: tokenEOF},
},
},
{
name: "ValuesPunctauted",
input: "compound.labels==punctuated_value.foo-bar",
expected: []tokenResult{
{pos: 0, token: tokenField, text: "compound"},
{pos: 8, token: tokenSeparator, text: "."},
{pos: 9, token: tokenField, text: "labels"},
{pos: 15, token: tokenOperator, text: "=="},
{pos: 17, token: tokenValue, text: "punctuated_value.foo-bar"},
{pos: 41, token: tokenEOF},
},
},
{
name: "PartialInput",
input: "interrupted=",
@@ -166,7 +178,7 @@ func TestScanner(t *testing.T) {
input: `"leading quote".postquote==value`,
expected: []tokenResult{
{pos: 0, token: tokenQuoted, text: "\"leading quote\""},
{pos: 15, token: tokenFieldSeparator, text: "."},
{pos: 15, token: tokenSeparator, text: "."},
{pos: 16, token: tokenField, text: "postquote"},
{pos: 25, token: tokenOperator, text: "=="},
{pos: 27, token: tokenValue, text: "value"},
@@ -179,7 +191,7 @@ func TestScanner(t *testing.T) {
expected: []tokenResult{
{pos: 0, token: tokenField, text: "input"},
{pos: 5, token: tokenOperator, text: "=="},
{pos: 7, token: tokenSelectorSeparator, text: ","},
{pos: 7, token: tokenSeparator, text: ","},
{pos: 8, token: tokenValue, text: "id?=ff"},
{pos: 14, token: tokenEOF},
},