Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Boilerplate tests for rawJSON and isRawJSON #4255

Merged
merged 6 commits into from
Oct 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions test/built-ins/JSON/isRawJSON/builtin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-json.israwjson
description: >
JSON.isRawJSON meets the requirements for built-in objects
info: |
JSON.isRawJSON ( O )

18 ECMAScript Standard Built-in Objects
...
Unless specified otherwise, a built-in object that is callable as a function
is a built-in function object with the characteristics described in 10.3.
Unless specified otherwise, the [[Extensible]] internal slot of a built-in
object initially has the value true. Every built-in function object has a
[[Realm]] internal slot whose value is the Realm Record of the realm for
which the object was initially created.
...
Unless otherwise specified every built-in function and every built-in
constructor has the Function prototype object, which is the initial value of
the expression Function.prototype (20.2.3), as the value of its [[Prototype]]
internal slot.
...
Built-in function objects that are not identified as constructors do not
implement the [[Construct]] internal method unless otherwise specified in the
description of a particular function.

features: [json-parse-with-source]
---*/

assert(Object.isExtensible(JSON.isRawJSON), "JSON.isRawJSON is extensible");
assert.sameValue(
typeof JSON.isRawJSON,
'function',
'The value of `typeof JSON.isRawJSON` is "function"'
);
assert.sameValue(
Object.getPrototypeOf(JSON.isRawJSON),
Function.prototype,
'Object.getPrototypeOf(JSON.isRawJSON) must return the value of "Function.prototype"'
);

assert.sameValue(
Object.getOwnPropertyDescriptor(JSON.isRawJSON, "prototype"),
undefined,
"JSON.isRawJSON has no own prototype property"
);
27 changes: 27 additions & 0 deletions test/built-ins/JSON/isRawJSON/length.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-built-in-function-objects
description: >
JSON.isRawJSON.length value and descriptor.
info: |
Every built-in function object, including constructors, has a *"length"*
property whose value is a non-negative integral Number. Unless otherwise
specified, this value is the number of required parameters shown in the
subclause heading for the function description. Optional parameters and rest
parameters are not included in the parameter count.

Unless otherwise specified, the *"length"* property of a built-in function
object has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*,
[[Configurable]]: *true* }.
includes: [propertyHelper.js]
features: [json-parse-with-source]
---*/

verifyProperty(JSON.isRawJSON, 'length', {
value: 1,
writable: false,
enumerable: false,
configurable: true
});
40 changes: 40 additions & 0 deletions test/built-ins/JSON/isRawJSON/name.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-built-in-function-objects
description: >
JSON.isRawJSON.name value and descriptor.
info: |
Every built-in function object, including constructors, has a *"name"*
property whose value is a String. Unless otherwise specified, this value is
the name that is given to the function in this specification. Functions that
are identified as anonymous functions use the empty String as the value of
the *"name"* property. For functions that are specified as properties of
objects, the name value is the property name string used to access the
function. Functions that are specified as get or set accessor functions of
built-in properties have *"get"* or *"set"* (respectively) passed to the
prefix parameter when calling CreateBuiltinFunction.

The value of the *"name"* property is explicitly specified for each built-in
function whose property key is a Symbol value. If such an explicitly
specified value starts with the prefix *"get "* or *"set "* and the function
for which it is specified is a get or set accessor function of a built-in
property, the value without the prefix is passed to the name parameter, and
the value *"get"* or *"set"* (respectively) is passed to the prefix
parameter when calling CreateBuiltinFunction.

Unless otherwise specified, the *"name"* property of a built-in function
object has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*,
[[Configurable]]: *true* }.

includes: [propertyHelper.js]
features: [json-parse-with-source]
---*/

verifyProperty(JSON.isRawJSON, 'name', {
value: "isRawJSON",
enumerable: false,
writable: false,
configurable: true
});
28 changes: 28 additions & 0 deletions test/built-ins/JSON/isRawJSON/not-a-constructor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-ecmascript-standard-built-in-objects
description: >
JSON.isRawJSON does not implement [[Construct]], is not new-able
info: |
ECMAScript Function Objects

Built-in function objects that are not identified as constructors do not
implement the [[Construct]] internal method unless otherwise specified in
the description of a particular function.

sec-evaluatenew

...
7. If IsConstructor(constructor) is false, throw a TypeError exception.
...
includes: [isConstructor.js]
features: [json-parse-with-source, Reflect.construct]
---*/

assert.sameValue(isConstructor(JSON.isRawJSON), false, 'isConstructor(JSON.isRawJSON) must return false');

assert.throws(TypeError, () => {
new JSON.isRawJSON();
});
25 changes: 25 additions & 0 deletions test/built-ins/JSON/isRawJSON/prop-desc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-json.israwjson
description: >
Property type and descriptor.
info: |
JSON.isRawJSON ( O )

18 ECMAScript Standard Built-in Objects
...
Every other data property described in clauses 19 through 28 and in Annex B.2
has the attributes { [[Writable]]: true, [[Enumerable]]: false,
[[Configurable]]: true } unless otherwise specified.

includes: [propertyHelper.js]
features: [json-parse-with-source]
---*/

