Explorar o código

unquote, trimp space

Josh Yan hai 10 meses
pai
achega
4e986a823c
Modificáronse 2 ficheiros con 33 adicións e 1 borrados
  1. 8 1
      parser/parser.go
  2. 25 0
      parser/parser_test.go

+ 8 - 1
parser/parser.go

@@ -125,6 +125,7 @@ func ParseFile(r io.Reader) (*File, error) {
 				// pass
 			case stateValue:
 				s, ok := unquote(b.String())
+
 				if !ok || isSpace(r) {
 					if _, err := b.WriteRune(r); err != nil {
 						return nil, err
@@ -158,7 +159,13 @@ func ParseFile(r io.Reader) (*File, error) {
 	case stateComment, stateNil:
 		// pass; nothing to flush
 	case stateValue:
-		s, ok := unquote(b.String())
+		var s string
+		var ok bool
+		if cmd.Name == "model" {
+			s, ok = unquote(strings.TrimSpace(b.String()))
+		} else {
+			s, ok = unquote(b.String())
+		}
 		if !ok {
 			return nil, io.ErrUnexpectedEOF
 		}

+ 25 - 0
parser/parser_test.go

@@ -48,6 +48,26 @@ func TestParseFileFrom(t *testing.T) {
 		expected []Command
 		err      error
 	}{
+		{
+			"FROM \"FOO  BAR  \"",
+			[]Command{{Name: "model", Args: "FOO  BAR  "}},
+			nil,
+		},
+		{
+			"FROM \"FOO BAR\"\nPARAMETER param1 value1",
+			[]Command{{Name: "model", Args: "FOO BAR"}, {Name: "param1", Args: "value1"}},
+			nil,
+		},
+		{
+			"FROM     FOOO BAR    ",
+			[]Command{{Name: "model", Args: "FOOO BAR"}},
+			nil,
+		},
+		{
+			"FROM /what/is/the path ",
+			[]Command{{Name: "model", Args: "/what/is/the path"}},
+			nil,
+		},
 		{
 			"FROM foo",
 			[]Command{{Name: "model", Args: "foo"}},
@@ -86,6 +106,11 @@ func TestParseFileFrom(t *testing.T) {
 			[]Command{{Name: "param1", Args: "value1"}, {Name: "model", Args: "foo"}},
 			nil,
 		},
+		{
+			"PARAMETER what the \nFROM lemons make lemonade ",
+			[]Command{{Name: "what", Args: "the "}, {Name: "model", Args: "lemons make lemonade"}},
+			nil,
+		},
 	}
 
 	for _, c := range cases {