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