xref: /sqlite-3.40.0/test/shell4.test (revision 2f5f6740)
1# 2010 July 28
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12# The focus of this file is testing the CLI shell tool.
13# These tests are specific to the .stats command.
14#
15# 2015-03-19:  Added tests for .trace
16
17# Test plan:
18#
19#   shell4-1.*: Basic tests specific to the "stats" command.
20#   shell4-2.*: Basic tests for ".trace"
21#   shell4-3.*: The ".read" command takes the shell out of interactive mode
22#   shell4-4.*: Input redirects cannot recurse too much
23#
24set testdir [file dirname $argv0]
25source $testdir/tester.tcl
26set CLI [test_cli_invocation]
27set CLI_ONLY [test_find_cli]
28db close
29forcedelete test.db test.db-journal test.db-wal
30sqlite3 db test.db
31
32#----------------------------------------------------------------------------
33# Test cases shell4-1.*: Tests specific to the "stats" command.
34#
35
36# should default to off
37do_test shell4-1.1.1 {
38  set res [catchcmd "test.db" ".show"]
39  list [regexp {stats: off} $res]
40} {1}
41
42do_test shell4-1.1.2 {
43  set res [catchcmd "test.db" ".show"]
44  list [regexp {stats: on} $res]
45} {0}
46
47# -stats should turn it on
48do_test shell4-1.2.1 {
49  set res [catchcmd "-stats test.db" ".show"]
50  list [regexp {stats: on} $res]
51} {1}
52
53do_test shell4-1.2.2 {
54  set res [catchcmd "-stats test.db" ".show"]
55  list [regexp {stats: off} $res]
56} {0}
57
58# .stats ON|OFF          Turn stats on or off
59#do_test shell4-1.3.1 {
60#  catchcmd "test.db" ".stats"
61#} {1 {Usage: .stats on|off}}
62do_test shell4-1.3.2 {
63  catchcmd "test.db" ".stats ON"
64} {0 {}}
65do_test shell4-1.3.3 {
66  catchcmd "test.db" ".stats OFF"
67} {0 {}}
68do_test shell4-1.3.4 {
69  # too many arguments
70  catchcmd "test.db" ".stats OFF BAD"
71} {1 {Usage: .stats ?on|off|stmt|vmstep?}}
72
73# NB. whitespace is important
74do_test shell4-1.4.1 {
75  set res [catchcmd "test.db" {.show}]
76  list [regexp {stats: off} $res]
77} {1}
78
79do_test shell4-1.4.2 {
80  set res [catchcmd "test.db" {.stats ON
81.show
82}]
83  list [regexp {stats: on} $res]
84} {1}
85
86do_test shell4-1.4.3 {
87  set res [catchcmd "test.db" {.stats OFF
88.show
89}]
90  list [regexp {stats: off} $res]
91} {1}
92
93# make sure stats not present when off
94do_test shell4-1.5.1 {
95  set res [catchcmd "test.db" {SELECT 1;}]
96  list [regexp {Memory Used} $res] \
97       [regexp {Heap Usage} $res] \
98       [regexp {Autoindex Inserts} $res]
99} {0 0 0}
100
101# make sure stats are present when on
102do_test shell4-1.5.2 {
103  set res [catchcmd "test.db" {.stats ON
104SELECT 1;
105}]
106  list [regexp {Memory Used} $res] \
107       [regexp {Heap Usage} $res] \
108       [regexp {Autoindex Inserts} $res]
109} {1 1 1}
110
111ifcapable trace {
112do_test shell4-2.1 {
113  catchcmd ":memory:" "CREATE TABLE t1(x);\n.trace --unknown"
114} {1 {Unknown option "--unknown" on ".trace"}}
115do_test shell4-2.2 {
116  catchcmd ":memory:" "CREATE TABLE t1(x);\n.trace off\n.trace off\n"
117} {0 {}}
118do_test shell4-2.3 {
119  catchcmd ":memory:" ".trace stdout\n.dump\n.trace off\n"
120} {/^0 {PRAGMA.*}$/}
121do_test shell4-2.4 {
122  catchcmd ":memory:" ".trace stdout\nCREATE TABLE t1(x);SELECT * FROM t1;"
123} {0 {CREATE TABLE t1(x);
124SELECT * FROM t1;}}
125do_test shell4-2.5 {
126  catchcmd ":memory:" "CREATE TABLE t1(x);\n.trace stdout\nSELECT * FROM t1;"
127} {0 {SELECT * FROM t1;}}
128}
129
130do_test shell4-3.1 {
131  set fd [open t1.txt wb]
132  puts $fd "SELECT 'squirrel';"
133  close $fd
134  exec $::CLI_ONLY :memory: --interactive ".read t1.txt"
135} {squirrel}
136do_test shell4-3.2 {
137  set fd [open t1.txt wb]
138  puts $fd "SELECT 'pound: \302\243';"
139  close $fd
140  exec $::CLI_ONLY :memory: --interactive ".read t1.txt"
141} {pound: £}
142
143do_test shell4-4.1 {
144  set fd [open t1.txt wb]
145  puts $fd ".read t1.txt"
146  close $fd
147  catchcmd ":memory:" ".read t1.txt"
148} {1 {Input nesting limit (25) reached at line 1. Check recursion.}}
149
150finish_test
151