storage/test/unit/test_like_escape.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/storage/test/unit/test_like_escape.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,59 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +const LATIN1_AE = "\xc6";
     1.9 +const LATIN1_ae = "\xe6"; 
    1.10 +
    1.11 +function setup()
    1.12 +{
    1.13 +  getOpenedDatabase().createTable("t1", "x TEXT");
    1.14 +
    1.15 +  var stmt = createStatement("INSERT INTO t1 (x) VALUES ('foo/bar_baz%20cheese')");
    1.16 +  stmt.execute();
    1.17 +  stmt.finalize();
    1.18 +
    1.19 +  stmt = createStatement("INSERT INTO t1 (x) VALUES (?1)");
    1.20 +  // insert LATIN_ae, but search on LATIN_AE
    1.21 +  stmt.bindByIndex(0, "foo%20" + LATIN1_ae + "/_bar");
    1.22 +  stmt.execute();
    1.23 +  stmt.finalize();
    1.24 +}
    1.25 +    
    1.26 +function test_escape_for_like_ascii()
    1.27 +{
    1.28 +  var stmt = createStatement("SELECT x FROM t1 WHERE x LIKE ?1 ESCAPE '/'");
    1.29 +  var paramForLike = stmt.escapeStringForLIKE("oo/bar_baz%20chees", '/');
    1.30 +  // verify that we escaped / _ and %
    1.31 +  do_check_eq(paramForLike, "oo//bar/_baz/%20chees");
    1.32 +  // prepend and append with % for "contains"
    1.33 +  stmt.bindByIndex(0, "%" + paramForLike + "%"); 
    1.34 +  stmt.executeStep();
    1.35 +  do_check_eq("foo/bar_baz%20cheese", stmt.getString(0));
    1.36 +  stmt.finalize();
    1.37 +}
    1.38 +
    1.39 +function test_escape_for_like_non_ascii()
    1.40 +{
    1.41 +  var stmt = createStatement("SELECT x FROM t1 WHERE x LIKE ?1 ESCAPE '/'");
    1.42 +  var paramForLike = stmt.escapeStringForLIKE("oo%20" + LATIN1_AE + "/_ba", '/');
    1.43 +  // verify that we escaped / _ and %
    1.44 +  do_check_eq(paramForLike, "oo/%20" + LATIN1_AE + "///_ba");
    1.45 +  // prepend and append with % for "contains"
    1.46 +  stmt.bindByIndex(0, "%" + paramForLike + "%");
    1.47 +  stmt.executeStep();
    1.48 +  do_check_eq("foo%20" + LATIN1_ae + "/_bar", stmt.getString(0));
    1.49 +  stmt.finalize();
    1.50 +}
    1.51 +
    1.52 +var tests = [test_escape_for_like_ascii, test_escape_for_like_non_ascii];
    1.53 +
    1.54 +function run_test()
    1.55 +{
    1.56 +  setup();
    1.57 +
    1.58 +  for (var i = 0; i < tests.length; i++)
    1.59 +    tests[i]();
    1.60 +    
    1.61 +  cleanup();
    1.62 +}

mercurial