/ Check-in [29e3c8da]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Updated and added new test cases for CLI.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 29e3c8da1bd3971215036e5f5cfa5b25c6caa81f
User & Date: shaneh 2009-12-17 21:07:54
Context
2009-12-17
22:12
Fixed some TCL test cases to work if SQLITE_OMIT_TRIGGER is defined. check-in: 85e3c734 user: shaneh tags: trunk
21:07
Updated and added new test cases for CLI. check-in: 29e3c8da user: shaneh tags: trunk
21:07
In shell.c (CLI), modified local_getline() to remove '\r' as well as '\n' from end of lines. This provides consistency between MSVC and CYGWIN builds. check-in: b1b48be1 user: shaneh tags: trunk
Changes
Hide Diffs Unified Diffs Show Whitespace Changes Patch

Changes to tool/shell1.test.

19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
...
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
...
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
...
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
...
699
700
701
702
703
704
705
706
707

#   shell1-1.*: Basic command line option handling.
#   shell1-2.*: Basic "dot" command token parsing.
#   shell1-3.*: Basic test that "dot" command can be called.
#

package require sqlite3

set CLI "./sqlite"

proc do_test {name cmd expected} {
  puts -nonewline "$name ..."
  set res [uplevel $cmd]
  if {$res eq $expected} {
    puts Ok
  } else {
................................................................................
}

proc catchsql {sql} {
  set rc [catch {uplevel [list db eval $sql]} msg]
  list $rc $msg
}

proc catchcmd {db cmd} {
  global CLI
  set out [open cmds.txt w]
  puts $out $cmd
  close $out
  set line "exec $CLI $db < cmds.txt"
  set rc [catch { eval $line } msg]
  list $rc $msg
................................................................................
do_test shell1-1.1.2 {
  set res [catchcmd "-bad test.db \"select 3\" \"select 4\"" ""]
  set rc [lindex $res 0]
  list $rc \
       [regexp {Error: too many options: "select 4"} $res]
} {1 1}
# error on extra options
do_test shell1-1.3.2 {
  set res [catchcmd "-bad FOO test.db BAD" ".quit"]
  set rc [lindex $res 0]
  list $rc \
       [regexp {Error: too many options: "BAD"} $res]
} {1 1}

# -help
................................................................................
  list $rc \
       [regexp {Error: missing argument for option: -nullvalue} $res]
} {1 1}

# -version             show SQLite version
do_test shell1-1.16.1 {
  catchcmd "-version test.db" "" 
} {0 3.6.20}

#----------------------------------------------------------------------------
# Test cases shell1-2.*: Basic "dot" command token parsing.
#

# check first token handling
do_test shell1-2.1.1 {
................................................................................
#

# .backup ?DB? FILE      Backup DB (default "main") to FILE
do_test shell1-3.1.1 {
  catchcmd " test.db" ".backup"
} {1 {Error: unknown command or invalid arguments:  "backup". Enter ".help" for help}}
do_test shell1-3.1.2 {
  # catchcmd " test.db" ".backup FOO"
  #TBD!!! this asserts currently
} {}
do_test shell1-3.1.3 {
  catchcmd " test.db" ".backup FOO BAR"
} {1 {Error: unknown database FOO}}
do_test shell1-3.1.4 {
  # too many arguments
  catchcmd " test.db" ".backup FOO BAR BAD"
} {1 {Error: unknown command or invalid arguments:  "backup". Enter ".help" for help}}
................................................................................
} {1 {Error: unknown command or invalid arguments:  "read". Enter ".help" for help}}

# .restore ?DB? FILE     Restore content of DB (default "main") from FILE
do_test shell1-3.20.1 {
  catchcmd " test.db" ".restore"
} {1 {Error: unknown command or invalid arguments:  "restore". Enter ".help" for help}}
do_test shell1-3.20.2 {
  # catchcmd " test.db" ".restore FOO"
  #TBD!!! this asserts currently
} {}
do_test shell1-3.20.3 {
  catchcmd " test.db" ".restore FOO BAR"
} {1 {Error: unknown database FOO}}
do_test shell1-3.20.4 {
  # too many arguments
  catchcmd " test.db" ".restore FOO BAR BAD"
} {1 {Error: unknown command or invalid arguments:  "restore". Enter ".help" for help}}
................................................................................
do_test shell1-3.27.3 {
  catchcmd " test.db" ".timer OFF"
} {0 {}}
do_test shell1-3.27.4 {
  # too many arguments
  catchcmd " test.db" ".timer OFF BAD"
} {1 {Error: unknown command or invalid arguments:  "timer". Enter ".help" for help}}

# 








|







 







|







 







|







 







|







 







|
<
|







 







|
<
|







 








|
>
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
...
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
...
272
273
274
275
276
277
278
279

280
281
282
283
284
285
286
287
...
583
584
585
586
587
588
589
590

591
592
593
594
595
596
597
598
...
697
698
699
700
701
702
703
704
705
706
#   shell1-1.*: Basic command line option handling.
#   shell1-2.*: Basic "dot" command token parsing.
#   shell1-3.*: Basic test that "dot" command can be called.
#

package require sqlite3

set CLI "./sqlite3"

proc do_test {name cmd expected} {
  puts -nonewline "$name ..."
  set res [uplevel $cmd]
  if {$res eq $expected} {
    puts Ok
  } else {
................................................................................
}

proc catchsql {sql} {
  set rc [catch {uplevel [list db eval $sql]} msg]
  list $rc $msg
}

proc catchcmd {db {cmd ""}} {
  global CLI
  set out [open cmds.txt w]
  puts $out $cmd
  close $out
  set line "exec $CLI $db < cmds.txt"
  set rc [catch { eval $line } msg]
  list $rc $msg
................................................................................
do_test shell1-1.1.2 {
  set res [catchcmd "-bad test.db \"select 3\" \"select 4\"" ""]
  set rc [lindex $res 0]
  list $rc \
       [regexp {Error: too many options: "select 4"} $res]
} {1 1}
# error on extra options
do_test shell1-1.1.3 {
  set res [catchcmd "-bad FOO test.db BAD" ".quit"]
  set rc [lindex $res 0]
  list $rc \
       [regexp {Error: too many options: "BAD"} $res]
} {1 1}

# -help
................................................................................
  list $rc \
       [regexp {Error: missing argument for option: -nullvalue} $res]
} {1 1}

# -version             show SQLite version
do_test shell1-1.16.1 {
  catchcmd "-version test.db" "" 
} {0 3.6.21}

#----------------------------------------------------------------------------
# Test cases shell1-2.*: Basic "dot" command token parsing.
#

# check first token handling
do_test shell1-2.1.1 {
................................................................................
#

# .backup ?DB? FILE      Backup DB (default "main") to FILE
do_test shell1-3.1.1 {
  catchcmd "test.db" ".backup"
} {1 {Error: unknown command or invalid arguments:  "backup". Enter ".help" for help}}
do_test shell1-3.1.2 {
  catchcmd "test.db" ".backup FOO"

} {0 {}}
do_test shell1-3.1.3 {
  catchcmd "test.db" ".backup FOO BAR"
} {1 {Error: unknown database FOO}}
do_test shell1-3.1.4 {
  # too many arguments
  catchcmd "test.db" ".backup FOO BAR BAD"
} {1 {Error: unknown command or invalid arguments:  "backup". Enter ".help" for help}}
................................................................................
} {1 {Error: unknown command or invalid arguments:  "read". Enter ".help" for help}}

# .restore ?DB? FILE     Restore content of DB (default "main") from FILE
do_test shell1-3.20.1 {
  catchcmd "test.db" ".restore"
} {1 {Error: unknown command or invalid arguments:  "restore". Enter ".help" for help}}
do_test shell1-3.20.2 {
  catchcmd "test.db" ".restore FOO"

} {0 {}}
do_test shell1-3.20.3 {
  catchcmd "test.db" ".restore FOO BAR"
} {1 {Error: unknown database FOO}}
do_test shell1-3.20.4 {
  # too many arguments
  catchcmd "test.db" ".restore FOO BAR BAD"
} {1 {Error: unknown command or invalid arguments:  "restore". Enter ".help" for help}}
................................................................................
do_test shell1-3.27.3 {
  catchcmd "test.db" ".timer OFF"
} {0 {}}
do_test shell1-3.27.4 {
  # too many arguments
  catchcmd "test.db" ".timer OFF BAD"
} {1 {Error: unknown command or invalid arguments:  "timer". Enter ".help" for help}}


#

Changes to tool/shell2.test.

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Test plan:
#
#   shell2-1.*: Misc. test of various tickets and reported errors.
#

package require sqlite3

set CLI "./sqlite"

proc do_test {name cmd expected} {
  puts -nonewline "$name ..."
  set res [uplevel $cmd]
  if {$res eq $expected} {
    puts Ok
  } else {
................................................................................
}

proc catchsql {sql} {
  set rc [catch {uplevel [list db eval $sql]} msg]
  list $rc $msg
}

proc catchcmd {db cmd} {
  global CLI
  set out [open cmds.txt w]
  puts $out $cmd
  close $out
  set line "exec $CLI $db < cmds.txt"
  set rc [catch { eval $line } msg]
  list $rc $msg







|







 







|







17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Test plan:
#
#   shell2-1.*: Misc. test of various tickets and reported errors.
#

package require sqlite3

set CLI "./sqlite3"

proc do_test {name cmd expected} {
  puts -nonewline "$name ..."
  set res [uplevel $cmd]
  if {$res eq $expected} {
    puts Ok
  } else {
................................................................................
}

proc catchsql {sql} {
  set rc [catch {uplevel [list db eval $sql]} msg]
  list $rc $msg
}

proc catchcmd {db {cmd ""}} {
  global CLI
  set out [open cmds.txt w]
  puts $out $cmd
  close $out
  set line "exec $CLI $db < cmds.txt"
  set rc [catch { eval $line } msg]
  list $rc $msg

Added tool/shell3.test.























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
113
114
115
116
117
118
119
120
121
122
123
# 2009 Dec 16
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
#
# The focus of this file is testing the CLI shell tool.
#
# $Id: shell2.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
#

# Test plan:
#
#   shell3-1.*: Basic tests for running SQL statments from command line.
#   shell3-2.*: Basic tests for running SQL file from command line.
#

package require sqlite3

set CLI "./sqlite3"

proc do_test {name cmd expected} {
  puts -nonewline "$name ..."
  set res [uplevel $cmd]
  if {$res eq $expected} {
    puts Ok
  } else {
    puts Error
    puts "  Got: $res"
    puts "  Expected: $expected"
    exit
  }
}

proc execsql {sql} {
  uplevel [list db eval $sql]
}

proc catchsql {sql} {
  set rc [catch {uplevel [list db eval $sql]} msg]
  list $rc $msg
}

proc catchcmd {db {cmd ""}} {
  global CLI
  set out [open cmds.txt w]
  puts $out $cmd
  close $out
  set line "exec $CLI $db < cmds.txt"
  set rc [catch { eval $line } msg]
  list $rc $msg
}

file delete -force test.db test.db.journal
sqlite3 db test.db


#----------------------------------------------------------------------------
#   shell3-1.*: Basic tests for running SQL statments from command line.
#

# Run SQL statement from command line
do_test shell3-1.1 {
  file delete -force foo.db
  set rc [ catchcmd "foo.db \"CREATE TABLE t1(a);\"" ]
  set fexist [file exist foo.db]
  list $rc $fexist
} {{0 {}} 1}
do_test shell3-1.2 {
  catchcmd "foo.db" ".tables"
} {0 t1}
do_test shell3-1.3 {
  catchcmd "foo.db \"DROP TABLE t1;\""
} {0 {}}
do_test shell3-1.4 {
  catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-1.5 {
  catchcmd "foo.db \"CREATE TABLE t1(a); DROP TABLE t1;\""
} {0 {}}
do_test shell3-1.6 {
  catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-1.7 {
  catchcmd "foo.db \"CREATE TABLE\""
} {1 {Error: near "TABLE": syntax error}}

#----------------------------------------------------------------------------
#   shell3-2.*: Basic tests for running SQL file from command line.
#

# Run SQL file from command line
do_test shell3-2.1 {
  file delete -force foo.db
  set rc [ catchcmd "foo.db" "CREATE TABLE t1(a);" ]
  set fexist [file exist foo.db]
  list $rc $fexist
} {{0 {}} 1}
do_test shell3-2.2 {
  catchcmd "foo.db" ".tables"
} {0 t1}
do_test shell3-2.3 {
  catchcmd "foo.db" "DROP TABLE t1;"
} {0 {}}
do_test shell3-2.4 {
  catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-2.5 {
  catchcmd "foo.db" "CREATE TABLE t1(a); DROP TABLE t1;"
} {0 {}}
do_test shell3-2.6 {
  catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-2.7 {
  catchcmd "foo.db" "CREATE TABLE"
} {1 {Error: incomplete SQL: CREATE TABLE}}