Bug 1507403 - Add more tests for clone before key evaluation; r=asuth

This commit is contained in:
Jan Varga 2018-11-15 18:02:18 +01:00
Родитель 02a48779df
Коммит 25fb52da2e
4 изменённых файлов: 152 добавлений и 0 удалений

Просмотреть файл

@ -28,6 +28,7 @@ support-files =
unit/test_blob_file_backed.js
unit/test_blocked_order.js
unit/test_clear.js
unit/test_clone_before_key_evaluation.js
unit/test_complex_keyPaths.js
unit/test_constraint_error_messages.js
unit/test_count.js
@ -138,6 +139,7 @@ skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
[test_blocked_order.html]
[test_bug937006.html]
[test_clear.html]
[test_clone_before_key_evaluation.html]
[test_complex_keyPaths.html]
[test_constraint_error_messages.html]
[test_count.html]

Просмотреть файл

@ -0,0 +1,18 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<head>
<title>Indexed Database Test</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="text/javascript" src="unit/test_clone_before_key_evaluation.js"></script>
<script type="text/javascript" src="helpers.js"></script>
</head>
<body onload="runTest();"></body>
</html>

Просмотреть файл

@ -0,0 +1,131 @@
/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
var testGenerator = testSteps();
function* testSteps()
{
const name = this.window ? window.location.pathname
: "test_clone_before_key_evaluation.js";
const objectStoreInfo = {
name: "customers",
options: { keyPath: "ssn" },
};
const indexInfo = {
name: "customerIndex",
keyPath: ["id", "email", "name"],
options: { unique: false },
};
for (let test of [1, 2]) {
info("Opening database");
let request = indexedDB.open(name);
request.onerror = errorHandler;
request.onupgradeneeded = continueToNextStepSync;
request.onsuccess = unexpectedSuccessHandler;
yield undefined;
// upgradeneeded
request.onupgradeneeded = unexpectedSuccessHandler;
request.onsuccess = continueToNextStepSync;
let db = request.result;
db.onerror = errorHandler;
info("Creating objectStore");
let objectStore = db.createObjectStore(objectStoreInfo.name,
objectStoreInfo.options);
info("Creating index");
objectStore.createIndex(indexInfo.name,
indexInfo.keyPath,
indexInfo.options);
switch (test) {
case 1: {
info("Adding data with a getter");
let idCount = 0;
const customerData = {
ssn: "444-44-4444", name: "Bill", age: 25, email: "bill@company.com",
get id()
{
idCount++;
objectStore.deleteIndex(indexInfo.name);
return "ID_001";
}
};
objectStore.add(customerData);
ok(idCount == 1, "Getter was called only once");
ok(objectStore.indexNames.length == 0, "Index was removed");
break;
}
case 2: {
info("Adding data with a prototype getter");
let idCount = 0;
const customerData = {
ssn: "555-55-5555", name: "Joe", age: 52, email: "joe@company.com",
};
Object.defineProperty(Object.prototype, 'id', {
get() {
idCount++;
objectStore.deleteIndex(indexInfo.name);
return "ID_002";
},
enumerable: false,
configurable: true,
});
objectStore.add(customerData);
ok(idCount == 0, "Prototype getter was not called");
// Paranoid checks, just to be sure that the protype getter is called
// in standard JS.
let id = customerData.id;
ok(id == "ID_002", "Prototype getter returned correct value");
ok(idCount == 1, "Prototype getter was called only once");
delete Object.prototype["id"];
id = customerData.id;
ok(id == undefined, "Prototype getter was removed");
ok(objectStore.indexNames.length == 0, "Index was removed");
break;
}
}
yield undefined;
// success
db.close();
request = indexedDB.deleteDatabase(name);
request.onerror = errorHandler;
request.onsuccess = continueToNextStepSync;
yield undefined;
}
finishTest();
}

Просмотреть файл

@ -11,6 +11,7 @@
[test_autoIncrement_indexes.js]
[test_blocked_order.js]
[test_clear.js]
[test_clone_before_key_evaluation.js]
[test_complex_keyPaths.js]
[test_count.js]
[test_create_index.js]