From 161fb79619adae1c6a202956c8a599c40b031af9 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Tue, 24 Jan 2006 10:58:21 +0000 Subject: [PATCH] General test coverage improvements. (CVS 3022) FossilOrigin-Name: 153940af5af4f775fa3b1784931d3fd1e41764c5 --- main.mk | 1 + manifest | 26 +++++++++++++------------- manifest.uuid | 2 +- src/os.c | 5 +++++ src/test1.c | 37 +++++++++++++++++++++++++++++-------- src/test6.c | 3 +++ src/utf.c | 11 ++++++++++- test/malloc.test | 32 +++++++++++++++++++++++++++++++- test/tclsqlite.test | 9 ++++++++- 9 files changed, 101 insertions(+), 25 deletions(-) diff --git a/main.mk b/main.mk index ca5fa74803..a5bb9d01c7 100644 --- a/main.mk +++ b/main.mk @@ -123,6 +123,7 @@ TESTSRC = \ $(TOP)/src/btree.c \ $(TOP)/src/date.c \ $(TOP)/src/func.c \ + $(TOP)/src/os.c \ $(TOP)/src/os_unix.c \ $(TOP)/src/os_win.c \ $(TOP)/src/pager.c \ diff --git a/manifest b/manifest index 868fc26b86..4bb4e90fd7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Sqlite3_analyzer\sreports\san\serror\sif\sit\sruns\sinto\strouble.\s(CVS\s3021) -D 2006-01-24T02:19:53 +C General\stest\scoverage\simprovements.\s(CVS\s3022) +D 2006-01-24T10:58:22 F Makefile.in 53841eb72e9eeb6030a8ce28c2595a92f440fd10 F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -19,7 +19,7 @@ F doc/lemon.html f0f682f50210928c07e562621c3b7e8ab912a538 F doc/report1.txt a031aaf37b185e4fa540223cb516d3bccec7eeac F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 F ltmain.sh f6b283068efa69f06eb8aa1fe4bddfdbdeb35826 -F main.mk ff2b29a41a3862d44075194203f96192a6013871 +F main.mk 8b8d1c8a21f9a898fbf524d7d5935b823d05a433 F mkdll.sh 89b5390110c0b7fd93d6c456964c2b9adfcfc339 F mkopcodec.awk bd46ad001c98dfbab07b1713cb8e692fa0e5415d F mkopcodeh.awk 071dbba4eaf56c8d643baf4604a043af35683316 @@ -50,7 +50,7 @@ F src/insert.c 4d37e285459af9bc2ff92ae237285b12cd5e8a71 F src/legacy.c 86b669707b3cefd570e34154e2f6457547d1df4f F src/main.c 439168db0a830efd0b9e7325aff39adc5524a1b5 F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217 -F src/os.c 1d1a61cdf150e9f9520a3bc787c8465148ea2e78 +F src/os.c 59f05de8c5777c34876607114a2fbe55ae578235 F src/os.h 93035a0e3b9dd05cdd0aaef32ea28ca28e02fe78 F src/os_common.h 061fba8511a656b118551424f64e366ad0d4cb3b F src/os_test.c 49833426101f99aee4bb5f6a44b7c4b2029fda1c @@ -73,18 +73,18 @@ F src/sqlite.h.in 492580f7e3ff71eb43193eb7bb98e2d549889ce3 F src/sqliteInt.h 35a3c3556abfca796cf44fea83c9f04385efcfb6 F src/table.c 486dcfce532685b53b5a2b5da8bba0ded6fb2316 F src/tclsqlite.c 7764ab34df617b3d3cfd5f0fdf3444ed219c11d6 -F src/test1.c 846b3731af01ac90bad583f55e7969c8fb232172 +F src/test1.c ce715e15c8045c598fe83a17f862ddeedf60c057 F src/test2.c ca74a1d8aeb7d9606e8f6b762c5daf85c1a3f92b F src/test3.c 86e99724ee898b119ed575ef9f98618afe7e5e5d F src/test4.c ff4e9406b3d2809966d8f0e82468ac5508be9f56 F src/test5.c 7162f8526affb771c4ed256826eee7bb9eca265f -F src/test6.c 74d91b487c68154156eded457925d96aa2a3fdbb +F src/test6.c 60a02961ceb7b3edc25f5dc5c1ac2556622a76de F src/test7.c d28d3e62f9594923648fc6a8fb030eba36564ba1 F src/test_async.c 6776f5027ca6378c116ff5ccc2fe41b908e33772 F src/tokenize.c 9ae9a59238eb97fbc61baea280563b91100518fb F src/trigger.c 4d3644cbd16959b568c95ae73493402be8021b08 F src/update.c 14be4ba2f438919b4217085c02feff569e6cf1f2 -F src/utf.c 5ab8ca05d4e9ec81174b010f01ab12a232f0087d +F src/utf.c 1199766bbb0157931a83aa6eede6b6381177be64 F src/util.c 82ee598519b8193184bdeab06b51a4ffa05ad60b F src/vacuum.c 3865673cc66acd0717ecd517f6b8fdb2a5e7924b F src/vdbe.c 484a724611113426744caa295be6ee947cc51317 @@ -187,7 +187,7 @@ F test/lock.test 9b7afcb24f53d24da502abb33daaad2cd6d44107 F test/lock2.test d83ba79d3c4fffdb5b926c7d8ca7a36c34288a55 F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9 F test/main.test b12f01d49a5c805a33fa6c0ef168691f63056e79 -F test/malloc.test ce6d1e7e79f9db967b51e1975b50760af66db90d +F test/malloc.test 7d875b2b59ae1d79fba71403298a1eb4a1ed7c38 F test/malloc2.test e6e321db96d6c94cb18bf82ad7215070c41e624e F test/malloc3.test fd4186bee73c2a2638f4e2a05a684c06836f725b F test/malloc4.test 59cd02f71b363302a04c4e77b97c0a1572eaa210 @@ -235,7 +235,7 @@ F test/subselect.test 2d13fb7f450db3595adcdd24079a0dd1d2d6abc2 F test/sync.test 0c43399676de101e3af4d6069a94e211bb77f6b9 F test/table.test 6dc0dfa44dd429520e0e5a0c5e55025f730e9403 F test/tableapi.test 6a66d58b37d46dc0f2b3c7d4bd2617d209399bd1 -F test/tclsqlite.test 9b5c4a09879a97572e5c84372f5d045dd4703392 +F test/tclsqlite.test 96f5dbba15df0523e889b8d892f152c2f60b8efb F test/temptable.test c36f3e5a94507abb64f7ba23deeb4e1a8a8c3821 F test/tester.tcl 0a939262ccb0b87449f98d8780396a4c293831b0 F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35 @@ -344,7 +344,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 5254874a96acf89fe5f76c1628057b73ce66de4c -R 01003271a9b6db821cada0864c4bf62c -U drh -Z dd8b891e185e0e2faa5176556f8e1ad6 +P 388b9262281308d0a9dd16e2fb3df3425c2a491a +R a57aac9d19a26b897ebc5facba2c16a4 +U danielk1977 +Z 44dd13cc4a0c64f905d66d184bb2463e diff --git a/manifest.uuid b/manifest.uuid index 434cfb8eaa..941989535f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -388b9262281308d0a9dd16e2fb3df3425c2a491a \ No newline at end of file +153940af5af4f775fa3b1784931d3fd1e41764c5 \ No newline at end of file diff --git a/src/os.c b/src/os.c index 8c7aadbd91..ec482fe0e7 100644 --- a/src/os.c +++ b/src/os.c @@ -52,9 +52,14 @@ int sqlite3OsSync(OsFile *id, int fullsync){ void sqlite3OsSetFullSync(OsFile *id, int value){ id->pMethod->xSetFullSync(id, value); } +#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) +/* This method is currently only used while interactively debugging the +** pager. More specificly, it can only be used when sqlite3DebugPrintf() is +** included in the build. */ int sqlite3OsFileHandle(OsFile *id){ return id->pMethod->xFileHandle(id); } +#endif int sqlite3OsFileSize(OsFile *id, i64 *pSize){ return id->pMethod->xFileSize(id, pSize); } diff --git a/src/test1.c b/src/test1.c index af22b72ba2..a3f8562462 100644 --- a/src/test1.c +++ b/src/test1.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test1.c,v 1.202 2006/01/23 07:52:38 danielk1977 Exp $ +** $Id: test1.c,v 1.203 2006/01/24 10:58:22 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -1005,6 +1005,20 @@ static int test_enable_shared( } #endif +/* +** Usage: sqlite3_libversion_number +** +*/ +static int test_libversion_number( + ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int objc, /* Number of arguments */ + Tcl_Obj *CONST objv[] /* Command arguments */ +){ + Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_libversion_number())); + return TCL_OK; +} + /* ** Usage: sqlite_abort ** @@ -1835,7 +1849,7 @@ static int test_bind_text( } /* -** Usage: sqlite3_bind_text16 STMT N STRING BYTES +** Usage: sqlite3_bind_text16 ?-static? STMT N STRING BYTES ** ** Test the sqlite3_bind_text16 interface. STMT is a prepared statement. ** N is the index of a wildcard in the prepared statement. This command @@ -1855,18 +1869,24 @@ static int test_bind_text16( char *value; int rc; - if( objc!=5 ){ + void (*xDel)() = (objc==6?SQLITE_STATIC:SQLITE_TRANSIENT); + Tcl_Obj *oStmt = objv[objc-4]; + Tcl_Obj *oN = objv[objc-3]; + Tcl_Obj *oString = objv[objc-2]; + Tcl_Obj *oBytes = objv[objc-1]; + + if( objc!=5 && objc!=6){ Tcl_AppendResult(interp, "wrong # args: should be \"", Tcl_GetStringFromObj(objv[0], 0), " STMT N VALUE BYTES", 0); return TCL_ERROR; } - if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR; - if( Tcl_GetIntFromObj(interp, objv[2], &idx) ) return TCL_ERROR; - value = (char*)Tcl_GetByteArrayFromObj(objv[3], 0); - if( Tcl_GetIntFromObj(interp, objv[4], &bytes) ) return TCL_ERROR; + if( getStmtPointer(interp, Tcl_GetString(oStmt), &pStmt) ) return TCL_ERROR; + if( Tcl_GetIntFromObj(interp, oN, &idx) ) return TCL_ERROR; + value = (char*)Tcl_GetByteArrayFromObj(oString, 0); + if( Tcl_GetIntFromObj(interp, oBytes, &bytes) ) return TCL_ERROR; - rc = sqlite3_bind_text16(pStmt, idx, (void *)value, bytes, SQLITE_TRANSIENT); + rc = sqlite3_bind_text16(pStmt, idx, (void *)value, bytes, xDel); if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR; if( rc!=SQLITE_OK ){ return TCL_ERROR; @@ -3521,6 +3541,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ #ifndef SQLITE_OMIT_SHARED_CACHE { "sqlite3_enable_shared_cache", test_enable_shared, 0 }, #endif + { "sqlite3_libversion_number", test_libversion_number, 0 }, }; static int bitmask_size = sizeof(Bitmask)*8; int i; diff --git a/src/test6.c b/src/test6.c index 608a140ee3..32ee4762a7 100644 --- a/src/test6.c +++ b/src/test6.c @@ -462,7 +462,10 @@ int crashLockState(OsFile *id){ ** Return the underlying file handle. */ int crashFileHandle(OsFile *id){ +#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) return sqlite3OsFileHandle(((crashFile*)id)->pBase); +#endif + return 0; } /* diff --git a/src/utf.c b/src/utf.c index 7261d5adb5..d6e4e00af9 100644 --- a/src/utf.c +++ b/src/utf.c @@ -12,7 +12,7 @@ ** This file contains routines used to translate between UTF-8, ** UTF-16, UTF-16BE, and UTF-16LE. ** -** $Id: utf.c,v 1.36 2006/01/13 06:33:24 danielk1977 Exp $ +** $Id: utf.c,v 1.37 2006/01/24 10:58:22 danielk1977 Exp $ ** ** Notes on UTF-8: ** @@ -479,6 +479,15 @@ int sqlite3utf16ByteLen(const void *zIn, int nChar){ char const *z = zIn; int n = 0; if( SQLITE_UTF16NATIVE==SQLITE_UTF16BE ){ + /* Using an "if (SQLITE_UTF16NATIVE==SQLITE_UTF16BE)" construct here + ** and in other parts of this file means that at one branch will + ** not be covered by coverage testing on any single host. But coverage + ** will be complete if the tests are run on both a little-endian and + ** big-endian host. Because both the UTF16NATIVE and SQLITE_UTF16BE + ** macros are constant at compile time the compiler can determine + ** which branch will be followed. It is therefore assumed that no runtime + ** penalty is paid for this "if" statement. + */ while( c && ((nChar<0) || nbig-endian). It only actually +# hits this malloc() on little-endian hosts. +# +set static_string "\x00h\x00e\x00l\x00l\x00o" +for {set l 0} {$l<10} {incr l} { + append static_string $static_string +} +append static_string "\x00\x00" +do_malloc_test 19 -tclprep { + execsql { + PRAGMA encoding = "UTF16be"; + CREATE TABLE abc(a, b, c); + } +} -tclbody { + unset -nocomplain ::STMT + set r [catch { + set ::STMT [sqlite3_prepare $::DB {SELECT ?} -1 DUMMY] + sqlite3_bind_text16 -static $::STMT 1 $static_string 112 + } msg] + if {$r} {error [string range $msg 4 end]} + set msg +} -cleanup { + if {[info exists ::STMT]} { + sqlite3_finalize $::STMT + } +} +unset static_string + # Ensure that no file descriptors were leaked. do_test malloc-99.X { catch {db close} diff --git a/test/tclsqlite.test b/test/tclsqlite.test index 185f04a733..c2cf9c4ade 100644 --- a/test/tclsqlite.test +++ b/test/tclsqlite.test @@ -15,7 +15,7 @@ # interface is pretty well tested. This file contains some addition # tests for fringe issues that the main test suite does not cover. # -# $Id: tclsqlite.test,v 1.50 2006/01/17 09:35:02 danielk1977 Exp $ +# $Id: tclsqlite.test,v 1.51 2006/01/24 10:58:23 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -447,4 +447,11 @@ do_test tcl-11.3 { db exists {SELECT 1 FROM t4 WHERE x==8} } {0} +do_test tcl-12.1 { + unset -nocomplain a b c version + set version [db version] + scan $version "%d.%d.%d" a b c + expr $a*1000000 + $b*1000 + $c +} [sqlite3_libversion_number] + finish_test