зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1281377 - In IDBKeyRange.includes(), do not compare the given value with the unset boundary. r=khuey
This commit is contained in:
Родитель
daa6f72c59
Коммит
2673621c4b
|
@ -22,8 +22,7 @@ namespace {
|
|||
nsresult
|
||||
GetKeyFromJSVal(JSContext* aCx,
|
||||
JS::Handle<JS::Value> aVal,
|
||||
Key& aKey,
|
||||
bool aAllowUnset = false)
|
||||
Key& aKey)
|
||||
{
|
||||
nsresult rv = aKey.SetFromJSVal(aCx, aVal);
|
||||
if (NS_FAILED(rv)) {
|
||||
|
@ -31,7 +30,7 @@ GetKeyFromJSVal(JSContext* aCx,
|
|||
return rv;
|
||||
}
|
||||
|
||||
if (aKey.IsUnset() && !aAllowUnset) {
|
||||
if (aKey.IsUnset()) {
|
||||
return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
|
||||
}
|
||||
|
||||
|
@ -347,39 +346,38 @@ IDBKeyRange::Includes(JSContext* aCx,
|
|||
return false;
|
||||
}
|
||||
|
||||
switch (Key::CompareKeys(Lower(), key)) {
|
||||
case 1:
|
||||
return false;
|
||||
case 0:
|
||||
// Identical keys.
|
||||
if (LowerOpen()) {
|
||||
MOZ_ASSERT(!(Lower().IsUnset() && Upper().IsUnset()));
|
||||
MOZ_ASSERT_IF(IsOnly(),
|
||||
!Lower().IsUnset() && !LowerOpen() &&
|
||||
Lower() == Upper() && LowerOpen() == UpperOpen());
|
||||
|
||||
if (!Lower().IsUnset()) {
|
||||
switch (Key::CompareKeys(Lower(), key)) {
|
||||
case 1:
|
||||
return false;
|
||||
case 0:
|
||||
// Identical keys.
|
||||
return !LowerOpen();
|
||||
case -1:
|
||||
if (IsOnly()) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
break;
|
||||
case -1:
|
||||
if (IsOnly()) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
||||
if (!IsOnly()) {
|
||||
if (!Upper().IsUnset()) {
|
||||
switch (Key::CompareKeys(key, Upper())) {
|
||||
case 1:
|
||||
return false;
|
||||
case 0:
|
||||
// Identical keys.
|
||||
if (UpperOpen()) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
return !UpperOpen();
|
||||
case -1:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
MOZ_ASSERT(key == Lower());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<script src=/resources/testharnessreport.js></script>
|
||||
<script>
|
||||
|
||||
test( function() {
|
||||
test(function() {
|
||||
var closedRange = IDBKeyRange.bound(5, 20);
|
||||
assert_true(!!closedRange.includes, "IDBKeyRange has a .includes");
|
||||
assert_true(closedRange.includes(7), "in range");
|
||||
|
@ -17,17 +17,45 @@
|
|||
"invalid key");
|
||||
}, "IDBKeyRange.includes() with a closed range");
|
||||
|
||||
test( function() {
|
||||
test(function() {
|
||||
var openRange = IDBKeyRange.bound(5, 20, true, true);
|
||||
assert_false(openRange.includes(5) || openRange.includes(20),
|
||||
"boundary points");
|
||||
}, "IDBKeyRange.includes() with an open range");
|
||||
|
||||
test( function() {
|
||||
test(function() {
|
||||
var range = IDBKeyRange.only(42);
|
||||
assert_true(range.includes(42), "in range");
|
||||
assert_false(range.includes(1), "below range");
|
||||
assert_false(range.includes(9000), "above range");
|
||||
}, "IDBKeyRange.includes() with an only range");
|
||||
|
||||
test(function() {
|
||||
var range = IDBKeyRange.lowerBound(5);
|
||||
assert_false(range.includes(4), 'value before closed lower bound');
|
||||
assert_true(range.includes(5), 'value at closed lower bound');
|
||||
assert_true(range.includes(6), 'value after closed lower bound');
|
||||
}, "IDBKeyRange.includes() with an closed lower-bounded range");
|
||||
|
||||
test(function() {
|
||||
var range = IDBKeyRange.lowerBound(5, true);
|
||||
assert_false(range.includes(4), 'value before open lower bound');
|
||||
assert_false(range.includes(5), 'value at open lower bound');
|
||||
assert_true(range.includes(6), 'value after open lower bound');
|
||||
}, "IDBKeyRange.includes() with an open lower-bounded range");
|
||||
|
||||
test(function() {
|
||||
var range = IDBKeyRange.upperBound(5);
|
||||
assert_true(range.includes(4), 'value before closed upper bound');
|
||||
assert_true(range.includes(5), 'value at closed upper bound');
|
||||
assert_false(range.includes(6), 'value after closed upper bound');
|
||||
}, "IDBKeyRange.includes() with an closed upper-bounded range");
|
||||
|
||||
test(function() {
|
||||
var range = IDBKeyRange.upperBound(5, true);
|
||||
assert_true(range.includes(4), 'value before open upper bound');
|
||||
assert_false(range.includes(5), 'value at open upper bound');
|
||||
assert_false(range.includes(6), 'value after open upper bound');
|
||||
}, "IDBKeyRange.includes() with an open upper-bounded range");
|
||||
|
||||
</script>
|
||||
|
|
Загрузка…
Ссылка в новой задаче