test_setVersion_exclusion.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * Any copyright is dedicated to the Public Domain.
  3. * http://creativecommons.org/publicdomain/zero/1.0/
  4. */
  5. var testGenerator = testSteps();
  6. function testSteps()
  7. {
  8. const name = this.window ? window.location.pathname : "Splendid Test";
  9. let request = indexedDB.open(name, 1);
  10. request.onerror = errorHandler;
  11. request.onupgradeneeded = grabEventAndContinueHandler;
  12. request.onsuccess = unexpectedSuccessHandler;
  13. let request2 = indexedDB.open(name, 2);
  14. request2.onerror = errorHandler;
  15. request2.onupgradeneeded = unexpectedSuccessHandler;
  16. request2.onsuccess = unexpectedSuccessHandler;
  17. let event = yield undefined;
  18. is(event.type, "upgradeneeded", "Expect an upgradeneeded event");
  19. is(event.target, request, "Event should be fired on the request");
  20. ok(event.target.result instanceof IDBDatabase, "Expect a database here");
  21. let db = event.target.result;
  22. is(db.version, 1, "Database has correct version");
  23. db.onupgradeneeded = function() {
  24. ok(false, "our ongoing VERSION_CHANGE transaction should exclude any others!");
  25. }
  26. db.createObjectStore("foo");
  27. try {
  28. db.transaction("foo");
  29. ok(false, "Transactions should be disallowed now!");
  30. } catch (e) {
  31. ok(e instanceof DOMException, "Expect a DOMException");
  32. is(e.name, "InvalidStateError", "Expect an InvalidStateError");
  33. is(e.code, DOMException.INVALID_STATE_ERR, "Expect an INVALID_STATE_ERR");
  34. }
  35. request.onupgradeneeded = unexpectedSuccessHandler;
  36. request.transaction.oncomplete = grabEventAndContinueHandler;
  37. event = yield undefined;
  38. is(event.type, "complete", "Got complete event");
  39. try {
  40. db.transaction("foo");
  41. ok(true, "Transactions should be allowed now!");
  42. } catch (e) {
  43. ok(false, "Transactions should be allowed now!");
  44. }
  45. request.onsuccess = grabEventAndContinueHandler;
  46. event = yield undefined;
  47. is(event.type, "success", "Expect a success event");
  48. is(event.target.result, db, "Same database");
  49. db.onversionchange = function() {
  50. ok(true, "next setVersion was unblocked appropriately");
  51. db.close();
  52. }
  53. try {
  54. db.transaction("foo");
  55. ok(true, "Transactions should be allowed now!");
  56. } catch (e) {
  57. ok(false, "Transactions should be allowed now!");
  58. }
  59. request.onsuccess = unexpectedSuccessHandler;
  60. request2.onupgradeneeded = grabEventAndContinueHandler;
  61. event = yield undefined;
  62. is(event.type, "upgradeneeded", "Expect an upgradeneeded event");
  63. db = event.target.result;
  64. is(db.version, 2, "Database has correct version");
  65. request2.onupgradeneeded = unexpectedSuccessHandler;
  66. request2.onsuccess = grabEventAndContinueHandler;
  67. event = yield undefined;
  68. is(event.type, "success", "Expect a success event");
  69. is(event.target.result, db, "Same database");
  70. is(db.version, 2, "Database has correct version");
  71. finishTest();
  72. yield undefined;
  73. }