# 2006 August 23
#
# 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.
#
#***********************************************************************
# This file implements regression tests for SQLite library.  The
# focus of this script is automatic extension loading and the
# sqlite3_auto_extension() API.
#
# $Id: loadext2.test,v 1.3 2008/03/19 16:08:54 drh Exp $

set testdir [file dirname $argv0]
source $testdir/tester.tcl

# Only run these tests if the approriate APIs are defined
# in the system under test.
#
ifcapable !load_ext {
  finish_test
  return
}
if {[info command sqlite3_auto_extension_sqr]==""} {
  finish_test
  return
}


# None of the extension are loaded by default.
#
do_test loadext2-1.1 {
  catchsql {
    SELECT sqr(2)
  }
} {1 {no such function: sqr}}
do_test loadext2-1.2 {
  catchsql {
    SELECT cube(2)
  }
} {1 {no such function: cube}}

# Register auto-loaders.  Still functions do not exist.
#
do_test loadext2-1.3 {
  sqlite3_auto_extension_sqr
  sqlite3_auto_extension_cube
  catchsql {
    SELECT sqr(2)
  }
} {1 {no such function: sqr}}
do_test loadext2-1.4 {
  catchsql {
    SELECT cube(2)
  }
} {1 {no such function: cube}}


# Functions do exist in a new database connection
#
do_test loadext2-1.5 {
  sqlite3 db test.db
  catchsql {
    SELECT sqr(2)
  }
} {0 4.0}
do_test loadext2-1.6 {
  catchsql {
    SELECT cube(2)
  }
} {0 8.0}


# Reset extension auto loading.  Existing extensions still exist.
#
do_test loadext2-1.7 {
  sqlite3_reset_auto_extension
  catchsql {
    SELECT sqr(2)
  }
} {0 4.0}
do_test loadext2-1.8 {
  catchsql {
    SELECT cube(2)
  }
} {0 8.0}


# Register only the sqr() function.
#
do_test loadext2-1.9 {
  sqlite3_auto_extension_sqr
  sqlite3 db test.db
  catchsql {
    SELECT sqr(2)
  }
} {0 4.0}
do_test loadext2-1.10 {
  catchsql {
    SELECT cube(2)
  }
} {1 {no such function: cube}}

# Register only the cube() function.
#
do_test loadext2-1.11 {
  sqlite3_reset_auto_extension
  sqlite3_auto_extension_cube
  sqlite3 db test.db
  catchsql {
    SELECT sqr(2)
  }
} {1 {no such function: sqr}}
do_test loadext2-1.12 {
  catchsql {
    SELECT cube(2)
  }
} {0 8.0}

# Register a broken entry point.
#
do_test loadext2-1.13 {
  sqlite3_auto_extension_broken
  set rc [catch {sqlite3 db test.db} errmsg]
  lappend rc $errmsg
} {1 {automatic extension loading failed: broken autoext!}}
do_test loadext2-1.14 {
  catchsql {
    SELECT sqr(2)
  }
} {1 {no such function: sqr}}
do_test loadext2-1.15 {
  catchsql {
    SELECT cube(2)
  }
} {0 8.0}


sqlite3_reset_auto_extension
autoinstall_test_functions
finish_test