verifyProperty(JSON, 'isRawJSON', {
enumerable: false,
writable: true,
configurable: true
});
49 changes: 49 additions & 0 deletions test/built-ins/JSON/rawJSON/builtin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-json.rawjson
description: >
JSON.rawJSON meets the requirements for built-in objects
info: |
JSON.isRawJSON ( O )

18 ECMAScript Standard Built-in Objects
...
Unless specified otherwise, a built-in object that is callable as a function
is a built-in function object with the characteristics described in 10.3.
Unless specified otherwise, the [[Extensible]] internal slot of a built-in
object initially has the value true. Every built-in function object has a
[[Realm]] internal slot whose value is the Realm Record of the realm for
which the object was initially created.
...
Unless otherwise specified every built-in function and every built-in
constructor has the Function prototype object, which is the initial value of
the expression Function.prototype (20.2.3), as the value of its [[Prototype]]
internal slot.
...
Built-in function objects that are not identified as constructors do not
implement the [[Construct]] internal method unless otherwise specified in the
description of a particular function.

features: [json-parse-with-source]
---*/

assert(Object.isExtensible(JSON.rawJSON), "JSON.rawJSON is extensible");
assert.sameValue(
typeof JSON.rawJSON,
'function',
'The value of `typeof JSON.rawJSON` is "function"'
);

assert.sameValue(
Object.getPrototypeOf(JSON.rawJSON),
Function.prototype,
"Prototype of JSON.rawJSON is Function.prototype"
);

assert.sameValue(
Object.getOwnPropertyDescriptor(JSON.rawJSON, "prototype"),
undefined,
"JSON.rawJSON has no own prototype property"
);
28 changes: 28 additions & 0 deletions test/built-ins/JSON/rawJSON/length.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-built-in-function-objects
description: >
JSON.rawJSON.length value and descriptor.
info: |
Every built-in function object, including constructors, has a *"length"*
property whose value is a non-negative integral Number. Unless otherwise
specified, this value is the number of required parameters shown in the
subclause heading for the function description. Optional parameters and rest
parameters are not included in the parameter count.

Unless otherwise specified, the *"length"* property of a built-in function
object has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*,
[[Configurable]]: *true* }.

includes: [propertyHelper.js]
features: [json-parse-with-source]
---*/

verifyProperty(JSON.rawJSON, 'length', {
value: 1,
writable: false,
enumerable: false,
configurable: true
});
40 changes: 40 additions & 0 deletions test/built-ins/JSON/rawJSON/name.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-built-in-function-objects
description: >
JSON.rawJSON.name value and descriptor.
info: |
Every built-in function object, including constructors, has a *"name"*
property whose value is a String. Unless otherwise specified, this value is
the name that is given to the function in this specification. Functions that
are identified as anonymous functions use the empty String as the value of
the *"name"* property. For functions that are specified as properties of
objects, the name value is the property name string used to access the
function. Functions that are specified as get or set accessor functions of
built-in properties have *"get"* or *"set"* (respectively) passed to the
prefix parameter when calling CreateBuiltinFunction.

The value of the *"name"* property is explicitly specified for each built-in
function whose property key is a Symbol value. If such an explicitly
specified value starts with the prefix *"get "* or *"set "* and the function
for which it is specified is a get or set accessor function of a built-in
property, the value without the prefix is passed to the name parameter, and
the value *"get"* or *"set"* (respectively) is passed to the prefix
parameter when calling CreateBuiltinFunction.

Unless otherwise specified, the *"name"* property of a built-in function
object has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*,
[[Configurable]]: *true* }.

includes: [propertyHelper.js]
features: [json-parse-with-source]
---*/

verifyProperty(JSON.rawJSON, 'name', {
value: "rawJSON",
enumerable: false,
writable: false,
configurable: true
});
28 changes: 28 additions & 0 deletions test/built-ins/JSON/rawJSON/not-a-constructor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-ecmascript-standard-built-in-objects
description: >
JSON.rawJSON does not implement [[Construct]], is not new-able
info: |
ECMAScript Function Objects

Built-in function objects that are not identified as constructors do not
implement the [[Construct]] internal method unless otherwise specified in
the description of a particular function.

sec-evaluatenew

...
7. If IsConstructor(constructor) is false, throw a TypeError exception.
...
includes: [isConstructor.js]
features: [json-parse-with-source, Reflect.construct]
---*/

assert.sameValue(isConstructor(JSON.rawJSON), false, 'isConstructor(JSON.rawJSON) must return false');

assert.throws(TypeError, () => {
new JSON.rawJSON();
});
25 changes: 25 additions & 0 deletions test/built-ins/JSON/rawJSON/prop-desc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (C) 2024 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-json.rawjson
description: >
Property type and descriptor.
info: |
JSON.rawJSON ( text )

18 ECMAScript Standard Built-in Objects
...
Every other data property described in clauses 19 through 28 and in Annex B.2
has the attributes { [[Writable]]: true, [[Enumerable]]: false,
[[Configurable]]: true } unless otherwise specified.

includes: [propertyHelper.js]
features: [json-parse-with-source]
---*/

verifyProperty(JSON, 'rawJSON', {
enumerable: false,
writable: true,
configurable: true
});
Loading