Annotation of embedaddon/sqlite3/tool/shell1.test, revision 1.1.1.1

1.1       misho       1: # 2009 Nov 11
                      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: #
                     14: # $Id: shell1.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
                     15: #
                     16: 
                     17: # Test plan:
                     18: #
                     19: #   shell1-1.*: Basic command line option handling.
                     20: #   shell1-2.*: Basic "dot" command token parsing.
                     21: #   shell1-3.*: Basic test that "dot" command can be called.
                     22: #
                     23: 
                     24: package require sqlite3
                     25: 
                     26: set CLI "./sqlite3"
                     27: 
                     28: proc do_test {name cmd expected} {
                     29:   puts -nonewline "$name ..."
                     30:   set res [uplevel $cmd]
                     31:   if {$res eq $expected} {
                     32:     puts Ok
                     33:   } else {
                     34:     puts Error
                     35:     puts "  Got: $res"
                     36:     puts "  Expected: $expected"
                     37:     exit
                     38:   }
                     39: }
                     40: 
                     41: proc execsql {sql} {
                     42:   uplevel [list db eval $sql]
                     43: }
                     44: 
                     45: proc catchsql {sql} {
                     46:   set rc [catch {uplevel [list db eval $sql]} msg]
                     47:   list $rc $msg
                     48: }
                     49: 
                     50: proc catchcmd {db {cmd ""}} {
                     51:   global CLI
                     52:   set out [open cmds.txt w]
                     53:   puts $out $cmd
                     54:   close $out
                     55:   set line "exec $CLI $db < cmds.txt"
                     56:   set rc [catch { eval $line } msg]
                     57:   list $rc $msg
                     58: }
                     59: 
                     60: file delete -force test.db test.db.journal
                     61: sqlite3 db test.db
                     62: 
                     63: #----------------------------------------------------------------------------
                     64: # Test cases shell1-1.*: Basic command line option handling.
                     65: #
                     66: 
                     67: # invalid option
                     68: do_test shell1-1.1.1 {
                     69:   set res [catchcmd "-bad test.db" ""]
                     70:   set rc [lindex $res 0]
                     71:   list $rc \
                     72:        [regexp {Error: unknown option: -bad} $res]
                     73: } {1 1}
                     74: # error on extra options
                     75: do_test shell1-1.1.2 {
                     76:   set res [catchcmd "-bad test.db \"select 3\" \"select 4\"" ""]
                     77:   set rc [lindex $res 0]
                     78:   list $rc \
                     79:        [regexp {Error: too many options: "select 4"} $res]
                     80: } {1 1}
                     81: # error on extra options
                     82: do_test shell1-1.1.3 {
                     83:   set res [catchcmd "-bad FOO test.db BAD" ".quit"]
                     84:   set rc [lindex $res 0]
                     85:   list $rc \
                     86:        [regexp {Error: too many options: "BAD"} $res]
                     87: } {1 1}
                     88: 
                     89: # -help
                     90: do_test shell1-1.2.1 {
                     91:   set res [catchcmd "-help test.db" ""]
                     92:   set rc [lindex $res 0]
                     93:   list $rc \
                     94:        [regexp {Usage} $res] \
                     95:        [regexp {\-init} $res] \
                     96:        [regexp {\-version} $res]
                     97: } {1 1 1 1}
                     98: 
                     99: # -init filename       read/process named file
                    100: do_test shell1-1.3.1 {
                    101:   catchcmd "-init FOO test.db" ""
                    102: } {0 {}}
                    103: do_test shell1-1.3.2 {
                    104:   set res [catchcmd "-init FOO test.db .quit BAD" ""]
                    105:   set rc [lindex $res 0]
                    106:   list $rc \
                    107:        [regexp {Error: too many options: "BAD"} $res]
                    108: } {1 1}
                    109: 
                    110: # -echo                print commands before execution
                    111: do_test shell1-1.4.1 {
                    112:   catchcmd "-echo test.db" "" 
                    113: } {0 {}}
                    114: 
                    115: # -[no]header          turn headers on or off
                    116: do_test shell1-1.5.1 {
                    117:   catchcmd "-header test.db" "" 
                    118: } {0 {}}
                    119: do_test shell1-1.5.2 {
                    120:   catchcmd "-noheader test.db" "" 
                    121: } {0 {}}
                    122: 
                    123: # -bail                stop after hitting an error
                    124: do_test shell1-1.6.1 {
                    125:   catchcmd "-bail test.db" "" 
                    126: } {0 {}}
                    127: 
                    128: # -interactive         force interactive I/O
                    129: do_test shell1-1.7.1 {
                    130:   set res [catchcmd "-interactive test.db" ".quit"]
                    131:   set rc [lindex $res 0]
                    132:   list $rc \
                    133:        [regexp {SQLite version} $res] \
                    134:        [regexp {Enter SQL statements} $res]
                    135: } {0 1 1}
                    136: 
                    137: # -batch               force batch I/O
                    138: do_test shell1-1.8.1 {
                    139:   catchcmd "-batch test.db" "" 
                    140: } {0 {}}
                    141: 
                    142: # -column              set output mode to 'column'
                    143: do_test shell1-1.9.1 {
                    144:   catchcmd "-column test.db" "" 
                    145: } {0 {}}
                    146: 
                    147: # -csv                 set output mode to 'csv'
                    148: do_test shell1-1.10.1 {
                    149:   catchcmd "-csv test.db" "" 
                    150: } {0 {}}
                    151: 
                    152: # -html                set output mode to HTML
                    153: do_test shell1-1.11.1 {
                    154:   catchcmd "-html test.db" "" 
                    155: } {0 {}}
                    156: 
                    157: # -line                set output mode to 'line'
                    158: do_test shell1-1.12.1 {
                    159:   catchcmd "-line test.db" "" 
                    160: } {0 {}}
                    161: 
                    162: # -list                set output mode to 'list'
                    163: do_test shell1-1.13.1 {
                    164:   catchcmd "-list test.db" "" 
                    165: } {0 {}}
                    166: 
                    167: # -separator 'x'       set output field separator (|)
                    168: do_test shell1-1.14.1 {
                    169:   catchcmd "-separator 'x' test.db" "" 
                    170: } {0 {}}
                    171: do_test shell1-1.14.2 {
                    172:   catchcmd "-separator x test.db" "" 
                    173: } {0 {}}
                    174: do_test shell1-1.14.3 {
                    175:   set res [catchcmd "-separator" ""]
                    176:   set rc [lindex $res 0]
                    177:   list $rc \
                    178:        [regexp {Error: missing argument for option: -separator} $res]
                    179: } {1 1}
                    180: 
                    181: # -stats               print memory stats before each finalize
                    182: do_test shell1-1.14b.1 {
                    183:   catchcmd "-stats test.db" "" 
                    184: } {0 {}}
                    185: 
                    186: # -nullvalue 'text'    set text string for NULL values
                    187: do_test shell1-1.15.1 {
                    188:   catchcmd "-nullvalue 'x' test.db" ""
                    189: } {0 {}}
                    190: do_test shell1-1.15.2 {
                    191:   catchcmd "-nullvalue x test.db" ""
                    192: } {0 {}}
                    193: do_test shell1-1.15.3 {
                    194:   set res [catchcmd "-nullvalue" ""]
                    195:   set rc [lindex $res 0]
                    196:   list $rc \
                    197:        [regexp {Error: missing argument for option: -nullvalue} $res]
                    198: } {1 1}
                    199: 
                    200: # -version             show SQLite version
                    201: do_test shell1-1.16.1 {
                    202:   set x [catchcmd "-version test.db" ""]
                    203:   regexp {0 \{3.\d.\d+ 20\d\d-[01]\d-\d\d \d\d:\d\d:\d\d [0-9a-f]+\}} $x 
                    204: } 1
                    205: 
                    206: #----------------------------------------------------------------------------
                    207: # Test cases shell1-2.*: Basic "dot" command token parsing.
                    208: #
                    209: 
                    210: # check first token handling
                    211: do_test shell1-2.1.1 {
                    212:   catchcmd "test.db" ".foo" 
                    213: } {1 {Error: unknown command or invalid arguments:  "foo". Enter ".help" for help}}
                    214: do_test shell1-2.1.2 {
                    215:   catchcmd "test.db" ".\"foo OFF\""
                    216: } {1 {Error: unknown command or invalid arguments:  "foo OFF". Enter ".help" for help}}
                    217: do_test shell1-2.1.3 {
                    218:   catchcmd "test.db" ".\'foo OFF\'"
                    219: } {1 {Error: unknown command or invalid arguments:  "foo OFF". Enter ".help" for help}}
                    220: 
                    221: # unbalanced quotes
                    222: do_test shell1-2.2.1 {
                    223:   catchcmd "test.db" ".\"foo OFF"
                    224: } {1 {Error: unknown command or invalid arguments:  "foo OFF". Enter ".help" for help}}
                    225: do_test shell1-2.2.2 {
                    226:   catchcmd "test.db" ".\'foo OFF"
                    227: } {1 {Error: unknown command or invalid arguments:  "foo OFF". Enter ".help" for help}}
                    228: do_test shell1-2.2.3 {
                    229:   catchcmd "test.db" ".explain \"OFF"
                    230: } {0 {}}
                    231: do_test shell1-2.2.4 {
                    232:   catchcmd "test.db" ".explain \'OFF"
                    233: } {0 {}}
                    234: do_test shell1-2.2.5 {
                    235:   catchcmd "test.db" ".mode \"insert FOO"
                    236: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    237: do_test shell1-2.2.6 {
                    238:   catchcmd "test.db" ".mode \'insert FOO"
                    239: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    240: 
                    241: # check multiple tokens, and quoted tokens
                    242: do_test shell1-2.3.1 {
                    243:   catchcmd "test.db" ".explain 1"
                    244: } {0 {}}
                    245: do_test shell1-2.3.2 {
                    246:   catchcmd "test.db" ".explain on"
                    247: } {0 {}}
                    248: do_test shell1-2.3.3 {
                    249:   catchcmd "test.db" ".explain \"1 2 3\""
                    250: } {0 {}}
                    251: do_test shell1-2.3.4 {
                    252:   catchcmd "test.db" ".explain \"OFF\""
                    253: } {0 {}}
                    254: do_test shell1-2.3.5 {
                    255:   catchcmd "test.db" ".\'explain\' \'OFF\'"
                    256: } {0 {}}
                    257: do_test shell1-2.3.6 {
                    258:   catchcmd "test.db" ".explain \'OFF\'"
                    259: } {0 {}}
                    260: do_test shell1-2.3.7 {
                    261:   catchcmd "test.db" ".\'explain\' \'OFF\'"
                    262: } {0 {}}
                    263: 
                    264: # check quoted args are unquoted
                    265: do_test shell1-2.4.1 {
                    266:   catchcmd "test.db" ".mode FOO"
                    267: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    268: do_test shell1-2.4.2 {
                    269:   catchcmd "test.db" ".mode csv"
                    270: } {0 {}}
                    271: do_test shell1-2.4.2 {
                    272:   catchcmd "test.db" ".mode \"csv\""
                    273: } {0 {}}
                    274: 
                    275: 
                    276: #----------------------------------------------------------------------------
                    277: # Test cases shell1-3.*: Basic test that "dot" command can be called.
                    278: #
                    279: 
                    280: # .backup ?DB? FILE      Backup DB (default "main") to FILE
                    281: do_test shell1-3.1.1 {
                    282:   catchcmd "test.db" ".backup"
                    283: } {1 {Error: unknown command or invalid arguments:  "backup". Enter ".help" for help}}
                    284: do_test shell1-3.1.2 {
                    285:   catchcmd "test.db" ".backup FOO"
                    286: } {0 {}}
                    287: do_test shell1-3.1.3 {
                    288:   catchcmd "test.db" ".backup FOO BAR"
                    289: } {1 {Error: unknown database FOO}}
                    290: do_test shell1-3.1.4 {
                    291:   # too many arguments
                    292:   catchcmd "test.db" ".backup FOO BAR BAD"
                    293: } {1 {Error: unknown command or invalid arguments:  "backup". Enter ".help" for help}}
                    294: 
                    295: # .bail ON|OFF           Stop after hitting an error.  Default OFF
                    296: do_test shell1-3.2.1 {
                    297:   catchcmd "test.db" ".bail"
                    298: } {1 {Error: unknown command or invalid arguments:  "bail". Enter ".help" for help}}
                    299: do_test shell1-3.2.2 {
                    300:   catchcmd "test.db" ".bail ON"
                    301: } {0 {}}
                    302: do_test shell1-3.2.3 {
                    303:   catchcmd "test.db" ".bail OFF"
                    304: } {0 {}}
                    305: do_test shell1-3.2.4 {
                    306:   # too many arguments
                    307:   catchcmd "test.db" ".bail OFF BAD"
                    308: } {1 {Error: unknown command or invalid arguments:  "bail". Enter ".help" for help}}
                    309: 
                    310: # .databases             List names and files of attached databases
                    311: do_test shell1-3.3.1 {
                    312:   set res [catchcmd "test.db" ".databases"]
                    313:   regexp {0.*main.*test\.db} $res
                    314: } {1}
                    315: do_test shell1-3.3.2 {
                    316:   # too many arguments
                    317:   catchcmd "test.db" ".databases BAD"
                    318: } {1 {Error: unknown command or invalid arguments:  "databases". Enter ".help" for help}}
                    319: 
                    320: # .dump ?TABLE? ...      Dump the database in an SQL text format
                    321: #                          If TABLE specified, only dump tables matching
                    322: #                          LIKE pattern TABLE.
                    323: do_test shell1-3.4.1 {
                    324:   set res [catchcmd "test.db" ".dump"]
                    325:   list [regexp {BEGIN TRANSACTION;} $res] \
                    326:        [regexp {COMMIT;} $res]
                    327: } {1 1}
                    328: do_test shell1-3.4.2 {
                    329:   set res [catchcmd "test.db" ".dump FOO"]
                    330:   list [regexp {BEGIN TRANSACTION;} $res] \
                    331:        [regexp {COMMIT;} $res]
                    332: } {1 1}
                    333: do_test shell1-3.4.3 {
                    334:   # too many arguments
                    335:   catchcmd "test.db" ".dump FOO BAD"
                    336: } {1 {Error: unknown command or invalid arguments:  "dump". Enter ".help" for help}}
                    337: 
                    338: # .echo ON|OFF           Turn command echo on or off
                    339: do_test shell1-3.5.1 {
                    340:   catchcmd "test.db" ".echo"
                    341: } {1 {Error: unknown command or invalid arguments:  "echo". Enter ".help" for help}}
                    342: do_test shell1-3.5.2 {
                    343:   catchcmd "test.db" ".echo ON"
                    344: } {0 {}}
                    345: do_test shell1-3.5.3 {
                    346:   catchcmd "test.db" ".echo OFF"
                    347: } {0 {}}
                    348: do_test shell1-3.5.4 {
                    349:   # too many arguments
                    350:   catchcmd "test.db" ".echo OFF BAD"
                    351: } {1 {Error: unknown command or invalid arguments:  "echo". Enter ".help" for help}}
                    352: 
                    353: # .exit                  Exit this program
                    354: do_test shell1-3.6.1 {
                    355:   catchcmd "test.db" ".exit"
                    356: } {0 {}}
                    357: do_test shell1-3.6.2 {
                    358:   # too many arguments
                    359:   catchcmd "test.db" ".exit BAD"
                    360: } {1 {Error: unknown command or invalid arguments:  "exit". Enter ".help" for help}}
                    361: 
                    362: # .explain ON|OFF        Turn output mode suitable for EXPLAIN on or off.
                    363: do_test shell1-3.7.1 {
                    364:   catchcmd "test.db" ".explain"
                    365:   # explain is the exception to the booleans.  without an option, it turns it on.
                    366: } {0 {}}
                    367: do_test shell1-3.7.2 {
                    368:   catchcmd "test.db" ".explain ON"
                    369: } {0 {}}
                    370: do_test shell1-3.7.3 {
                    371:   catchcmd "test.db" ".explain OFF"
                    372: } {0 {}}
                    373: do_test shell1-3.7.4 {
                    374:   # too many arguments
                    375:   catchcmd "test.db" ".explain OFF BAD"
                    376: } {1 {Error: unknown command or invalid arguments:  "explain". Enter ".help" for help}}
                    377: 
                    378: 
                    379: # .header(s) ON|OFF      Turn display of headers on or off
                    380: do_test shell1-3.9.1 {
                    381:   catchcmd "test.db" ".header"
                    382: } {1 {Error: unknown command or invalid arguments:  "header". Enter ".help" for help}}
                    383: do_test shell1-3.9.2 {
                    384:   catchcmd "test.db" ".header ON"
                    385: } {0 {}}
                    386: do_test shell1-3.9.3 {
                    387:   catchcmd "test.db" ".header OFF"
                    388: } {0 {}}
                    389: do_test shell1-3.9.4 {
                    390:   # too many arguments
                    391:   catchcmd "test.db" ".header OFF BAD"
                    392: } {1 {Error: unknown command or invalid arguments:  "header". Enter ".help" for help}}
                    393: 
                    394: do_test shell1-3.9.5 {
                    395:   catchcmd "test.db" ".headers"
                    396: } {1 {Error: unknown command or invalid arguments:  "headers". Enter ".help" for help}}
                    397: do_test shell1-3.9.6 {
                    398:   catchcmd "test.db" ".headers ON"
                    399: } {0 {}}
                    400: do_test shell1-3.9.7 {
                    401:   catchcmd "test.db" ".headers OFF"
                    402: } {0 {}}
                    403: do_test shell1-3.9.8 {
                    404:   # too many arguments
                    405:   catchcmd "test.db" ".headers OFF BAD"
                    406: } {1 {Error: unknown command or invalid arguments:  "headers". Enter ".help" for help}}
                    407: 
                    408: # .help                  Show this message
                    409: do_test shell1-3.10.1 {
                    410:   set res [catchcmd "test.db" ".help"]
                    411:   # look for a few of the possible help commands
                    412:   list [regexp {.help} $res] \
                    413:        [regexp {.quit} $res] \
                    414:        [regexp {.show} $res]
                    415: } {1 1 1}
                    416: do_test shell1-3.10.2 {
                    417:   # we allow .help to take extra args (it is help after all)
                    418:   set res [catchcmd "test.db" ".help BAD"]
                    419:   # look for a few of the possible help commands
                    420:   list [regexp {.help} $res] \
                    421:        [regexp {.quit} $res] \
                    422:        [regexp {.show} $res]
                    423: } {1 1 1}
                    424: 
                    425: # .import FILE TABLE     Import data from FILE into TABLE
                    426: do_test shell1-3.11.1 {
                    427:   catchcmd "test.db" ".import"
                    428: } {1 {Error: unknown command or invalid arguments:  "import". Enter ".help" for help}}
                    429: do_test shell1-3.11.2 {
                    430:   catchcmd "test.db" ".import FOO"
                    431: } {1 {Error: unknown command or invalid arguments:  "import". Enter ".help" for help}}
                    432: do_test shell1-3.11.2 {
                    433:   catchcmd "test.db" ".import FOO BAR"
                    434: } {1 {Error: no such table: BAR}}
                    435: do_test shell1-3.11.3 {
                    436:   # too many arguments
                    437:   catchcmd "test.db" ".import FOO BAR BAD"
                    438: } {1 {Error: unknown command or invalid arguments:  "import". Enter ".help" for help}}
                    439: 
                    440: # .indices ?TABLE?       Show names of all indices
                    441: #                          If TABLE specified, only show indices for tables
                    442: #                          matching LIKE pattern TABLE.
                    443: do_test shell1-3.12.1 {
                    444:   catchcmd "test.db" ".indices"
                    445: } {0 {}}
                    446: do_test shell1-3.12.2 {
                    447:   catchcmd "test.db" ".indices FOO"
                    448: } {0 {}}
                    449: do_test shell1-3.12.3 {
                    450:   # too many arguments
                    451:   catchcmd "test.db" ".indices FOO BAD"
                    452: } {1 {Error: unknown command or invalid arguments:  "indices". Enter ".help" for help}}
                    453: 
                    454: # .mode MODE ?TABLE?     Set output mode where MODE is one of:
                    455: #                          csv      Comma-separated values
                    456: #                          column   Left-aligned columns.  (See .width)
                    457: #                          html     HTML <table> code
                    458: #                          insert   SQL insert statements for TABLE
                    459: #                          line     One value per line
                    460: #                          list     Values delimited by .separator string
                    461: #                          tabs     Tab-separated values
                    462: #                          tcl      TCL list elements
                    463: do_test shell1-3.13.1 {
                    464:   catchcmd "test.db" ".mode"
                    465: } {1 {Error: unknown command or invalid arguments:  "mode". Enter ".help" for help}}
                    466: do_test shell1-3.13.2 {
                    467:   catchcmd "test.db" ".mode FOO"
                    468: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    469: do_test shell1-3.13.3 {
                    470:   catchcmd "test.db" ".mode csv"
                    471: } {0 {}}
                    472: do_test shell1-3.13.4 {
                    473:   catchcmd "test.db" ".mode column"
                    474: } {0 {}}
                    475: do_test shell1-3.13.5 {
                    476:   catchcmd "test.db" ".mode html"
                    477: } {0 {}}
                    478: do_test shell1-3.13.6 {
                    479:   catchcmd "test.db" ".mode insert"
                    480: } {0 {}}
                    481: do_test shell1-3.13.7 {
                    482:   catchcmd "test.db" ".mode line"
                    483: } {0 {}}
                    484: do_test shell1-3.13.8 {
                    485:   catchcmd "test.db" ".mode list"
                    486: } {0 {}}
                    487: do_test shell1-3.13.9 {
                    488:   catchcmd "test.db" ".mode tabs"
                    489: } {0 {}}
                    490: do_test shell1-3.13.10 {
                    491:   catchcmd "test.db" ".mode tcl"
                    492: } {0 {}}
                    493: do_test shell1-3.13.11 {
                    494:   # too many arguments
                    495:   catchcmd "test.db" ".mode tcl BAD"
                    496: } {1 {Error: invalid arguments:  "BAD". Enter ".help" for help}}
                    497: 
                    498: # don't allow partial mode type matches
                    499: do_test shell1-3.13.12 {
                    500:   catchcmd "test.db" ".mode l"
                    501: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    502: do_test shell1-3.13.13 {
                    503:   catchcmd "test.db" ".mode li"
                    504: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    505: do_test shell1-3.13.14 {
                    506:   catchcmd "test.db" ".mode lin"
                    507: } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
                    508: 
                    509: # .nullvalue STRING      Print STRING in place of NULL values
                    510: do_test shell1-3.14.1 {
                    511:   catchcmd "test.db" ".nullvalue"
                    512: } {1 {Error: unknown command or invalid arguments:  "nullvalue". Enter ".help" for help}}
                    513: do_test shell1-3.14.2 {
                    514:   catchcmd "test.db" ".nullvalue FOO"
                    515: } {0 {}}
                    516: do_test shell1-3.14.3 {
                    517:   # too many arguments
                    518:   catchcmd "test.db" ".nullvalue FOO BAD"
                    519: } {1 {Error: unknown command or invalid arguments:  "nullvalue". Enter ".help" for help}}
                    520: 
                    521: # .output FILENAME       Send output to FILENAME
                    522: do_test shell1-3.15.1 {
                    523:   catchcmd "test.db" ".output"
                    524: } {1 {Error: unknown command or invalid arguments:  "output". Enter ".help" for help}}
                    525: do_test shell1-3.15.2 {
                    526:   catchcmd "test.db" ".output FOO"
                    527: } {0 {}}
                    528: do_test shell1-3.15.3 {
                    529:   # too many arguments
                    530:   catchcmd "test.db" ".output FOO BAD"
                    531: } {1 {Error: unknown command or invalid arguments:  "output". Enter ".help" for help}}
                    532: 
                    533: # .output stdout         Send output to the screen
                    534: do_test shell1-3.16.1 {
                    535:   catchcmd "test.db" ".output stdout"
                    536: } {0 {}}
                    537: do_test shell1-3.16.2 {
                    538:   # too many arguments
                    539:   catchcmd "test.db" ".output stdout BAD"
                    540: } {1 {Error: unknown command or invalid arguments:  "output". Enter ".help" for help}}
                    541: 
                    542: # .prompt MAIN CONTINUE  Replace the standard prompts
                    543: do_test shell1-3.17.1 {
                    544:   catchcmd "test.db" ".prompt"
                    545: } {1 {Error: unknown command or invalid arguments:  "prompt". Enter ".help" for help}}
                    546: do_test shell1-3.17.2 {
                    547:   catchcmd "test.db" ".prompt FOO"
                    548: } {0 {}}
                    549: do_test shell1-3.17.3 {
                    550:   catchcmd "test.db" ".prompt FOO BAR"
                    551: } {0 {}}
                    552: do_test shell1-3.17.4 {
                    553:   # too many arguments
                    554:   catchcmd "test.db" ".prompt FOO BAR BAD"
                    555: } {1 {Error: unknown command or invalid arguments:  "prompt". Enter ".help" for help}}
                    556: 
                    557: # .quit                  Exit this program
                    558: do_test shell1-3.18.1 {
                    559:   catchcmd "test.db" ".quit"
                    560: } {0 {}}
                    561: do_test shell1-3.18.2 {
                    562:   # too many arguments
                    563:   catchcmd "test.db" ".quit BAD"
                    564: } {1 {Error: unknown command or invalid arguments:  "quit". Enter ".help" for help}}
                    565: 
                    566: # .read FILENAME         Execute SQL in FILENAME
                    567: do_test shell1-3.19.1 {
                    568:   catchcmd "test.db" ".read"
                    569: } {1 {Error: unknown command or invalid arguments:  "read". Enter ".help" for help}}
                    570: do_test shell1-3.19.2 {
                    571:   file delete -force FOO
                    572:   catchcmd "test.db" ".read FOO"
                    573: } {1 {Error: cannot open "FOO"}}
                    574: do_test shell1-3.19.3 {
                    575:   # too many arguments
                    576:   catchcmd "test.db" ".read FOO BAD"
                    577: } {1 {Error: unknown command or invalid arguments:  "read". Enter ".help" for help}}
                    578: 
                    579: # .restore ?DB? FILE     Restore content of DB (default "main") from FILE
                    580: do_test shell1-3.20.1 {
                    581:   catchcmd "test.db" ".restore"
                    582: } {1 {Error: unknown command or invalid arguments:  "restore". Enter ".help" for help}}
                    583: do_test shell1-3.20.2 {
                    584:   catchcmd "test.db" ".restore FOO"
                    585: } {0 {}}
                    586: do_test shell1-3.20.3 {
                    587:   catchcmd "test.db" ".restore FOO BAR"
                    588: } {1 {Error: unknown database FOO}}
                    589: do_test shell1-3.20.4 {
                    590:   # too many arguments
                    591:   catchcmd "test.db" ".restore FOO BAR BAD"
                    592: } {1 {Error: unknown command or invalid arguments:  "restore". Enter ".help" for help}}
                    593: 
                    594: # .schema ?TABLE?        Show the CREATE statements
                    595: #                          If TABLE specified, only show tables matching
                    596: #                          LIKE pattern TABLE.
                    597: do_test shell1-3.21.1 {
                    598:   catchcmd "test.db" ".schema"
                    599: } {0 {}}
                    600: do_test shell1-3.21.2 {
                    601:   catchcmd "test.db" ".schema FOO"
                    602: } {0 {}}
                    603: do_test shell1-3.21.3 {
                    604:   # too many arguments
                    605:   catchcmd "test.db" ".schema FOO BAD"
                    606: } {1 {Error: unknown command or invalid arguments:  "schema". Enter ".help" for help}}
                    607: 
                    608: # .separator STRING      Change separator used by output mode and .import
                    609: do_test shell1-3.22.1 {
                    610:   catchcmd "test.db" ".separator"
                    611: } {1 {Error: unknown command or invalid arguments:  "separator". Enter ".help" for help}}
                    612: do_test shell1-3.22.2 {
                    613:   catchcmd "test.db" ".separator FOO"
                    614: } {0 {}}
                    615: do_test shell1-3.22.3 {
                    616:   # too many arguments
                    617:   catchcmd "test.db" ".separator FOO BAD"
                    618: } {1 {Error: unknown command or invalid arguments:  "separator". Enter ".help" for help}}
                    619: 
                    620: # .show                  Show the current values for various settings
                    621: do_test shell1-3.23.1 {
                    622:   set res [catchcmd "test.db" ".show"]
                    623:   list [regexp {echo:} $res] \
                    624:        [regexp {explain:} $res] \
                    625:        [regexp {headers:} $res] \
                    626:        [regexp {mode:} $res] \
                    627:        [regexp {nullvalue:} $res] \
                    628:        [regexp {output:} $res] \
                    629:        [regexp {separator:} $res] \
                    630:        [regexp {stats:} $res] \
                    631:        [regexp {width:} $res]
                    632: } {1 1 1 1 1 1 1 1 1}
                    633: do_test shell1-3.23.2 {
                    634:   # too many arguments
                    635:   catchcmd "test.db" ".show BAD"
                    636: } {1 {Error: unknown command or invalid arguments:  "show". Enter ".help" for help}}
                    637: 
                    638: # .stats ON|OFF          Turn stats on or off
                    639: do_test shell1-3.23b.1 {
                    640:   catchcmd "test.db" ".stats"
                    641: } {1 {Error: unknown command or invalid arguments:  "stats". Enter ".help" for help}}
                    642: do_test shell1-3.23b.2 {
                    643:   catchcmd "test.db" ".stats ON"
                    644: } {0 {}}
                    645: do_test shell1-3.23b.3 {
                    646:   catchcmd "test.db" ".stats OFF"
                    647: } {0 {}}
                    648: do_test shell1-3.23b.4 {
                    649:   # too many arguments
                    650:   catchcmd "test.db" ".stats OFF BAD"
                    651: } {1 {Error: unknown command or invalid arguments:  "stats". Enter ".help" for help}}
                    652: 
                    653: # .tables ?TABLE?        List names of tables
                    654: #                          If TABLE specified, only list tables matching
                    655: #                          LIKE pattern TABLE.
                    656: do_test shell1-3.24.1 {
                    657:   catchcmd "test.db" ".tables"
                    658: } {0 {}}
                    659: do_test shell1-3.24.2 {
                    660:   catchcmd "test.db" ".tables FOO"
                    661: } {0 {}}
                    662: do_test shell1-3.24.3 {
                    663:   # too many arguments
                    664:   catchcmd "test.db" ".tables FOO BAD"
                    665: } {1 {Error: unknown command or invalid arguments:  "tables". Enter ".help" for help}}
                    666: 
                    667: # .timeout MS            Try opening locked tables for MS milliseconds
                    668: do_test shell1-3.25.1 {
                    669:   catchcmd "test.db" ".timeout"
                    670: } {1 {Error: unknown command or invalid arguments:  "timeout". Enter ".help" for help}}
                    671: do_test shell1-3.25.2 {
                    672:   catchcmd "test.db" ".timeout zzz"
                    673:   # this should be treated the same as a '0' timeout
                    674: } {0 {}}
                    675: do_test shell1-3.25.3 {
                    676:   catchcmd "test.db" ".timeout 1"
                    677: } {0 {}}
                    678: do_test shell1-3.25.4 {
                    679:   # too many arguments
                    680:   catchcmd "test.db" ".timeout 1 BAD"
                    681: } {1 {Error: unknown command or invalid arguments:  "timeout". Enter ".help" for help}}
                    682: 
                    683: # .width NUM NUM ...     Set column widths for "column" mode
                    684: do_test shell1-3.26.1 {
                    685:   catchcmd "test.db" ".width"
                    686: } {1 {Error: unknown command or invalid arguments:  "width". Enter ".help" for help}}
                    687: do_test shell1-3.26.2 {
                    688:   catchcmd "test.db" ".width xxx"
                    689:   # this should be treated the same as a '0' width for col 1
                    690: } {0 {}}
                    691: do_test shell1-3.26.3 {
                    692:   catchcmd "test.db" ".width xxx yyy"
                    693:   # this should be treated the same as a '0' width for col 1 and 2
                    694: } {0 {}}
                    695: do_test shell1-3.26.4 {
                    696:   catchcmd "test.db" ".width 1 1"
                    697:   # this should be treated the same as a '1' width for col 1 and 2
                    698: } {0 {}}
                    699: 
                    700: # .timer ON|OFF          Turn the CPU timer measurement on or off
                    701: do_test shell1-3.27.1 {
                    702:   catchcmd "test.db" ".timer"
                    703: } {1 {Error: unknown command or invalid arguments:  "timer". Enter ".help" for help}}
                    704: do_test shell1-3.27.2 {
                    705:   catchcmd "test.db" ".timer ON"
                    706: } {0 {}}
                    707: do_test shell1-3.27.3 {
                    708:   catchcmd "test.db" ".timer OFF"
                    709: } {0 {}}
                    710: do_test shell1-3.27.4 {
                    711:   # too many arguments
                    712:   catchcmd "test.db" ".timer OFF BAD"
                    713: } {1 {Error: unknown command or invalid arguments:  "timer". Enter ".help" for help}}
                    714: 
                    715: do_test shell1-3-28.1 {
                    716:   catchcmd test.db \
                    717:      ".log stdout\nSELECT coalesce(sqlite_log(123,'hello'),'456');"
                    718: } "0 {(123) hello\n456}"
                    719: 
                    720: puts "CLI tests completed successfully"

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>