dom/tests/mochitest/localstorage/test_bug600307-DBOps.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <html xmlns="http://www.w3.org/1999/xhtml">
     2 <head>
     3 <title>bug 600307</title>
     5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     6 <script type="text/javascript" src="localStorageCommon.js"></script>
     7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     9 <script type="text/javascript">
    11 /*
    12 This is strictly implementation specific test for dom storage code from bug 600307.
    13 It exercises code for asynchronous data flushing with regard to cache life time and its preload.
    15 "flush + reload" means to tell the database to store all pending data then wipe the cached content and reload it from the db
    17 "reload" only means to simulate situation when there is a pending flush for an origin but a new cache is about to preload
    18 which is a corner case happening rarely ; this helps check the next preload operation will load correct data from the database anyway
    20 Case 1: set | flush + reload | remove | set | remove | flush + reload | get ?= null
    21         checks coalescing optimization for single key changes does work correctly for repeated removals of a key
    23 Case 2: set | set | clear | flush + reload | count ?= 0
    24         checks whether clear operation superseeds setting keys, the database must be empty for the origin
    26 Case 3: set | set | clear | reload | count ?= 0
    27         check the corner case when a data clear flush is pending but a new cache is about to preload
    28 */
    30 function startTest()
    31 {
    32   // Have an untouched land
    33   localStorage.clear();
    35   // Initial flush
    36   localStorageFlush(function() {
    37   is(localStorage.length, 0, "localStorage empty at the test start");
    39   // Basic test 1 (set a key, check presence after reload):
    40   localStorage.setItem("item", "value");
    41   localStorageFlushAndReload(function() {
    42   is(localStorage.getItem("item"), "value", "Basic persistance works");
    43   is(localStorage.length, 1, "1 item in localStorage");
    45   // Basic test 2 (set a key twice, check presence of the last value):
    46   localStorage.setItem("item", "value2");
    47   localStorage.setItem("item", "value3");
    48   localStorageFlushAndReload(function() {
    49   is(localStorage.getItem("item"), "value3", "Basic persistance 2 works");
    51   // Basic test 3 (remove a key, check it has been deleted):
    52   localStorage.removeItem("item");
    53   localStorageFlushAndReload(function() {
    54   is(localStorage.getItem("item"), null, "Basic delete works");
    56   // Basic test 4 (set and remove a key, check it is not present):
    57   localStorage.setItem("item", "value4");
    58   localStorage.removeItem("item");
    59   localStorageFlushAndReload(function() {
    60   is(localStorage.getItem("item"), null, "Basic delete 2 works");
    63   // Case 1:
    64   localStorage.setItem("item", "value");
    65   localStorageFlushAndReload(function() {
    66   localStorage.removeItem("item");
    67   localStorage.setItem("item", "value2");
    68   localStorage.removeItem("item");
    69   localStorageFlushAndReload(function() {
    70   is(localStorage.getItem("item"), null, "Item deleted in case 1");
    72   // Case 2:
    73   localStorage.setItem("item", "value");
    74   localStorage.setItem("item2", "value2");
    75   localStorage.clear();
    76   localStorageFlushAndReload(function() {
    77   is(localStorage.length, 0, "localStorage clean in case 2");
    79   // Case 3:
    80   localStorageFlush(function() {
    81   localStorage.setItem("item", "value");
    82   localStorage.setItem("item2", "value2");
    83   localStorage.clear();
    84   localStorageReload();
    85   is(localStorage.length, 0, "localStorage clean in case 4");
    87   if (SpecialPowers.Cc["@mozilla.org/xre/app-info;1"].getService(
    88       SpecialPowers.Ci.nsIXULRuntime).processType != SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) {
    89     // Following tests cannot be run in a child/plugin process type
    90     SimpleTest.finish();
    91     return;
    92   }
    94   // Cookies clean 1
    95   localStorageFlush(function() {
    96   localStorage.setItem("item", "value");
    97   localStorageClearAll();
    98   is(localStorage.length, 0, "localStorage clean after cookies deletion");
    99   localStorage.setItem("item2", "value2");
   100   is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete");
   101   is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete");
   102   localStorageFlushAndReload(function() {
   103   is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete");
   104   is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete");
   106   // Cookies clean 2
   107   localStorage.clear();
   108   localStorageFlush(function() {
   109   localStorage.setItem("item", "value");
   110   localStorageClearAll();
   111   is(localStorage.length, 0, "localStorage clean after cookies deletion 2");
   112   localStorageFlushAndReload(function() {
   113   is(localStorage.length, 0, "localStorage clean after cookies deletion 2");
   116   // Domain clean 1
   117   localStorageFlush(function() {
   118   localStorage.setItem("item", "value");
   119   localStorageClearDomain("test");
   120   is(localStorage.length, 0, "localStorage clean after domain deletion");
   121   localStorage.setItem("item2", "value2");
   122   is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete");
   123   is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete");
   124   localStorageFlushAndReload(function() {
   125   is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete");
   126   is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete");
   128   // Domain clean 2
   129   localStorage.clear();
   130   localStorageFlush(function() {
   131   localStorage.setItem("item", "value");
   132   localStorageClearDomain("test");
   133   is(localStorage.length, 0, "localStorage clean after domain deletion 2");
   134   localStorageFlushAndReload(function() {
   135   is(localStorage.length, 0, "localStorage clean after domain deletion 2");
   137   SimpleTest.finish();
   139   });
   140   });
   141   });
   142   });
   143   });
   144   });
   145   });
   146   });
   147   });
   148   });
   149   });
   150   });
   151   });
   152   });
   153   });
   154   });
   155   });
   156 }
   158 SimpleTest.waitForExplicitFinish();
   160 </script>
   162 </head>
   164 <body onload="startTest();">
   165 </body>
   166 </html>

mercurial