blob: de4332c612b0402e2fb635e0b9a73cd9bec96fe0 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package reader
import (
"io"
"reflect"
"testing"
)
type stringPrompter struct {
lines []string
curr int
}
func (s *stringPrompter) Close() {
}
func (s *stringPrompter) InitialPrompt() (string, error) {
if s.curr >= len(s.lines) {
return "", io.EOF
}
q := s.lines[s.curr]
s.curr++
return q, nil
}
func (s *stringPrompter) ContinuePrompt() (string, error) {
return s.InitialPrompt()
}
func (s *stringPrompter) AppendHistory(query string) {
}
func TestGetQuery(t *testing.T) {
type testCase struct {
lines []string
queries []string
}
tests := []testCase{
{ // Single query.
[]string{"select k from C;"},
[]string{"select k from C"},
},
{ // Multiple queries.
[]string{"select k from C;", "select bar from C;"},
[]string{"select k from C", "select bar from C"},
},
{ // Multiple queries on one line.
[]string{"select k from C; select bar from C;"},
[]string{"select k from C", " select bar from C"},
},
{ // Multiple queries without a ; are just one query.
[]string{"select k from C select bar from C;"},
[]string{"select k from C select bar from C"},
},
{ // Multiple queries without a ; are just one query.
[]string{"select k from C", "select bar from C;"},
[]string{"select k from C\nselect bar from C"},
},
{
[]string{"select\tfoo.bar from\nC;"},
[]string{"select\tfoo.bar from\nC"},
},
}
for _, test := range tests {
r := newT(&stringPrompter{lines: test.lines})
var queries []string
for true {
if q, err := r.GetQuery(); err != nil {
if err == io.EOF {
break
}
t.Errorf("test %v: unexpected error: %v", test.lines, err)
break
} else {
queries = append(queries, q)
}
}
if got, want := queries, test.queries; !reflect.DeepEqual(got, want) {
t.Errorf("test %#v: got %#v, want %#v", test.lines, got, want)
}
}
}