diff --git a/browser_patches/webkit/BUILD_NUMBER b/browser_patches/webkit/BUILD_NUMBER index fea6fd9ac4..2ad37d97f0 100644 --- a/browser_patches/webkit/BUILD_NUMBER +++ b/browser_patches/webkit/BUILD_NUMBER @@ -1,2 +1,2 @@ -1643 -Changed: yurys@chromium.org Fri 13 May 2022 02:10:13 PM PDT +1644 +Changed: yurys@chromium.org Mon 16 May 2022 09:14:05 AM PDT diff --git a/browser_patches/webkit/UPSTREAM_CONFIG.sh b/browser_patches/webkit/UPSTREAM_CONFIG.sh index 62e0debff6..cdde742920 100644 --- a/browser_patches/webkit/UPSTREAM_CONFIG.sh +++ b/browser_patches/webkit/UPSTREAM_CONFIG.sh @@ -1,3 +1,3 @@ REMOTE_URL="https://github.com/WebKit/WebKit.git" BASE_BRANCH="main" -BASE_REVISION="c2469dd6baa0034fe1ad0159788267d17f0bc7c2" +BASE_REVISION="38f99b1251a27027b3eeea66ae7ae4a57b4144f2" diff --git a/browser_patches/webkit/patches/bootstrap.diff b/browser_patches/webkit/patches/bootstrap.diff index d007ff1725..231faea7a9 100644 --- a/browser_patches/webkit/patches/bootstrap.diff +++ b/browser_patches/webkit/patches/bootstrap.diff @@ -1,93647 +1,3 @@ -diff --git a/ChangeLog b/ChangeLog -index 20ee6020b2ac29c5abbfd603c5513d4be5d0d9d1..80c50fd021d829fa21635be05f725ffb7d199570 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,69 @@ -+2022-05-09 Ryosuke Niwa -+ -+ Introduction.md: Explain active DOM objects -+ https://bugs.webkit.org/show_bug.cgi?id=240212 -+ -+ Reviewed by Chris Dumez. -+ -+ Added an elementary description of active DOM objects to Introduction.md. -+ -+ * Introduction.md: -+ -+2022-05-08 Ryosuke Niwa -+ -+ Introduction.md: Fix typos found by mcatanzaro -+ https://bugs.webkit.org/show_bug.cgi?id=240211 -+ -+ Reviewed by Tim Nguyen. -+ -+ Fixed typos. -+ -+ * Introduction.md: -+ -+2022-05-07 Ryosuke Niwa -+ -+ Explain now node reference counting works in Introduction.md -+ https://bugs.webkit.org/show_bug.cgi?id=240202 -+ -+ Unreviewed. Fix an obvious typo. -+ -+ * Introduction.md: -+ -+2022-05-07 Ryosuke Niwa -+ -+ Explain now node reference counting works in Introduction.md -+ https://bugs.webkit.org/show_bug.cgi?id=240202 -+ -+ Reviewed by Chris Dumez. -+ -+ Added explanation on how Node reference counting works. -+ -+ * Introduction.md: -+ -+2022-05-06 Kate Cheney -+ -+ Unreviewed, add github info to contributors.json. -+ -+ * metadata/contributors.json: -+ -+2022-05-05 Per Arne Vollan -+ -+ Add GitHub user name -+ https://bugs.webkit.org/show_bug.cgi?id=240144 -+ -+ Unreviewed, add github user name to contributors.json. -+ -+ * metadata/contributors.json: -+ -+2022-05-05 Megan Gardner -+ -+ Add github info for myself to contributors.json -+ https://bugs.webkit.org/show_bug.cgi?id=240140 -+ -+ Unreviewed metadata addition. -+ -+ * metadata/contributors.json: -+ - 2022-05-02 Yijia Huang - - Update yijia's info in constributors -diff --git a/Introduction.md b/Introduction.md -index 15d68061d02ee8e7ed1362df35c2548bf19ae9b9..ec54ee22cb6ac62fc62bbfa742f26811c48e6e61 100644 ---- a/Introduction.md -+++ b/Introduction.md -@@ -882,9 +882,9 @@ and it does not conform to a specific interface or behavior. - It could have been an arbitrary integer value but `void*` is used out of convenience since pointer values of live objects are unique. - - In the case of a `StyleSheet` object, `StyleSheet`'s JavaScript wrapper tells the garbage collector that it needs to be kept alive --because an opaque root it cares about has been encountered whenever `onwerNode` is visited by the garbage collector. -+because an opaque root it cares about has been encountered whenever `ownerNode` is visited by the garbage collector. - --In the most simplistic model, the opaque root for this case will be the `onwerNode` itself. -+In the most simplistic model, the opaque root for this case will be the `ownerNode` itself. - However, each `Node` object also has to keep its parent, siblings, and children alive. - To this end, each `Node` designates the [root](https://dom.spec.whatwg.org/#concept-tree-root) node as its opaque root. - Both `Node` and `StyleSheet` objects use this unique opaque root as a way of communicating with the gargage collector. -@@ -932,7 +932,7 @@ Generally, using opaque roots as a way of keeping JavaScript wrappers involve tw - 1. Add opaque roots in `visitAdditionalChildren`. - 2. Return true in `isReachableFromOpaqueRoots` when relevant opaque roots are found. - --The first step can be achieved by using the aforementioend `JSCustomMarkFunction` with `visitAdditionalChildren`. -+The first step can be achieved by using the aforementioned `JSCustomMarkFunction` with `visitAdditionalChildren`. - Alternatively and more preferably, `GenerateAddOpaqueRoot` can be added to the IDL interface to auto-generate this code. - For example, [AbortController.idl](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/AbortController.idl) - makes use of this IDL attribute as follows: -@@ -950,7 +950,7 @@ makes use of this IDL attribute as follows: - }; - ``` - --Here, `singal` is a public member function funtion of -+Here, `signal` is a public member function funtion of - the [underlying C++ object](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/AbortController.h): - - ```cpp -@@ -1004,7 +1004,166 @@ or any function called by GenerateIsReachable cannot have thread unsafe side eff - such as incrementing or decrementing the reference count of a `RefCounted` object - or creating a new `WeakPtr` from `CanMakeWeakPtr` since these WTF classes' mutation operations are not thread safe. - --FIXME: Discuss Active DOM objects -+## Active DOM Objects -+ -+Visit children and opaque roots are great way to express lifecycle relationships between JS wrappers -+but there are cases in which a JS wrapper needs to be kept alive without any relation to other objects. -+Consider [`XMLHttpRequest`](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest). -+In the following example, JavaScript loses all references to the `XMLHttpRequest` object and its event listener -+but when a new response gets received, an event will be dispatched on the object, -+re-introducing a new JavaScript reference to the object. -+That is, the object survives garbage collection's -+[mark and sweep cycles](https://en.wikipedia.org/wiki/Tracing_garbage_collection#Basic_algorithm) -+without having any ties to other ["root" objects](https://en.wikipedia.org/wiki/Tracing_garbage_collection#Reachability_of_an_object). -+ -+```js -+function fetchURL(url, callback) -+{ -+ const request = new XMLHttpRequest(); -+ request.addEventListener("load", callback); -+ request.open("GET", url); -+ request.send(); -+} -+``` -+ -+In WebKit, we consider such an object to have a *pending activity*. -+Expressing the presence of such a pending activity is a primary use case of -+[`ActiveDOMObject`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/ActiveDOMObject.h). -+ -+By making an object inherit from [`ActiveDOMObject`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/ActiveDOMObject.h) -+and [annotating IDL as such](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/xml/XMLHttpRequest.idl#L42), -+WebKit will [automatically generate `isReachableFromOpaqueRoot` function](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm#L5029) -+which returns true whenever `ActiveDOMObject::hasPendingActivity` returns true -+even though the garbage collector may not have encountered any particular opaque root to speak of in this instance. -+ -+In the case of [`XMLHttpRequest`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/xml/XMLHttpRequest.h), -+`hasPendingActivity` [will return true](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/xml/XMLHttpRequest.cpp#L1195) -+so long as there is still an active network activity associated with the object. -+Once the resource is fully fetched or failed, it ceases to have a pending activity. -+This way, JS wrapper of `XMLHttpRequest` is kept alive so long as there is an active network activity. -+ -+There is one other related use case of active DOM objects, -+and that's when a document enters the [back-forward cache](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/history/BackForwardCache.h) -+and when the entire [page](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/page/Page.h) has to pause -+for [other reasons](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L45). -+ -+When this happens, each active DOM object associated with the document -+[gets suspended](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L70). -+Each active DOM object can use this opportunity to prepare itself to pause whatever pending activity; -+for example, `XMLHttpRequest` [will stop dispatching `progress` event](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/xml/XMLHttpRequest.cpp#L1157) -+and media elements [will stop playback](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/html/HTMLMediaElement.cpp#L6008). -+When a document gets out of the back-forward cache or resumes for other reasons, -+each active DOM object [gets resumed](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L71). -+Here, each object has the opportunity to resurrect the previously pending activity once again. -+ -+### Creating a Pending Activity -+ -+There are a few ways to create a pending activity on an [active DOM objects](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/ActiveDOMObject.h). -+ -+When the relevant Web standards says to [queue a task](https://html.spec.whatwg.org/multipage/webappapis.html#queue-a-task) to do some work, -+one of the following member functions of [`ActiveDOMObject`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/ActiveDOMObject.h) should be used: -+ * [`queueTaskKeepingObjectAlive`](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L106) -+ * [`queueCancellableTaskKeepingObjectAlive`](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L114) -+ * [`queueTaskToDispatchEvent`](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L124) -+ * [`queueCancellableTaskToDispatchEvent`](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L130) -+These functions will automatically create a pending activity until a newly enqueued task is executed. -+ -+Alternatively, [`makePendingActivity`](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L97) -+can be used to create a [pending activity token](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/ActiveDOMObject.h#L78) -+for an active DOM object. -+This will keep a pending activity on the active DOM object until all tokens are dead. -+ -+Finally, when there is a complex condition under which a pending activity exists, -+an active DOM object can override [`virtualHasPendingActivity`](https://github.com/WebKit/WebKit/blob/64cdede660d9eaea128fd151281f4715851c4fe2/Source/WebCore/dom/ActiveDOMObject.h#L147) -+member function and return true whilst such a condition holds. -+Note that `virtualHasPendingActivity` should return true so long as there is a possibility of dispatching an event or invoke JavaScript in any way in the future. -+In other words, a pending activity should exist while an object is doing some work in C++ well before any event dispatching is scheduled. -+Anytime there is no pending activity, JS wrappers of the object can get deleted by the garbage collector. -+ -+## Reference Counting of DOM Nodes -+ -+[`Node`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/Node.h) is a reference counted object but with a twist. -+It has a [separate boolean flag](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/Node.h#L832) -+indicating whether it has a [parent](https://dom.spec.whatwg.org/#concept-tree-parent) node or not. -+A `Node` object is [not deleted](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/Node.h#L801) -+so long as it has a reference count above 0 or this boolean flag is set. -+The boolean flag effectively functions as a `RefPtr` from a parent `Node` -+to each one of its [child](https://dom.spec.whatwg.org/#concept-tree-child) `Node`. -+We do this because `Node` only knows its [first child](https://dom.spec.whatwg.org/#concept-tree-first-child) -+and its [last child](https://dom.spec.whatwg.org/#concept-tree-last-child) -+and each [sibling](https://dom.spec.whatwg.org/#concept-tree-sibling) nodes are implemented -+as a [doubly linked list](https://en.wikipedia.org/wiki/Doubly_linked_list) to allow -+efficient [insertion](https://dom.spec.whatwg.org/#concept-node-insert) -+and [removal](https://dom.spec.whatwg.org/#concept-node-remove) and traversal of sibling nodes. -+ -+Conceptually, each `Node` is kept alive by its root node and external references to it, -+and we use the root node as an opaque root of each `Node`'s JS wrapper. -+Therefore the JS wrapper of each `Node` is kept alive as long as either the node itself -+or any other node which shares the same root node is visited by the garbage collector. -+ -+On the other hand, a `Node` does not keep its parent or any of its -+[shadow-including ancestor](https://dom.spec.whatwg.org/#concept-shadow-including-ancestor) `Node` alive -+either by reference counting or via the boolean flag even though the JavaScript API requires this to be the case. -+In order to implement this DOM API behavior, -+WebKit [will create](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/bindings/js/JSNodeCustom.cpp#L174) -+a JS wrapper for each `Node` which is being removed from its parent if there isn't already one. -+A `Node` which is a root node (of the newly removed [subtree](https://dom.spec.whatwg.org/#concept-tree)) is an opaque root of its JS wrapper, -+and the garbage collector will visit this opaque root if there is any JS wrapper in the removed subtree that needs to be kept alive. -+In effect, this keeps the new root node and all its [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) nodes alive -+if the newly removed subtree contains any node with a live JS wrapper, preserving the API contract. -+ -+It's important to recognize that storing a `Ref` or a `RefPtr` to another `Node` in a `Node` subclass -+or an object directly owned by the Node can create a [reference cycle](https://en.wikipedia.org/wiki/Reference_counting#Dealing_with_reference_cycles), -+or a reference that never gets cleared. -+It's not guaranteed that every node is [disconnected](https://dom.spec.whatwg.org/#connected) -+from a [`Document`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/Document.h) at some point in the future, -+and some `Node` may always have a parent node or a child node so long as it exists. -+Only permissible circumstances in which a `Ref` or a `RefPtr` to another `Node` can be stored -+in a `Node` subclass or other data structures owned by it is if it's temporally limited. -+For example, it's okay to store a `Ref` or a `RefPtr` in -+an enqueued [event loop task](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/EventLoop.h#L69). -+In all other circumstances, `WeakPtr` should be used to reference another `Node`, -+and JS wrapper relationships such as opaque roots should be used to preserve the lifecycle ties between `Node` objects. -+ -+It's equally crucial to observe that keeping C++ Node object alive by storing `Ref` or `RefPtr` -+in an enqueued [event loop task](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/EventLoop.h#L69) -+does not keep its JS wrapper alive, and can result in the JS wrapper of a conceptually live object to be erroneously garbage collected. -+To avoid this problem, use [`GCReachableRef`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/GCReachableRef.h) instead -+to temporarily hold a strong reference to a node over a period of time. -+For example, [`HTMLTextFormControlElement::scheduleSelectEvent()`](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/html/HTMLTextFormControlElement.cpp#L547) -+uses `GCReachableRef` to fire an event in an event loop task: -+```cpp -+void HTMLTextFormControlElement::scheduleSelectEvent() -+{ -+ document().eventLoop().queueTask(TaskSource::UserInteraction, [protectedThis = GCReachableRef { *this }] { -+ protectedThis->dispatchEvent(Event::create(eventNames().selectEvent, Event::CanBubble::Yes, Event::IsCancelable::No)); -+ }); -+} -+``` -+ -+Alternatively, we can make it inherit from an [active DOM object](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/ActiveDOMObject.h), -+and use one of the following functions to enqueue a task or an event: -+ - [`queueTaskKeepingObjectAlive`](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/ActiveDOMObject.h#L107) -+ - [`queueCancellableTaskKeepingObjectAlive`](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/ActiveDOMObject.h#L115) -+ - [`queueTaskToDispatchEvent`](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/ActiveDOMObject.h#L124) -+ - [`queueCancellableTaskToDispatchEvent`](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/ActiveDOMObject.h#L130) -+ -+[`Document`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/Document.h) node has one more special quirk -+because every [`Node`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/dom/Node.h) can have access to a document -+via [`ownerDocument` property](https://developer.mozilla.org/en-US/docs/Web/API/Node/ownerDocument) -+whether Node is [connected](https://dom.spec.whatwg.org/#connected) to the document or not. -+Every document has a regular reference count used by external clients and -+[referencing node count](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/Document.h#L2093). -+The referencing node count of a document is the total number of nodes whose `ownerDocument` is the document. -+A document is [kept alive](https://github.com/WebKit/WebKit/blob/297c01a143f649b34544f0cb7a555decf6ecbbfd/Source/WebCore/dom/Document.cpp#L749) -+so long as its reference count and node referencing count is above 0. -+In addition, when the regular reference count is to become 0, -+it clears various states including its internal references to owning Nodes to sever any reference cycles with them. -+A document is special in that sense that it can store `RefPtr` to other nodes. -+Note that whilst the referencing node count acts like `Ref` from each `Node` to its owner `Document`, -+storing a `Ref` or a `RefPtr` to the same document or any other document will create -+a [reference cycle](https://en.wikipedia.org/wiki/Reference_counting#Dealing_with_reference_cycles) -+and should be avoided unless it's temporally limited as noted above. - - ## Inserting or Removing DOM Nodes - -diff --git a/JSTests/ChangeLog b/JSTests/ChangeLog -index 247fb7cc35cccf497b5e9ad3e9d2b83728fcc93e..cf34242d1f538b6ddece945057ec3ac9aaf14d51 100644 ---- a/JSTests/ChangeLog -+++ b/JSTests/ChangeLog -@@ -1,3 +1,2300 @@ -+2022-05-09 Yusuke Suzuki -+ -+ Upstream TypedArray.prototype.fill speedup from bun -+ https://bugs.webkit.org/show_bug.cgi?id=239891 -+ -+ Reviewed by Saam Barati. -+ -+ * microbenchmarks/typed-array-fill.js: Added. -+ * stress/typed-array-fill-complicated.js: Added. -+ (shouldBe): -+ (throw.new.Error): -+ -+2022-05-09 Ross Kirsling -+ -+ Temporal round and total methods should accept string param -+ https://bugs.webkit.org/show_bug.cgi?id=240249 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * stress/temporal-duration.js: -+ * stress/temporal-instant.js: -+ * stress/temporal-plaintime.js: -+ Add test cases. -+ -+ * test262/expectations.yaml: -+ Mark 24 test cases passing. -+ (This number should be 26, but two still fail as the harness expects PlainDateTime and ZonedDateTime to exist.) -+ -+2022-05-09 Ross Kirsling -+ -+ Temporal and Date must reject expanded year -000000 -+ https://bugs.webkit.org/show_bug.cgi?id=240263 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * test262/expectations.yaml: -+ Mark 24 test cases as passing. -+ -+2022-05-09 Keith Miller -+ -+ Unreviewed test gardening. -+ -+ * test262/expectations.yaml: -+ -+2022-05-06 Ross Kirsling -+ -+ Temporal.Duration#toString should never ignore fractionalSecondDigits -+ https://bugs.webkit.org/show_bug.cgi?id=240193 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * stress/temporal-duration.js: Add a test case. -+ * test262/expectations.yaml: Mark two test cases as passing. -+ -+2022-05-06 Ross Kirsling -+ -+ ISO8601::Duration should guard against -0 -+ https://bugs.webkit.org/show_bug.cgi?id=240185 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * test262/expectations.yaml: -+ Mark 32 test cases as passing. -+ -+2022-05-05 Keith Miller -+ -+ Rebaseline icu tests to public sdk's icu -+ https://bugs.webkit.org/show_bug.cgi?id=240142 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * test262/expectations.yaml: -+ -+2022-05-04 Yusuke Suzuki -+ -+ [JSC] Intl.NumberFormat lacks some validation for rounding-increment -+ https://bugs.webkit.org/show_bug.cgi?id=240102 -+ -+ Reviewed by Ross Kirsling. -+ -+ * test262/expectations.yaml: -+ -+2022-05-04 Ross Kirsling -+ -+ Temporal.Duration constructor should throw on non-integers -+ https://bugs.webkit.org/show_bug.cgi?id=240094 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * test262/expectations.yaml: -+ Mark two test cases as passing. -+ -+2022-05-04 Yusuke Suzuki -+ -+ [JSC] Temporal.Instant since/until should not accept year / month / day / week units -+ https://bugs.webkit.org/show_bug.cgi?id=240097 -+ -+ Reviewed by Ross Kirsling. -+ -+ * stress/temporal-instant-since-and-until-with-year-month-week-day.js: Added. -+ (shouldThrow): -+ (let.smallestUnit.of.units.shouldThrow): -+ (let.largestUnit.of.units.shouldThrow): -+ -+2022-05-04 Keith Miller -+ -+ May 2022 test262 update -+ https://bugs.webkit.org/show_bug.cgi?id=240076 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * test262/harness/propertyHelper.js: -+ * test262/harness/regExpUtils.js: -+ (testPropertyEscapes): -+ * test262/harness/temporalHelpers.js: -+ (TemporalHelpers.assertPlainYearMonth): -+ (TemporalHelpers.calendarFromFieldsUndefinedOptions.CalendarFromFieldsUndefinedOptions): -+ (TemporalHelpers.calendarFromFieldsUndefinedOptions.CalendarFromFieldsUndefinedOptions.prototype.toString): -+ (TemporalHelpers.calendarFromFieldsUndefinedOptions.CalendarFromFieldsUndefinedOptions.prototype.dateFromFields): -+ (TemporalHelpers.calendarFromFieldsUndefinedOptions.CalendarFromFieldsUndefinedOptions.prototype.yearMonthFromFields): -+ (TemporalHelpers.calendarFromFieldsUndefinedOptions.CalendarFromFieldsUndefinedOptions.prototype.monthDayFromFields): -+ (TemporalHelpers.OneShiftTimeZone.prototype.getPossibleInstantsFor): -+ (TemporalHelpers.checkFractionalSecondDigitsOptionWrongType): Deleted. -+ * test262/latest-changes-summary.txt: -+ * test262/test/built-ins/Array/prototype/Symbol.unscopables/array-find-from-last.js: Added. -+ * test262/test/built-ins/Array/prototype/Symbol.unscopables/array-grouping.js: Added. -+ * test262/test/built-ins/Array/prototype/Symbol.unscopables/value.js: -+ * test262/test/built-ins/Array/prototype/concat/create-species-non-ctor.js: -+ * test262/test/built-ins/Array/prototype/filter/create-species-non-ctor.js: -+ * test262/test/built-ins/Array/prototype/map/create-species-non-ctor.js: -+ * test262/test/built-ins/Array/prototype/slice/create-species-non-ctor.js: -+ * test262/test/built-ins/Array/prototype/splice/create-species-non-ctor.js: -+ * test262/test/built-ins/Date/parse/year-zero.js: Added. -+ * test262/test/built-ins/Date/year-zero.js: Added. -+ * test262/test/built-ins/Error/constructor.js: -+ * test262/test/built-ins/Function/prototype/bind/instance-length-tointeger.js: -+ * test262/test/built-ins/Number/S15.7.1.1_A1.js: -+ * test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js: -+ * test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js: -+ * test262/test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js: Added. -+ (const.fn.r.evaluate.globalThis.revocable.Proxy.revocable): -+ * test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-ordinary-object.js: Added. -+ (catch): -+ * test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-orginary-object.js: Removed. -+ * test262/test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js: Added. -+ (r.evaluate.const.revocable.Proxy.revocable): -+ (r.evaluate.const.fn): -+ * test262/test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js: -+ (i.pair.0.localeCompare): -+ (string_appeared_here.localeCompare): Deleted. -+ (else.i.pair.0.localeCompare): Deleted. -+ * test262/test/built-ins/Temporal/Calendar/from/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/from/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/from/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Calendar.from): -+ (description.of.typeErrorTests.Temporal.Calendar.from): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.Duration): -+ (description.of.typeErrorTests.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-with-utc-designator.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.Duration): -+ (description.of.typeErrorTests.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDate): -+ (description.of.rangeErrorTests.instance.dateUntil.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.instance.dateUntil.new.Temporal.PlainDate): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDate): -+ (description.of.rangeErrorTests.instance.dateUntil.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.instance.dateUntil.new.Temporal.PlainDate): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.day): -+ (description.of.typeErrorTests.instance.day): -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.day): -+ (description.of.typeErrorTests.instance.day): -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/day/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.dayOfWeek): -+ (description.of.typeErrorTests.instance.dayOfWeek): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.dayOfWeek): -+ (description.of.typeErrorTests.instance.dayOfWeek): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.dayOfYear): -+ (description.of.typeErrorTests.instance.dayOfYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.dayOfYear): -+ (description.of.typeErrorTests.instance.dayOfYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.daysInMonth): -+ (description.of.typeErrorTests.instance.daysInMonth): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.daysInMonth): -+ (description.of.typeErrorTests.instance.daysInMonth): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.daysInWeek): -+ (description.of.typeErrorTests.instance.daysInWeek): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.daysInWeek): -+ (description.of.typeErrorTests.instance.daysInWeek): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.daysInYear): -+ (description.of.typeErrorTests.instance.daysInYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.daysInYear): -+ (description.of.typeErrorTests.instance.daysInYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.inLeapYear): -+ (description.of.typeErrorTests.instance.inLeapYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.inLeapYear): -+ (description.of.typeErrorTests.instance.inLeapYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/basic.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/branding.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/basic.js: Added. -+ (assert.deepEqual.cal.mergeFields): -+ * test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/iso8601-calendar-month-monthCode.js: Added. -+ (assert.deepEqual.cal.mergeFields): -+ * test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/non-string-properties.js: Added. -+ (assert.deepEqual.cal.mergeFields): -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.month): -+ (description.of.typeErrorTests.instance.month): -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.month): -+ (description.of.typeErrorTests.instance.month): -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/month/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.monthCode): -+ (description.of.typeErrorTests.instance.monthCode): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.monthCode): -+ (description.of.typeErrorTests.instance.monthCode): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/basic.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-missing-properties.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-not-object.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/monthcode-invalid.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-constrain.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-reject.js: Added. -+ (9995.forEach): -+ (999.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/reference-year-1972.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.monthsInYear): -+ (description.of.typeErrorTests.instance.monthsInYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.monthsInYear): -+ (description.of.typeErrorTests.instance.monthsInYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/basic.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/branding.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindate.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindatetime.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.weekOfYear): -+ (description.of.typeErrorTests.instance.weekOfYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.weekOfYear): -+ (description.of.typeErrorTests.instance.weekOfYear): -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/branding.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.year): -+ (description.of.typeErrorTests.instance.year): -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.year): -+ (description.of.typeErrorTests.instance.year): -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/year/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/basic.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/branding.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-missing-properties.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-not-object.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/monthcode-invalid.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-not-object.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-constrain.js: Added. -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-reject.js: Added. -+ (9995.forEach): -+ * test262/test/built-ins/Temporal/Duration/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/call-builtin.js: Added. -+ (Number.isFinite): -+ (Math.sign): -+ * test262/test/built-ins/Temporal/Duration/compare/argument-cast.js: Added. -+ (assert.sameValue.Temporal.Duration.compare.new.Temporal.Duration): -+ (Temporal.Duration.compare.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/compare/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/relativeto-hour.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/relativeto-month.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/relativeto-year.js: Added. -+ * test262/test/built-ins/Temporal/Duration/compare/timezone-string-leap-second.js: Added. -+ (new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/compare/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Duration/compare/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.Duration): -+ (description.of.typeErrorTests.new.Temporal.Duration): -+ (new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/compare/twenty-five-hour-day.js: Added. -+ * test262/test/built-ins/Temporal/Duration/days-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/from/argument-duration.js: Added. -+ * test262/test/built-ins/Temporal/Duration/from/argument-existing-object.js: -+ * test262/test/built-ins/Temporal/Duration/from/argument-object-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Duration/from/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Duration/from/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/Duration/hours-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/microseconds-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/milliseconds-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/minutes-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/mixed.js: Added. -+ * test262/test/built-ins/Temporal/Duration/months-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/nanoseconds-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/abs/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/abs/new-object.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/argument-object-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/options-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/add/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-leap-second.js: Added. -+ (const.result1.instance.add.new.Temporal.Duration): -+ (const.result2.instance.add.new.Temporal.Duration): -+ (const.result3.instance.add.new.Temporal.Duration): -+ (const.result4.instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-number.js: Added. -+ (const.result.instance.add.new.Temporal.Duration): -+ (const.relativeTo.of.numbers.instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-number.js: Added. -+ (const.result1.instance.add.new.Temporal.Duration): -+ (const.result2.instance.add.new.Temporal.Duration): -+ (const.calendar.of.numbers.instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.add.new.Temporal.Duration): -+ (description.of.typeErrorTests.instance.add.new.Temporal.Duration): -+ (instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-required.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.add.new.Temporal.Duration): -+ (description.of.typeErrorTests.instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-leap-second.js: Added. -+ (instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/add/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.add.new.Temporal.Duration): -+ (description.of.typeErrorTests.instance.add.new.Temporal.Duration): -+ (instance.add.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/blank/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/negated/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-default.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-mismatch.js: Added. -+ (largestIdx.smallestIdx.d.round): -+ * test262/test/built-ins/Temporal/Duration/prototype/round/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-number.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.round): -+ (description.of.typeErrorTests.instance.round): -+ * test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.round): -+ (description.of.typeErrorTests.instance.round): -+ * test262/test/built-ins/Temporal/Duration/prototype/round/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/round/roundto-invalid-string.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-disallowed-units-string.js: Removed. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit.js: Added. -+ (expected.of.Object.entries): -+ * test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/round/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.round): -+ (description.of.typeErrorTests.instance.round): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-object-invalid.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/options-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-leap-second.js: Added. -+ (const.result1.instance.subtract.new.Temporal.Duration): -+ (const.result2.instance.subtract.new.Temporal.Duration): -+ (const.result3.instance.subtract.new.Temporal.Duration): -+ (const.result4.instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-number.js: Added. -+ (const.result.instance.subtract.new.Temporal.Duration): -+ (const.relativeTo.of.numbers.instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-number.js: Added. -+ (const.result1.instance.subtract.new.Temporal.Duration): -+ (const.result2.instance.subtract.new.Temporal.Duration): -+ (const.calendar.of.numbers.instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.subtract.new.Temporal.Duration): -+ (description.of.typeErrorTests.instance.subtract.new.Temporal.Duration): -+ (instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-required.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.subtract.new.Temporal.Duration): -+ (description.of.typeErrorTests.instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-leap-second.js: Added. -+ (instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.subtract.new.Temporal.Duration): -+ (description.of.typeErrorTests.instance.subtract.new.Temporal.Duration): -+ (instance.subtract.new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/Duration/prototype/toJSON/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toJSON/options.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/balance.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-auto.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-invalid-string.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-number.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-out-of-range.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-undefined.js: -+ (expected.of.tests.const.lambda.duration.toString): -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-wrong-type.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/negative-components.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-fractionalseconddigits.js: Added. -+ (expected.of.tests.const.string.duration.toString.get fractionalSecondDigits): -+ (duration.toString.get fractionalSecondDigits): -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-valid-units.js: -+ (test): -+ (notValid.forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/total/options-wrong-type.js: -+ (values.forEach): Deleted. -+ * test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-number.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.total): -+ (description.of.typeErrorTests.instance.total): -+ * test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.total): -+ (description.of.typeErrorTests.instance.total): -+ * test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/total/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.total): -+ (description.of.typeErrorTests.instance.total): -+ * test262/test/built-ins/Temporal/Duration/prototype/valueOf/basic.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/all-negative.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/all-positive.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/argument-invalid-prop.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/argument-mixed-sign.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/argument-object-wrong-shape.js: Added. -+ (let.d.new.Temporal.Duration): -+ (forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/with/argument-sign-prop.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/argument-wrong-type.js: Added. -+ (forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/with/branding.js: -+ * test262/test/built-ins/Temporal/Duration/prototype/with/partial-positive.js: Added. -+ * test262/test/built-ins/Temporal/Duration/prototype/with/sign-conflict-throws-rangeerror.js: Added. -+ (fields.forEach): -+ * test262/test/built-ins/Temporal/Duration/prototype/with/sign-replace.js: Added. -+ * test262/test/built-ins/Temporal/Duration/seconds-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/weeks-undefined.js: -+ * test262/test/built-ins/Temporal/Duration/years-undefined.js: -+ * test262/test/built-ins/Temporal/Instant/compare/argument-object-tostring.js: Added. -+ (arg.toString): -+ * test262/test/built-ins/Temporal/Instant/compare/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Instant.compare): -+ (description.of.typeErrorTests.Temporal.Instant.compare): -+ * test262/test/built-ins/Temporal/Instant/compare/instant-string-sub-minute-offset.js: Added. -+ * test262/test/built-ins/Temporal/Instant/compare/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/compare/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/from/argument-instant.js: Added. -+ * test262/test/built-ins/Temporal/Instant/from/argument-object-tostring.js: Added. -+ (arg.toString): -+ * test262/test/built-ins/Temporal/Instant/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Instant.from): -+ (description.of.typeErrorTests.Temporal.Instant.from): -+ * test262/test/built-ins/Temporal/Instant/from/basic.js: Added. -+ * test262/test/built-ins/Temporal/Instant/from/instant-string-sub-minute-offset.js: Added. -+ * test262/test/built-ins/Temporal/Instant/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/add/basic.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/add/branding.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/add/disallowed-duration-units.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/add/result-out-of-range.js: -+ (fields.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/equals/argument-object-tostring.js: Added. -+ (arg.toString): -+ * test262/test/built-ins/Temporal/Instant/prototype/equals/argument-wrong-type.js: -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/Instant/prototype/equals/instant-string-sub-minute-offset.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/equals/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/round/options-wrong-type.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/round/rounding-direction.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/round/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/round/roundto-invalid-string.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-disallowed-units.js: Removed. -+ * test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/since/argument-object-tostring.js: Added. -+ (arg.toString): -+ * test262/test/built-ins/Temporal/Instant/prototype/since/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/Instant/prototype/since/instant-string-sub-minute-offset.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/since/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/since/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/since/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/since/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/subtract/basic.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/subtract/branding.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/subtract/disallowed-duration-units.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/subtract/result-out-of-range.js: -+ (fields.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/toJSON/year-format.js: Added. -+ (epochNsInYear): -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-auto.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-non-integer.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-number.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-out-of-range.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-undefined.js: -+ (expected.of.tests.const.lambda.instant.toString): -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-wrong-type.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-cross-midnight.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-direction.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-fractionalseconddigits.js: Added. -+ (expected.of.tests.const.string.instant.toString.get fractionalSecondDigits): -+ (instant.toString.get fractionalSecondDigits): -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-valid-units.js: -+ (test): -+ (notValid.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toString): -+ (description.of.typeErrorTests.instance.toString): -+ * test262/test/built-ins/Temporal/Instant/prototype/toString/year-format.js: Added. -+ (epochNsInYear): -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTimeISO): -+ (description.of.typeErrorTests.instance.toZonedDateTimeISO): -+ * test262/test/built-ins/Temporal/Instant/prototype/until/argument-object-tostring.js: Added. -+ (arg.toString): -+ * test262/test/built-ins/Temporal/Instant/prototype/until/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/Instant/prototype/until/instant-string-sub-minute-offset.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/until/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/until/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/Instant/prototype/until/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/Instant/prototype/until/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/plainDate/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDate/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDate/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainDate): -+ (description.of.typeErrorTests.Temporal.Now.plainDate): -+ * test262/test/built-ins/Temporal/Now/plainDate/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDate/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainDate): -+ (description.of.typeErrorTests.Temporal.Now.plainDate): -+ * test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainDateISO): -+ (description.of.typeErrorTests.Temporal.Now.plainDateISO): -+ * test262/test/built-ins/Temporal/Now/plainDateTime/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDateTime/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDateTime/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainDateTime): -+ (description.of.typeErrorTests.Temporal.Now.plainDateTime): -+ * test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainDateTime): -+ (description.of.typeErrorTests.Temporal.Now.plainDateTime): -+ * test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainDateTimeISO): -+ (description.of.typeErrorTests.Temporal.Now.plainDateTimeISO): -+ * test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.plainTimeISO): -+ (description.of.typeErrorTests.Temporal.Now.plainTimeISO): -+ * test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.zonedDateTime): -+ (description.of.typeErrorTests.Temporal.Now.zonedDateTime): -+ * test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.zonedDateTime): -+ (description.of.typeErrorTests.Temporal.Now.zonedDateTime): -+ * test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.Now.zonedDateTimeISO): -+ (description.of.typeErrorTests.Temporal.Now.zonedDateTimeISO): -+ * test262/test/built-ins/Temporal/PlainDate/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.new.Temporal.PlainDate): -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDate): -+ (description.of.rangeErrorTests.Temporal.PlainDate.compare.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.Temporal.PlainDate.compare.new.Temporal.PlainDate): -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/compare/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDate): -+ (description.of.rangeErrorTests.Temporal.PlainDate.compare.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.Temporal.PlainDate.compare.new.Temporal.PlainDate): -+ * test262/test/built-ins/Temporal/PlainDate/compare/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/compare/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/compare/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-number.js: -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-plaindate.js: -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainDate.from): -+ (description.of.typeErrorTests.Temporal.PlainDate.from): -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js: -+ (const.object.get overflow): Deleted. -+ * test262/test/built-ins/Temporal/PlainDate/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainDate.from): -+ (description.of.typeErrorTests.Temporal.PlainDate.from): -+ * test262/test/built-ins/Temporal/PlainDate/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string-invalid.js: Copied from JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js. -+ (const.object.get overflow): -+ * test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string.js: Renamed from JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-overflow.js. -+ * test262/test/built-ins/Temporal/PlainDate/from/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/from/overflow-invalid-string.js: -+ (validItems.forEach): Deleted. -+ * test262/test/built-ins/Temporal/PlainDate/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/add/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/add/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type.js: -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-default.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/subtract/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toJSON/year-format.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toPlainDateTime): -+ (description.of.typeErrorTests.instance.toPlainDateTime): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/limits.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toString/year-format.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-default.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-higher-units.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDate/prototype/with/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/with/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withCalendar): -+ (description.of.typeErrorTests.instance.withCalendar): -+ * test262/test/built-ins/Temporal/PlainDateTime/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDateTime): -+ (description.of.typeErrorTests.new.Temporal.PlainDateTime): -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDateTime): -+ (description.of.rangeErrorTests.Temporal.PlainDateTime.compare.new.Temporal.PlainDateTime): -+ (description.of.typeErrorTests.new.Temporal.PlainDateTime): -+ (description.of.typeErrorTests.Temporal.PlainDateTime.compare.new.Temporal.PlainDateTime): -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainDateTime): -+ (description.of.rangeErrorTests.Temporal.PlainDateTime.compare.new.Temporal.PlainDateTime): -+ (description.of.typeErrorTests.new.Temporal.PlainDateTime): -+ (description.of.typeErrorTests.Temporal.PlainDateTime.compare.new.Temporal.PlainDateTime): -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/calendar-ignored.js: Added. -+ (const.calendar1.toString): -+ (const.calendar2.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/cast.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/compare/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/constructor-full.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/datetime-math.js: Added. -+ (units.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-object-month.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-plaindatetime.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainDateTime.from): -+ (description.of.typeErrorTests.Temporal.PlainDateTime.from): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-comma-decimal-separator.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-invalid.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-offset.js: Added. -+ (strs.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-optional-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-out-of-range.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-subsecond.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-time-separators.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-timezone.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainDateTime.from): -+ (description.of.typeErrorTests.Temporal.PlainDateTime.from): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/limits.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/from/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/overflow-default-constrain.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/overflow-invalid-string.js: -+ (validValues.forEach): Deleted. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/overflow-reject.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/hour-undefined.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/limits.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/microsecond-undefined.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/millisecond-undefined.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/minute-undefined.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/nanosecond-undefined.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/ambiguous-date.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-duration.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-plain-object-mixed-signs.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/hour-overflow.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/limits.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/negative-duration.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-empty.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-invalid.js: Added. -+ (badOptions.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/add/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfWeek/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfYear/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInMonth/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInWeek/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInYear/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type.js: -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/calendar-checked.js: Added. -+ (const.calendar4.toString): -+ (const.calendar5.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/cast.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/monthsInYear/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/balance.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/limits.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/rounding-direction.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js: Added. -+ (12.forEach): -+ (string_appeared_here.forEach): -+ (Object.entries.nextIncrements.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js: Added. -+ (units.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js: Added. -+ (Object.entries.incrementOneCeil.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js: Added. -+ (Object.entries.incrementOneFloor.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js: Added. -+ (Object.entries.incrementOneNearest.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js: Added. -+ (Object.entries.units.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js: Added. -+ (Object.entries.incrementOneFloor.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundto-invalid-string.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-disallowed-units.js: Removed. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-no-argument.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/different-calendars-throws.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/no-unnecessary-units.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-empty.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-invalid.js: Added. -+ (badOptions.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/returns-days.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/round-relative-to-receiver.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-cleanly-divides.js: Added. -+ (12.forEach): -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-does-not-divide.js: Added. -+ (Object.entries.badIncrements.forEach): -+ (Object.entries.fullIncrements.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-ceil-basic.js: Added. -+ (incrementOneCeil.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-floor-basic.js: Added. -+ (incrementOneFloor.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-basic.js: Added. -+ (ensureUnsignedZero): -+ (incrementOneNearest.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-default-changes.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-basic.js: Added. -+ (ensureUnsignedZero): -+ (incrementOneTrunc.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-is-default.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/subseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/weeks-months-mutually-exclusive.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/ambiguous-date.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-duration.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-plain-object-mixed-signs.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/hour-overflow.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/limits.js: Added. -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/negative-duration.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-empty.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-invalid.js: Added. -+ (badOptions.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toJSON/year-format.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainTime/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-always.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js: Added. -+ (const.customCal.toString): -+ (const.fakeISO8601Cal.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-invalid-string.js: -+ (invalidCals.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-never.js: Added. -+ (const.cal.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-auto.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-non-integer.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-out-of-range.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-undefined.js: -+ (expected.of.tests.const.lambda.datetime.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-wrong-type.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-cross-midnight.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-direction.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-fractionalseconddigits.js: Added. -+ (expected.of.tests.const.string.datetime.toString.get fractionalSecondDigits): -+ (datetime.toString.get fractionalSecondDigits): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-valid-units.js: -+ (test): -+ (notValid.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/year-format.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguation-invalid-string.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/invalid-instant.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/multiple-instants.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/casts-argument.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/different-calendars-throws.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/inverse.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/no-unnecessary-units.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-empty.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-invalid.js: Added. -+ (badOptions.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/returns-days.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/round-relative-to-receiver.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-cleanly-divides.js: Added. -+ (12.forEach): -+ (string_appeared_here.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-does-not-divide.js: Added. -+ (Object.entries.nondivisibleUnits.forEach): -+ (Object.entries.equalDivisibleUnits.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-ceil-basic.js: Added. -+ (incrementOneCeil.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-floor-basic.js: Added. -+ (incrementOneFloor.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-basic.js: Added. -+ (ensureUnsignedZero): -+ (incrementOneNearest.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-default-changes.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-basic.js: Added. -+ (ensureUnsignedZero): -+ (incrementOneTrunc.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-is-default.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/subseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/units-changed.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/weeks-months-mutually-exclusive.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/valueOf/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/weekOfYear/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-not-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-object-insufficient-data.js: Added. -+ (units.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-options.js: Added. -+ (Calendar): -+ (Calendar.prototype.dateFromFields): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-temporal-object-throws.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-throws.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/month-and-monthcode-must-agree.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/multiple-unrecognized-properties-ignored.js: Added. -+ (units.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-empty.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-invalid.js: Added. -+ (badOptions.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/order-of-operations.js: -+ (const.options.get overflow): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/string-throws.js: Added. -+ (baddies.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/with/timezone-throws.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/argument-string.js: Added. -+ (const.calendar.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-temporal-object.js: -+ (TemporalHelpers.checkToTemporalCalendarFastPath): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withCalendar): -+ (description.of.typeErrorTests.instance.withCalendar): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js: Added. -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js: Added. -+ (const.cal1.toString): -+ (const.cal2.toString): -+ (const.cal2.year): -+ (const.cal2.month): -+ (const.cal2.monthCode): -+ (const.cal2.day): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js: Added. -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js: Added. -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withPlainDate): -+ (description.of.typeErrorTests.instance.withPlainDate): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js: Added. -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withPlainDate): -+ (description.of.typeErrorTests.instance.withPlainDate): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/non-compatible-calendars-throw.js: Added. -+ (const.cal.toString): -+ (const.anotherCal.toString): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-object-insufficient-data.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-without-time-designator.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-time.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withPlainTime): -+ (description.of.typeErrorTests.instance.withPlainTime): -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/no-argument-default-to-midnight.js: Added. -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainDateTime/second-undefined.js: -+ * test262/test/built-ins/Temporal/PlainMonthDay/calendar-always.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainMonthDay): -+ (description.of.typeErrorTests.new.Temporal.PlainMonthDay): -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-plainmonthday.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainMonthDay.from): -+ (description.of.typeErrorTests.Temporal.PlainMonthDay.from): -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainMonthDay.from): -+ (description.of.typeErrorTests.Temporal.PlainMonthDay.from): -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/calendar-monthdayfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.monthDayFromFields): -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/overflow-invalid-string.js: -+ (validValues.forEach): Deleted. -+ * test262/test/built-ins/Temporal/PlainMonthDay/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type.js: -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/calendar-monthdayfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.monthDayFromFields): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/toJSON/year-format.js: Added. -+ (NotISO): -+ (NotISO.prototype.toString): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/calendarname-always.js: -+ (toString): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/year-format.js: Added. -+ (NotISO): -+ (NotISO.prototype.toString): -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/compare/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/compare/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainTime): -+ (description.of.rangeErrorTests.Temporal.PlainTime.compare.new.Temporal.PlainTime): -+ (description.of.typeErrorTests.new.Temporal.PlainTime): -+ (description.of.typeErrorTests.Temporal.PlainTime.compare.new.Temporal.PlainTime): -+ * test262/test/built-ins/Temporal/PlainTime/compare/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainTime/compare/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-object-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-plaintime.js: -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainTime.from): -+ (description.of.typeErrorTests.Temporal.PlainTime.from): -+ * test262/test/built-ins/Temporal/PlainTime/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/observable-get-overflow-argument-string-invalid.js: Renamed from JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-invalid.js. -+ * test262/test/built-ins/Temporal/PlainTime/from/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/overflow-constrain.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/overflow-invalid-string.js: -+ (validValues.forEach): Deleted. -+ * test262/test/built-ins/Temporal/PlainTime/from/overflow-reject.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/negative-zero.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-duration.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-higher-units.js: Added. -+ (new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js: -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/rounding-cross-midnight.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-hours.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-microseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-milliseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-minutes.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-seconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-undefined.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/roundto-invalid-string.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-disallowed-units.js: Removed. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-missing.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-cast.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/result-sub-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-hours.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-microseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-milliseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-minutes.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-nanoseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-seconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-undefined.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-duration.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-higher-units.js: Added. -+ (new.Temporal.Duration): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-object.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toPlainDateTime): -+ (description.of.typeErrorTests.instance.toPlainDateTime): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toPlainDateTime): -+ (description.of.typeErrorTests.instance.toPlainDateTime): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/limits.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-non-integer.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-out-of-range.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-undefined.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-wrong-type.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-valid-units.js: -+ (test): -+ (notValid.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-with-utc-designator.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.toZonedDateTime): -+ (description.of.typeErrorTests.instance.toZonedDateTime): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.plainDate.new.Temporal.PlainDate): -+ (description.of.typeErrorTests.plainDate.new.Temporal.PlainDate): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-cast.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/basic.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/result-sub-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-hours.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-invalid.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-microseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-milliseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-minutes.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-nanoseconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-seconds.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-undefined.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainTime/prototype/with/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainTime/prototype/with/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/calendar-always.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainYearMonth): -+ (description.of.typeErrorTests.new.Temporal.PlainYearMonth): -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainYearMonth): -+ (description.of.rangeErrorTests.Temporal.PlainYearMonth.compare.new.Temporal.PlainYearMonth): -+ (description.of.typeErrorTests.new.Temporal.PlainYearMonth): -+ (description.of.typeErrorTests.Temporal.PlainYearMonth.compare.new.Temporal.PlainYearMonth): -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.PlainYearMonth): -+ (description.of.rangeErrorTests.Temporal.PlainYearMonth.compare.new.Temporal.PlainYearMonth): -+ (description.of.typeErrorTests.new.Temporal.PlainYearMonth): -+ (description.of.typeErrorTests.Temporal.PlainYearMonth.compare.new.Temporal.PlainYearMonth): -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.yearMonthFromFields): -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-number.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainYearMonth.from): -+ (description.of.typeErrorTests.Temporal.PlainYearMonth.from): -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.PlainYearMonth.from): -+ (description.of.typeErrorTests.Temporal.PlainYearMonth.from): -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.yearMonthFromFields): -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/overflow-invalid-string.js: -+ (validValues.forEach): Deleted. -+ * test262/test/built-ins/Temporal/PlainYearMonth/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/limits.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/calendar-datefromfields-called.js: Added. -+ (CustomCalendar): -+ (CustomCalendar.prototype.year): -+ (CustomCalendar.prototype.month): -+ (CustomCalendar.prototype.monthCode): -+ (CustomCalendar.prototype.day): -+ (CustomCalendar.prototype.daysInMonth): -+ (CustomCalendar.prototype._dateFromFieldsImpl): -+ (CustomCalendar.prototype.dateFromFields): -+ (CustomCalendar.prototype.yearMonthFromFields): -+ (CustomCalendar.prototype.monthDayFromFields): -+ (CustomCalendar.prototype.dateAdd): -+ (CustomCalendar.prototype.toString): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-wrong-type.js: -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.yearMonthFromFields): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.yearMonthFromFields): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/calendar-datefromfields-called.js: Added. -+ (CustomCalendar): -+ (CustomCalendar.prototype.year): -+ (CustomCalendar.prototype.month): -+ (CustomCalendar.prototype.monthCode): -+ (CustomCalendar.prototype.day): -+ (CustomCalendar.prototype.daysInMonth): -+ (CustomCalendar.prototype._dateFromFieldsImpl): -+ (CustomCalendar.prototype.dateFromFields): -+ (CustomCalendar.prototype.yearMonthFromFields): -+ (CustomCalendar.prototype.monthDayFromFields): -+ (CustomCalendar.prototype.dateAdd): -+ (CustomCalendar.prototype.toString): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/toJSON/year-format.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/year-format.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ (Temporal.Calendar.prototype.yearMonthFromFields): -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js: -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js: -+ (values.forEach): Deleted. -+ * test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/TimeZone/from/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/from/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.TimeZone.from): -+ (description.of.typeErrorTests.Temporal.TimeZone.from): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.getInstantFor): -+ (description.of.typeErrorTests.instance.getInstantFor): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.getInstantFor): -+ (description.of.typeErrorTests.instance.getInstantFor): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-object-tostring.js: Added. -+ (arg.toString): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.getPlainDateTimeFor): -+ (description.of.typeErrorTests.instance.getPlainDateTimeFor): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.getPlainDateTimeFor.new.Temporal.Instant): -+ (description.of.typeErrorTests.instance.getPlainDateTimeFor.new.Temporal.Instant): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string-sub-minute-offset.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/limits.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.getPossibleInstantsFor): -+ (description.of.typeErrorTests.instance.getPossibleInstantsFor): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.getPossibleInstantsFor): -+ (description.of.typeErrorTests.instance.getPossibleInstantsFor): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.ZonedDateTime): -+ (description.of.typeErrorTests.new.Temporal.ZonedDateTime): -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.ZonedDateTime.compare): -+ (description.of.typeErrorTests.Temporal.ZonedDateTime.compare): -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.ZonedDateTime.compare): -+ (description.of.typeErrorTests.Temporal.ZonedDateTime.compare): -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.ZonedDateTime.compare): -+ (description.of.typeErrorTests.Temporal.ZonedDateTime.compare): -+ * test262/test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.ZonedDateTime.from): -+ (description.of.typeErrorTests.Temporal.ZonedDateTime.from): -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.ZonedDateTime.from): -+ (description.of.typeErrorTests.Temporal.ZonedDateTime.from): -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/argument-zoneddatetime.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/overflow-invalid-string.js: -+ (validValues.forEach): Deleted. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.Temporal.ZonedDateTime.from): -+ (description.of.typeErrorTests.Temporal.ZonedDateTime.from): -+ * test262/test/built-ins/Temporal/ZonedDateTime/from/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.equals): -+ (description.of.typeErrorTests.instance.equals): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounding-direction.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundto-invalid-string.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-disallowed-units.js: Removed. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/calendar-dateadd-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.since): -+ (description.of.typeErrorTests.instance.since): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toJSON/year-format.js: Added. -+ (epochNsInYear): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-auto.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-non-integer.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-out-of-range.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-undefined.js: -+ (expected.of.tests.const.lambda.datetime.toString): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-wrong-type.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-cross-midnight.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-direction.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-ceil.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-floor.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-halfExpand.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-trunc.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-fractionalseconddigits.js: Added. -+ (expected.of.tests.const.string.datetime.toString.get fractionalSecondDigits): -+ (datetime.toString.get fractionalSecondDigits): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-valid-units.js: -+ (test): -+ (notValid.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/year-format.js: Added. -+ (epochNsInYear): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/calendar-dateadd-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/roundingmode-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/smallestunit-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.until): -+ (description.of.typeErrorTests.instance.until): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/options-wrong-type.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/overflow-invalid-string.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withCalendar): -+ (description.of.typeErrorTests.instance.withCalendar): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withPlainDate): -+ (description.of.typeErrorTests.instance.withPlainDate): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-string-invalid.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withPlainDate): -+ (description.of.typeErrorTests.instance.withPlainDate): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-number.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js: -+ (ambiguousStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withPlainTime): -+ (description.of.typeErrorTests.instance.withPlainTime): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js: -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.withTimeZone): -+ (description.of.typeErrorTests.instance.withTimeZone): -+ * test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-leap-second.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-multiple-offsets.js: Added. -+ * test262/test/built-ins/Temporal/ZonedDateTime/timezone-wrong-type.js: Added. -+ (description.of.rangeErrorTests.new.Temporal.ZonedDateTime): -+ (description.of.typeErrorTests.new.Temporal.ZonedDateTime): -+ * test262/test/built-ins/TypedArray/prototype/set/BigInt/array-arg-targetbuffer-detached-on-get-src-value-throws.js: Removed. -+ * test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js: Added. -+ (testWithTypedArrayConstructors.): -+ (testWithTypedArrayConstructors.get let): -+ * test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-throws.js: Removed. -+ * test262/test/built-ins/TypedArray/prototype/sort/BigInt/detached-buffer-comparefn.js: Removed. -+ * test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn-coerce.js: Removed. -+ * test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn.js: Removed. -+ * test262/test/built-ins/TypedArray/prototype/sort/sort-tonumber.js: -+ (testWithTypedArrayConstructors): -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-different-type.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-same-type.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-access-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-access-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/no-species.js: Added. -+ (GrossBuffer): -+ (GrossBuffer.get Symbol): -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-access-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-null.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-undefined.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-different-type.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-same-type.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-access-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-throws.js: Removed. -+ * test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js: Removed. -+ * test262/test/built-ins/parseInt/15.1.2.2-2-1.js: -+ * test262/test/harness/temporalHelpers-one-shift-time-zone.js: Added. -+ (checkTimeZoneArithmetic): -+ * test262/test/intl402/DurationFormat/constructor-locales-invalid.js: Added. -+ (expectedError.of.getInvalidLocaleArguments): -+ * test262/test/intl402/DurationFormat/constructor-locales-valid.js: Added. -+ (name.of.tests.matchers.forEach): -+ * test262/test/intl402/DurationFormat/constructor-options-defaults.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-invalid.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-valid.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-invalid.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-localeMatcher-invalid.js: Added. -+ (const.localeMatcher.of.invalidOptions.new.Intl.DurationFormat): -+ * test262/test/intl402/DurationFormat/constructor-options-localeMatcher-valid.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-numberingSystem-invalid.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-numberingSystem-valid.js: Added. -+ * test262/test/intl402/DurationFormat/constructor-options-order.js: Added. -+ (const.options.get localeMatcher): -+ (const.options.get numberingSystem): -+ (const.options.get style): -+ * test262/test/intl402/DurationFormat/constructor-options-style-invalid.js: Added. -+ (const.invalidOption.of.invalidOptions.new.Intl.DurationFormat): -+ * test262/test/intl402/DurationFormat/constructor-options-style-valid.js: Added. -+ (toString): -+ * test262/test/intl402/DurationFormat/extensibility.js: Renamed from JSTests/test262/test/intl402/DurationFormat/instance/extensibility.js. -+ * test262/test/intl402/DurationFormat/length.js: Renamed from JSTests/test262/test/intl402/DurationFormat/instance/length.js. -+ * test262/test/intl402/DurationFormat/name.js: Renamed from JSTests/test262/test/intl402/DurationFormat/instance/name.js. -+ * test262/test/intl402/DurationFormat/newtarget-undefined.js: Added. -+ * test262/test/intl402/DurationFormat/prop-desc.js: Renamed from JSTests/test262/test/intl402/DurationFormat/instance/prop-desc.js. -+ * test262/test/intl402/DurationFormat/prototype.js: Renamed from JSTests/test262/test/intl402/DurationFormat/instance/prototype.js. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/basic.js: Added. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/branding.js: Added. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/length.js: Added. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/locales-empty.js: Added. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/locales-invalid.js: Added. -+ (expectedError.of.getInvalidLocaleArguments): -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/locales-specific.js: Added. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/name.js: Added. -+ * test262/test/intl402/DurationFormat/supportedLocalesOf/prop-desc.js: Added. -+ * test262/test/intl402/Intl/DateTimeFormat/prototype/formatRange/fails-on-distinct-temporal-types.js: Added. -+ (Object.entries.instances.forEach): -+ * test262/test/intl402/Intl/DateTimeFormat/prototype/formatRangeToParts/fails-on-distinct-temporal-types.js: Added. -+ (Object.entries.instances.forEach): -+ * test262/test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js: -+ * test262/test/intl402/NumberFormat/constructor-roundingIncrement.js: -+ (expected.of.values.get roundingIncrement): -+ * test262/test/intl402/NumberFormat/prototype/format/format-max-min-fraction-significant-digits.js: Added. -+ (nfTestMatrix.forEach): -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js: -+ * test262/test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js: -+ * test262/test/intl402/NumberFormat/prototype/formatRange/x-greater-than-y-throws.js: -+ * test262/test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js: -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-number.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-number.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.era): -+ (description.of.typeErrorTests.instance.era): -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-string-invalid.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/era/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.era): -+ (description.of.typeErrorTests.instance.era): -+ * test262/test/intl402/Temporal/Calendar/prototype/era/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/era/leap-second.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/era/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-number.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-leap-second.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-number.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.eraYear): -+ (description.of.typeErrorTests.instance.eraYear): -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-year-zero.js: Added. -+ (invalidStrings.forEach): -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-string-invalid.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-wrong-type.js: Added. -+ (description.of.rangeErrorTests.instance.eraYear): -+ (description.of.typeErrorTests.instance.eraYear): -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/calendar-datefromfields-called-with-options-undefined.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/leap-second.js: Added. -+ * test262/test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js: -+ (invalidStrings.forEach): -+ * test262/test/intl402/Temporal/Duration/compare/relativeto-hour.js: Added. -+ * test262/test/intl402/Temporal/Instant/prototype/toString/timezone-offset.js: Added. -+ (test): -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-always.js: Added. -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js: Added. -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-never.js: Added. -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js: Added. -+ (const.cal.era): -+ (const.cal.eraYear): -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js: Added. -+ (const.cal1.toString): -+ (const.cal2.era): -+ (const.cal2.eraYear): -+ (const.cal2.toString): -+ (const.cal2.year): -+ (const.cal2.month): -+ (const.cal2.monthCode): -+ (const.cal2.day): -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js: Added. -+ (const.cal.era): -+ (const.cal.eraYear): -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js: Added. -+ (const.cal.era): -+ (const.cal.eraYear): -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-calendar.js: Added. -+ * test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js: Added. -+ (const.cal.era): -+ (const.cal.eraYear): -+ (const.cal.toString): -+ (const.cal.year): -+ (const.cal.month): -+ (const.cal.monthCode): -+ (const.cal.day): -+ * test262/test/intl402/Temporal/TimeZone/etc-timezone.js: Added. -+ (14.forEach): -+ (9.forEach): -+ (12.forEach): -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-and.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-nullish.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-or.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-and.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-nullish.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-or.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-and.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js: Removed. -+ * test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js: Removed. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-and.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-nullish.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-or.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-and.js: Added. -+ (doNotCall): -+ (C.prototype.get field): -+ (C.prototype.set field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-nullish.js: Added. -+ (doNotCall): -+ (C.prototype.get field): -+ (C.prototype.set field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-or.js: Added. -+ (doNotCall): -+ (C.prototype.get field): -+ (C.prototype.set field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-and.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-nullish.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-or.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-and.js: Added. -+ (doNotCall): -+ (C.prototype.compoundAssignment): -+ (C.prototype.fieldValue): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-nullish.js: Added. -+ (doNotCall): -+ (C.prototype.compoundAssignment): -+ (C.prototype.fieldValue): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-or.js: Added. -+ (doNotCall): -+ (C.prototype.compoundAssignment): -+ (C.prototype.fieldValue): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-and.js: Added. -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-nullish.js: Added. -+ (doNotCall): -+ (C.prototype.compoundAssignment): -+ (C.prototype.getPrivateMethodFunctionObject): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-or.js: Added. -+ (doNotCall): -+ (C.prototype.compoundAssignment): -+ (C.prototype.getPrivateMethodFunctionObject): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js: Added. -+ (C.prototype.get field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js: Added. -+ (C.prototype.get field): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js: Added. -+ (C.prototype.get field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-and.js: Added. -+ (doNotCall): -+ (C.prototype.get field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-nullish.js: Added. -+ (doNotCall): -+ (C.prototype.get field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-or.js: Added. -+ (doNotCall): -+ (C.prototype.get field): -+ (C.prototype.compoundAssignment): -+ (C): -+ * test262/test/language/expressions/unary-plus/S11.4.6_A3_T3.js: -+ (new.Number): -+ (isNaN): -+ * test262/test/language/statements/for-in/S12.6.4_A7_T2.js: -+ (erasator_T_1000): -+ (__accum.indexOf.string_appeared_here.1.__accum.indexOf): Deleted. -+ (__accum.indexOf): Deleted. -+ * test262/test262-Revision.txt: -+ - 2022-05-03 Angelos Oikonomopoulos - - Skip test currently failing on ARM -diff --git a/JSTests/microbenchmarks/typed-array-fill.js b/JSTests/microbenchmarks/typed-array-fill.js -new file mode 100644 -index 0000000000000000000000000000000000000000..79182c42584d6ca2bcb717968394a6131f320e7f ---- /dev/null -+++ b/JSTests/microbenchmarks/typed-array-fill.js -@@ -0,0 +1,11 @@ -+var a1 = new Uint8Array(1024 * 1024 * 1); -+var a2 = new Uint16Array(1024 * 1024 * 1); -+var a3 = new Uint32Array(1024 * 1024 * 1); -+var a4 = new Float64Array(1024 * 1024 * 1); -+ -+for (var i = 0; i < 3e2; ++i) { -+ a1.fill(99); -+ a2.fill(99); -+ a3.fill(99); -+ a4.fill(99); -+} -diff --git a/JSTests/stress/temporal-duration.js b/JSTests/stress/temporal-duration.js -index f279781fac65c79d90a77de242ac1c0fcb00962b..8310cdf94d54f2a6b55897ad2aecb7d8727333d3 100644 ---- a/JSTests/stress/temporal-duration.js -+++ b/JSTests/stress/temporal-duration.js -@@ -203,6 +203,7 @@ shouldThrow(() => Temporal.Duration.from('P1M').round({ largestUnit: 'seconds' } - shouldThrow(() => Temporal.Duration.from('P1W').round({ largestUnit: 'seconds' }), RangeError); - shouldThrow(() => Temporal.Duration.from('P1D').round({ largestUnit: 'months' }), RangeError); - shouldThrow(() => Temporal.Duration.from('P1D').round({ largestUnit: 'weeks' }), RangeError); -+shouldBe(posAbsolute.round('day').toString(), 'P1D'); - shouldBe(posAbsolute.round({ largestUnit: 'day' }).toString(), 'P1DT2H3M4.005006007S'); - shouldBe(posAbsolute.round({ largestUnit: 'auto' }).toString(), 'P1DT2H3M4.005006007S'); - shouldBe(posAbsolute.round({ smallestUnit: 'day' }).toString(), 'P1D'); -@@ -229,6 +230,7 @@ shouldThrow(() => Temporal.Duration.from('P1M').total({ unit: 'seconds' }), Rang - shouldThrow(() => Temporal.Duration.from('P1W').total({ unit: 'seconds' }), RangeError); - shouldThrow(() => Temporal.Duration.from('P1D').total({ unit: 'months' }), RangeError); - shouldThrow(() => Temporal.Duration.from('P1D').total({ unit: 'weeks' }), RangeError); -+shouldBe(posAbsolute.total('days'), 1.0854630209028588); - shouldBe(posAbsolute.total({ unit: 'days' }), 1.0854630209028588); - shouldBe(posAbsolute.total({ unit: 'hours' }), 26.051112501668612); - shouldBe(posAbsolute.total({ unit: 'minutes' }), 1563.0667501001167); -@@ -281,6 +283,7 @@ for (let i = 1; i < 10; i++) - shouldBe(pos.toString({ fractionalSecondDigits: i }), `P1Y2M3W4DT5H6M7.${decimalPart.slice(0,i)}S`); - shouldBe(pos.toString({ fractionalSecondDigits: 'auto' }), pos.toString()); - shouldBe(zero.toString({ fractionalSecondDigits: 2 }), 'PT0.00S'); -+shouldBe(new Temporal.Duration(1).toString({ fractionalSecondDigits: 2 }), 'P1YT0.00S'); - - shouldThrow(() => pos.toString({ roundingMode: 'bogus' }), RangeError); - shouldBe(pos.toString({ roundingMode: 'trunc' }), pos.toString()); -diff --git a/JSTests/stress/temporal-instant-since-and-until-with-year-month-week-day.js b/JSTests/stress/temporal-instant-since-and-until-with-year-month-week-day.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2f64a748f8e35b6bbaa5568e92952089a76f34c7 ---- /dev/null -+++ b/JSTests/stress/temporal-instant-since-and-until-with-year-month-week-day.js -@@ -0,0 +1,39 @@ -+//@ requireOptions("--useTemporal=1") -+function shouldThrow(func, errorMessage) { -+ var errorThrown = false; -+ var error = null; -+ try { -+ func(); -+ } catch (e) { -+ errorThrown = true; -+ error = e; -+ } -+ if (!errorThrown) -+ throw new Error('not thrown'); -+ if (String(error) !== errorMessage) -+ throw new Error(`bad error: ${String(error)}`); -+} -+ -+let earlier = new Temporal.Instant(1_000_000_000_000_000_000n); -+let later = new Temporal.Instant(1_000_090_061_987_654_321n); -+let units = [ "year", "month", "week", "day", ]; -+for (let smallestUnit of units) { -+ shouldThrow(() => { -+ later.since(earlier, { smallestUnit }); -+ }, `RangeError: smallestUnit is a disallowed unit`); -+} -+for (let largestUnit of units) { -+ shouldThrow(() => { -+ later.since(earlier, { largestUnit }); -+ }, `RangeError: largestUnit is a disallowed unit`); -+} -+for (let smallestUnit of units) { -+ shouldThrow(() => { -+ earlier.until(later, { smallestUnit }); -+ }, `RangeError: smallestUnit is a disallowed unit`); -+} -+for (let largestUnit of units) { -+ shouldThrow(() => { -+ earlier.until(later, { largestUnit }); -+ }, `RangeError: largestUnit is a disallowed unit`); -+} -diff --git a/JSTests/stress/temporal-instant.js b/JSTests/stress/temporal-instant.js -index e76254704b5a90c00dd69bc45e50fc8b647e53a7..149005bf95d68199d06457ad84ee92a36476e0c2 100644 ---- a/JSTests/stress/temporal-instant.js -+++ b/JSTests/stress/temporal-instant.js -@@ -229,6 +229,10 @@ shouldThrow(() => new Temporal.Instant('abc123'), SyntaxError); - // truncates to minute - [i1, i2, i3].forEach((i) => shouldBe(i.toString({ smallestUnit: 'minute' }), '1976-11-18T15:23Z')); - -+ // ...as opposed to rounding first -+ shouldBe(i3.round('minute').toString(), '1976-11-18T15:24:00Z'); -+ shouldBe(i3.round({ smallestUnit: 'minute' }).toString(), '1976-11-18T15:24:00Z'); -+ - // other smallestUnits are aliases for fractional digits - shouldBe(i3.toString({ smallestUnit: 'second' }), i3.toString({ fractionalSecondDigits: 0 })); - shouldBe(i3.toString({ smallestUnit: 'millisecond' }), i3.toString({ fractionalSecondDigits: 3 })); -diff --git a/JSTests/stress/temporal-plaintime.js b/JSTests/stress/temporal-plaintime.js -index a82bf37a2c57a013fff8e9a5370e34223751e893..0a716003c0e26e1f591a940c693c51fa732ecda2 100644 ---- a/JSTests/stress/temporal-plaintime.js -+++ b/JSTests/stress/temporal-plaintime.js -@@ -284,6 +284,7 @@ shouldBe(Temporal.PlainTime.from("20:34").calendar instanceof Temporal.Calendar, - - { - let time = Temporal.PlainTime.from('19:39:09.068346205'); -+ shouldBe(String(time.round('hour')), `20:00:00`); - shouldBe(String(time.round({ smallestUnit: 'hour' })), `20:00:00`); - shouldBe(String(time.round({ roundingIncrement: 30, smallestUnit: 'minute' })), `19:30:00`); - shouldBe(String(time.round({ roundingIncrement: 30, smallestUnit: 'minute', roundingMode: 'ceil' })), `20:00:00`); -diff --git a/JSTests/stress/typed-array-fill-complicated.js b/JSTests/stress/typed-array-fill-complicated.js -new file mode 100644 -index 0000000000000000000000000000000000000000..66030c5e86117f4a2255d2943f84f4eea39b1bda ---- /dev/null -+++ b/JSTests/stress/typed-array-fill-complicated.js -@@ -0,0 +1,22 @@ -+function shouldBe(actual, expected) { -+ if (actual !== expected) -+ throw new Error('bad value: ' + actual); -+} -+ -+{ -+ let a0 = new Uint8Array(100); -+ shouldBe(a0[3], 0); -+ shouldBe(a0[4], 0); -+ a0.fill(42, 3, 4); -+ shouldBe(a0[3], 42); -+ shouldBe(a0[4], 0); -+} -+{ -+ let a0 = new Uint8Array(4); -+ shouldBe(a0[0], 0); -+ a0.fill(42, 0, 0); -+ shouldBe(a0[0], 0); -+ a0.fill(42, 3, 0); -+ for (let i = 0; i < 4; ++i) -+ shouldBe(a0[i], 0); -+} -diff --git a/JSTests/test262/expectations.yaml b/JSTests/test262/expectations.yaml -index dcfc55408c904104cba9d73ec3cbd524a035f9c8..af6aacf58ec6c927240bf265c1777d65c6a96847 100644 ---- a/JSTests/test262/expectations.yaml -+++ b/JSTests/test262/expectations.yaml -@@ -603,7 +603,7 @@ test/annexB/language/global-code/switch-dflt-global-skip-early-err-try.js: - default: 'Test262Error: An initialized binding is not created prior to evaluation Expected a ReferenceError to be thrown but no exception was thrown at all' - test/annexB/language/global-code/switch-dflt-global-skip-early-err.js: - default: "SyntaxError: Cannot declare a function that shadows a let/const/class/function variable 'f' in strict mode." --test/built-ins/Array/prototype/Symbol.unscopables/value.js: -+test/built-ins/Array/prototype/Symbol.unscopables/array-grouping.js: - default: 'Test262Error: `groupBy` property value Expected SameValue(«undefined», «true») to be true' - strict mode: 'Test262Error: `groupBy` property value Expected SameValue(«undefined», «true») to be true' - test/built-ins/Date/UTC/fp-evaluation-order.js: -@@ -822,147 +822,255 @@ test/built-ins/RegExp/prototype/exec/u-lastindex-adv.js: - test/built-ins/RegExp/quantifier-integer-limit.js: - default: 'SyntaxError: Invalid regular expression: number too large in {} quantifier' - strict mode: 'SyntaxError: Invalid regular expression: number too large in {} quantifier' -+test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js: -+ default: 'Test262Error: TypeError on wrapping a callable proxy with throwing getOwnPropertyDescriptor trap Expected a TypeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: TypeError on wrapping a callable proxy with throwing getOwnPropertyDescriptor trap Expected a TypeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/compare/basic.js: -+ default: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-options-undefined.js: -+ default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(0n, timeZone, calendar)')" -+ strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(0n, timeZone, calendar)')" - test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-plaindate-instance.js: - default: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' - test/built-ins/Temporal/Duration/compare/calendar-possibly-required.js: - default: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/compare/options-wrong-type.js: -+ default: 'Test262Error: TypeError on wrong options type object Expected a TypeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: TypeError on wrong options type object Expected a TypeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/compare/relativeto-hour.js: -+ default: 'TypeError: Right side of assignment cannot be destructured' -+ strict mode: 'TypeError: Right side of assignment cannot be destructured' -+test/built-ins/Temporal/Duration/compare/relativeto-month.js: -+ default: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/compare/relativeto-propertybag-invalid.js: -+ default: 'Test262Error: missing year Expected a TypeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: missing year Expected a TypeError to be thrown but no exception was thrown at all' - test/built-ins/Temporal/Duration/compare/relativeto-propertybag-timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' -+test/built-ins/Temporal/Duration/compare/relativeto-year.js: -+ default: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot compare a duration of years, months, or weeks without a relativeTo option' - test/built-ins/Temporal/Duration/compare/relativeto-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" --test/built-ins/Temporal/Duration/fractional-throws-rangeerror.js: -- default: 'Test262Error: Duration constructor throws RangeError with fractional value in the years position Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: Duration constructor throws RangeError with fractional value in the years position Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Duration/prototype/add/argument-string-fractional-units-rounding-mode.js: -- default: 'Test262Error: negative fractional units rounded with correct rounding mode microseconds result Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: negative fractional units rounded with correct rounding mode microseconds result Expected SameValue(«-0», «0») to be true' -+test/built-ins/Temporal/Duration/compare/timezone-string-leap-second.js: -+ default: 'Test262Error: leap second in time zone name not valid Expected a RangeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: leap second in time zone name not valid Expected a RangeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/compare/timezone-string-year-zero.js: -+ default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/compare/timezone-wrong-type.js: -+ default: 'Test262Error: null does not convert to a valid ISO string Expected a RangeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: null does not convert to a valid ISO string Expected a RangeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/compare/twenty-five-hour-day.js: -+ default: 'TypeError: Right side of assignment cannot be destructured' -+ strict mode: 'TypeError: Right side of assignment cannot be destructured' - test/built-ins/Temporal/Duration/prototype/add/calendar-dateadd-called-with-plaindate-instance.js: - default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/options-wrong-type.js: -+ default: 'Test262Error: TypeError on wrong options type object Expected a TypeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: TypeError on wrong options type object Expected a TypeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-leap-second.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-number.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-number.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-wrong-type.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" - test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-required.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/relativeto-wrong-type.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' - test/built-ins/Temporal/Duration/prototype/add/relativeto-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" -+test/built-ins/Temporal/Duration/prototype/add/timezone-string-leap-second.js: -+ default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/add/timezone-wrong-type.js: -+ default: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' -+ strict mode: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' -+test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-options-undefined.js: -+ default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(0n, timeZone, calendar)')" -+ strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(0n, timeZone, calendar)')" - test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-plaindate-instance.js: - default: 'RangeError: Cannot round a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot round a duration of years, months, or weeks without a relativeTo option' - test/built-ins/Temporal/Duration/prototype/round/calendar-possibly-required.js: - default: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' - strict mode: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-default.js: -+ default: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+ strict mode: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+test/built-ins/Temporal/Duration/prototype/round/relativeto-leap-second.js: -+ default: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+ strict mode: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+test/built-ins/Temporal/Duration/prototype/round/relativeto-number.js: -+ default: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+ strict mode: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-number.js: -+ default: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+ strict mode: 'Error: FIXME: years, months, or weeks rounding with relativeTo not implemented yet' -+test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-wrong-type.js: -+ default: 'Test262Error: null does not convert to a valid ISO string Expected a RangeError but got a Error' -+ strict mode: 'Test262Error: null does not convert to a valid ISO string Expected a RangeError but got a Error' - test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a Error' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a Error' -+test/built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type.js: -+ default: 'Test262Error: undefined does not convert to a valid ISO string Expected a RangeError but got a Error' -+ strict mode: 'Test262Error: undefined does not convert to a valid ISO string Expected a RangeError but got a Error' - test/built-ins/Temporal/Duration/prototype/round/relativeto-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" --test/built-ins/Temporal/Duration/prototype/round/smallestunit-disallowed-units-string.js: -- default: 'Test262Error: "era" should not be allowed as an argument to round Expected a RangeError but got a TypeError' -- strict mode: 'Test262Error: "era" should not be allowed as an argument to round Expected a RangeError but got a TypeError' --test/built-ins/Temporal/Duration/prototype/round/smallestunit-plurals-accepted-string.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' --test/built-ins/Temporal/Duration/prototype/round/smallestunit-string-shorthand-string.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' -+test/built-ins/Temporal/Duration/prototype/round/timezone-string-leap-second.js: -+ default: 'RangeError: Cannot round a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot round a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/round/timezone-wrong-type.js: -+ default: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' -+ strict mode: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' - test/built-ins/Temporal/Duration/prototype/round/year-zero.js: - default: 'Test262Error: reject minus zero as extended year Expected a RangeError but got a Error' - strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError but got a Error' --test/built-ins/Temporal/Duration/prototype/subtract/argument-string-fractional-units-rounding-mode.js: -- default: 'Test262Error: positive fractional units rounded with correct rounding mode microseconds result Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: positive fractional units rounded with correct rounding mode microseconds result Expected SameValue(«-0», «0») to be true' - test/built-ins/Temporal/Duration/prototype/subtract/calendar-dateadd-called-with-plaindate-instance.js: - default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/options-wrong-type.js: -+ default: 'Test262Error: TypeError on wrong options type object Expected a TypeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: TypeError on wrong options type object Expected a TypeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-leap-second.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-number.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-number.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-wrong-type.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" - test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-required.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-wrong-type.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' - test/built-ins/Temporal/Duration/prototype/subtract/relativeto-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" --test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-exact-number-of-digits.js: -- default: 'Test262Error: Expected SameValue(«P3Y», «P3YT0S») to be true' -- strict mode: 'Test262Error: Expected SameValue(«P3Y», «P3YT0S») to be true' -+test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-leap-second.js: -+ default: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot subtract a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/subtract/timezone-wrong-type.js: -+ default: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' -+ strict mode: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' -+test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-options-undefined.js: -+ default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(0n, timeZone, calendar)')" -+ strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(0n, timeZone, calendar)')" - test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-plaindate-instance.js: - default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' - test/built-ins/Temporal/Duration/prototype/total/calendar-possibly-required.js: - default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/total/relativeto-leap-second.js: -+ default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/total/relativeto-number.js: -+ default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-number.js: -+ default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-wrong-type.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" - test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError but got a RangeError' --test/built-ins/Temporal/Duration/prototype/total/relativeto-undefined-throw-on-calendar-units.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' -+test/built-ins/Temporal/Duration/prototype/total/relativeto-wrong-type.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.prototype')" - test/built-ins/Temporal/Duration/prototype/total/relativeto-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" --test/built-ins/Temporal/Duration/prototype/total/unit-disallowed-units-string.js: -- default: 'Test262Error: "era" should not be allowed as an argument to total Expected a RangeError but got a TypeError' -- strict mode: 'Test262Error: "era" should not be allowed as an argument to total Expected a RangeError but got a TypeError' -+test/built-ins/Temporal/Duration/prototype/total/timezone-string-leap-second.js: -+ default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+ strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+test/built-ins/Temporal/Duration/prototype/total/timezone-wrong-type.js: -+ default: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' -+ strict mode: 'Test262Error: symbol is not a valid object and does not convert to a string Expected a TypeError but got a RangeError' - test/built-ins/Temporal/Duration/prototype/total/unit-plurals-accepted-string.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' --test/built-ins/Temporal/Duration/prototype/total/unit-string-shorthand-string.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' --test/built-ins/Temporal/Instant/compare/year-zero.js: -- default: 'Test262Error: minus zero is invalid extended year (first argument) Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: minus zero is invalid extended year (first argument) Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Instant/from/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Instant/prototype/equals/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Instant/prototype/round/smallestunit-disallowed-units.js: -- default: 'Test262Error: "era" should not be allowed as an argument to round Expected a RangeError but got a TypeError' -- strict mode: 'Test262Error: "era" should not be allowed as an argument to round Expected a RangeError but got a TypeError' --test/built-ins/Temporal/Instant/prototype/round/smallestunit-plurals-accepted.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' --test/built-ins/Temporal/Instant/prototype/round/smallestunit-string-shorthand.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' --test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js: -- default: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' -+ default: 'TypeError: Right hand side of instanceof is not an object' -+ strict mode: 'TypeError: Right hand side of instanceof is not an object' -+test/built-ins/Temporal/Instant/prototype/round/rounding-direction.js: -+ default: 'Test262Error: Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc) Expected SameValue(«-65261246399000000000», «-65261246400000000000») to be true' -+ strict mode: 'Test262Error: Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc) Expected SameValue(«-65261246399000000000», «-65261246400000000000») to be true' - test/built-ins/Temporal/Instant/prototype/since/largestunit.js: - default: 'Test262Error: does not include higher units than necessary (largest unit unspecified) nanoseconds result Expected SameValue(«40», «101») to be true' - strict mode: 'Test262Error: does not include higher units than necessary (largest unit unspecified) nanoseconds result Expected SameValue(«40», «101») to be true' --test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js: -- default: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Instant/prototype/since/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' - test/built-ins/Temporal/Instant/prototype/toJSON/timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError to be thrown but no exception was thrown at all' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Instant/prototype/toJSON/year-format.js: -+ default: 'Test262Error: year 0 formatted as 4-digit Expected SameValue(«+000000-07-01T21:30:36Z», «0000-07-01T21:30:36Z») to be true' -+ strict mode: 'Test262Error: year 0 formatted as 4-digit Expected SameValue(«+000000-07-01T21:30:36Z», «0000-07-01T21:30:36Z») to be true' -+test/built-ins/Temporal/Instant/prototype/toString/rounding-direction.js: -+ default: 'Test262Error: Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc) Expected SameValue(«-000099-12-15T12:00:01Z», «-000099-12-15T12:00:00Z») to be true' -+ strict mode: 'Test262Error: Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc) Expected SameValue(«-000099-12-15T12:00:01Z», «-000099-12-15T12:00:00Z») to be true' - test/built-ins/Temporal/Instant/prototype/toString/timezone-getoffsetnanosecondsfor-not-callable.js: - default: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError to be thrown but no exception was thrown at all' - strict mode: 'Test262Error: Uncallable undefined getOffsetNanosecondsFor should throw TypeError Expected a TypeError to be thrown but no exception was thrown at all' - test/built-ins/Temporal/Instant/prototype/toString/timezone-offset.js: - default: 'Test262Error: offset of UTC is +00:00 Expected SameValue(«1970-01-01T00:00:00Z», «1970-01-01T00:00:00+00:00») to be true' - strict mode: 'Test262Error: offset of UTC is +00:00 Expected SameValue(«1970-01-01T00:00:00Z», «1970-01-01T00:00:00+00:00») to be true' -+test/built-ins/Temporal/Instant/prototype/toString/timezone-string-leap-second.js: -+ default: 'RangeError: argument needs to be UTC offset string, TimeZone identifier, or temporal Instant string' -+ strict mode: 'RangeError: argument needs to be UTC offset string, TimeZone identifier, or temporal Instant string' - test/built-ins/Temporal/Instant/prototype/toString/timezone-string-multiple-offsets.js: - default: 'RangeError: argument needs to be UTC offset string, TimeZone identifier, or temporal Instant string' - strict mode: 'RangeError: argument needs to be UTC offset string, TimeZone identifier, or temporal Instant string' --test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js: -- default: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js: -- default: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/Instant/prototype/until/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/Instant/prototype/toString/year-format.js: -+ default: 'Test262Error: year 0 formatted as 4-digit Expected SameValue(«+000000-07-01T21:30:36Z», «0000-07-01T21:30:36Z») to be true' -+ strict mode: 'Test262Error: year 0 formatted as 4-digit Expected SameValue(«+000000-07-01T21:30:36Z», «0000-07-01T21:30:36Z») to be true' - test/built-ins/Temporal/PlainTime/compare/argument-cast.js: - default: 'TypeError: "microsecond" field is missing' - strict mode: 'TypeError: "microsecond" field is missing' -@@ -972,12 +1080,18 @@ test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-requir - test/built-ins/Temporal/PlainTime/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" -+test/built-ins/Temporal/PlainTime/compare/leap-second.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js: - default: 'TypeError: "hour" field is missing' - strict mode: 'TypeError: "hour" field is missing' --test/built-ins/Temporal/PlainTime/compare/year-zero.js: -- default: 'Test262Error: Cannot use minus zero as extended year (first argument) Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: Cannot use minus zero as extended year (first argument) Expected a RangeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/PlainTime/from/argument-object-leap-second.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' -+test/built-ins/Temporal/PlainTime/from/argument-object.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/from/argument-plaindatetime.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar)')" -@@ -990,9 +1104,18 @@ test/built-ins/Temporal/PlainTime/from/argument-string-with-calendar.js: - test/built-ins/Temporal/PlainTime/from/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" -+test/built-ins/Temporal/PlainTime/from/leap-second.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/from/options-undefined.js: - default: 'TypeError: "microsecond" field is missing' - strict mode: 'TypeError: "microsecond" field is missing' -+test/built-ins/Temporal/PlainTime/from/overflow-constrain.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' -+test/built-ins/Temporal/PlainTime/from/overflow-reject.js: -+ default: 'Test262Error: Expected a RangeError but got a TypeError' -+ strict mode: 'Test262Error: Expected a RangeError but got a TypeError' - test/built-ins/Temporal/PlainTime/from/overflow-undefined.js: - default: 'TypeError: "microsecond" field is missing' - strict mode: 'TypeError: "microsecond" field is missing' -@@ -1002,63 +1125,72 @@ test/built-ins/Temporal/PlainTime/from/overflow-wrong-type.js: - test/built-ins/Temporal/PlainTime/from/plaintime-propertybag-no-time-units.js: - default: 'TypeError: "hour" field is missing' - strict mode: 'TypeError: "hour" field is missing' --test/built-ins/Temporal/PlainTime/from/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' - test/built-ins/Temporal/PlainTime/prototype/equals/argument-cast.js: - default: 'TypeError: "microsecond" field is missing' - strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js: - default: 'Test262Error: 2021-12 is ambiguous and requires T prefix Expected a RangeError to be thrown but no exception was thrown at all' - strict mode: 'Test262Error: 2021-12 is ambiguous and requires T prefix Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js: -- default: 'TypeError: "hour" field is missing' -- strict mode: 'TypeError: "hour" field is missing' - test/built-ins/Temporal/PlainTime/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" -+test/built-ins/Temporal/PlainTime/prototype/equals/leap-second.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js: - default: 'TypeError: "hour" field is missing' - strict mode: 'TypeError: "hour" field is missing' --test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-disallowed-units.js: -- default: 'Test262Error: "era" should not be allowed as an argument to round Expected a RangeError but got a TypeError' -- strict mode: 'Test262Error: "era" should not be allowed as an argument to round Expected a RangeError but got a TypeError' --test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-string-shorthand.js: -- default: 'TypeError: options argument is not an object or undefined' -- strict mode: 'TypeError: options argument is not an object or undefined' -+test/built-ins/Temporal/PlainTime/prototype/since/argument-cast.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js: - default: 'Test262Error: 2021-12 is ambiguous and requires T prefix Expected a RangeError to be thrown but no exception was thrown at all' - strict mode: 'Test262Error: 2021-12 is ambiguous and requires T prefix Expected a RangeError to be thrown but no exception was thrown at all' - test/built-ins/Temporal/PlainTime/prototype/since/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" -+test/built-ins/Temporal/PlainTime/prototype/since/leap-second.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js: - default: 'TypeError: "hour" field is missing' - strict mode: 'TypeError: "hour" field is missing' --test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -+test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-ceil.js: -+ default: 'Test262Error: hours hours result Expected SameValue(«4», «5») to be true' -+ strict mode: 'Test262Error: hours hours result Expected SameValue(«4», «5») to be true' -+test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-floor.js: -+ default: 'Test262Error: hours hours result Expected SameValue(«5», «4») to be true' -+ strict mode: 'Test262Error: hours hours result Expected SameValue(«5», «4») to be true' -+test/built-ins/Temporal/PlainTime/prototype/until/argument-cast.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js: - default: 'Test262Error: 2021-12 is ambiguous and requires T prefix Expected a RangeError to be thrown but no exception was thrown at all' - strict mode: 'Test262Error: 2021-12 is ambiguous and requires T prefix Expected a RangeError to be thrown but no exception was thrown at all' --test/built-ins/Temporal/PlainTime/prototype/until/argument-string-with-time-designator.js: -- default: 'Test262Error: T prefix is accepted: T00:30 hours result Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: T prefix is accepted: T00:30 hours result Expected SameValue(«-0», «0») to be true' - test/built-ins/Temporal/PlainTime/prototype/until/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone)')" -+test/built-ins/Temporal/PlainTime/prototype/until/leap-second.js: -+ default: 'TypeError: "microsecond" field is missing' -+ strict mode: 'TypeError: "microsecond" field is missing' - test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js: - default: 'TypeError: "hour" field is missing' - strict mode: 'TypeError: "hour" field is missing' --test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js: -- default: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: reject minus zero as extended year Expected a RangeError to be thrown but no exception was thrown at all' - test/built-ins/Temporal/getOwnPropertyNames.js: - default: 'Test262Error: PlainDateTime' - strict mode: 'Test262Error: PlainDateTime' -+test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js: -+ default: 'TypeError: Underlying ArrayBuffer has been detached from the view (Testing with Float64Array.)' -+ strict mode: 'TypeError: Underlying ArrayBuffer has been detached from the view (Testing with Float64Array.)' -+test/built-ins/TypedArray/prototype/sort/sort-tonumber.js: -+ default: 'TypeError: Underlying ArrayBuffer has been detached from the view (Testing with Float64Array.)' -+ strict mode: 'TypeError: Underlying ArrayBuffer has been detached from the view (Testing with Float64Array.)' -+test/built-ins/TypedArrayConstructors/ctors/no-species.js: -+ default: 'Test262Error: unreachable' -+ strict mode: 'Test262Error: unreachable' -+test/harness/temporalHelpers-one-shift-time-zone.js: -+ default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2021, 3, 28, 1)')" -+ strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2021, 3, 28, 1)')" - test/intl402/DateTimeFormat/prototype/format/temporal-objects-timezone-getoffsetnanosecondsfor-not-callable.js: - default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2021, 8, 4, 0, 30, 45, 123, 456, 789)')" - strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2021, 8, 4, 0, 30, 45, 123, 456, 789)')" -@@ -1080,12 +1212,18 @@ test/intl402/DateTimeFormat/prototype/formatToParts/temporal-objects-timezone-ge - test/intl402/DateTimeFormat/prototype/resolvedOptions/hourCycle-default.js: - default: 'Test262Error: Expected SameValue(«h24», «h23») to be true' - strict mode: 'Test262Error: Expected SameValue(«h24», «h23») to be true' -+test/intl402/Intl/DateTimeFormat/prototype/formatRange/fails-on-distinct-temporal-types.js: -+ default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321)')" -+ strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321)')" -+test/intl402/Intl/DateTimeFormat/prototype/formatRangeToParts/fails-on-distinct-temporal-types.js: -+ default: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321)')" -+ strict mode: "TypeError: undefined is not a constructor (evaluating 'new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321)')" - test/intl402/Intl/getCanonicalLocales/non-iana-canon.js: - default: 'Test262Error: The value of Intl.getCanonicalLocales(tag)[0] equals the value of `canonical` Expected SameValue(«en-US-u-va-posix», «posix») to be true' - strict mode: 'Test262Error: The value of Intl.getCanonicalLocales(tag)[0] equals the value of `canonical` Expected SameValue(«en-US-u-va-posix», «posix») to be true' - test/intl402/Intl/getCanonicalLocales/preferred-grandfathered.js: -- default: 'Test262Error: Expected SameValue(«xtg-x-cel-gaulish», «xtg») to be true' -- strict mode: 'Test262Error: Expected SameValue(«xtg-x-cel-gaulish», «xtg») to be true' -+ default: 'Test262Error: Expected SameValue(«cel-gaulish», «xtg») to be true' -+ strict mode: 'Test262Error: Expected SameValue(«cel-gaulish», «xtg») to be true' - test/intl402/Intl/getCanonicalLocales/transformed-ext-canonical.js: - default: 'Test262Error: Expected SameValue(«sl-t-sl-rozaj-biske-1994», «sl-t-sl-1994-biske-rozaj») to be true' - strict mode: 'Test262Error: Expected SameValue(«sl-t-sl-rozaj-biske-1994», «sl-t-sl-1994-biske-rozaj») to be true' -@@ -1096,95 +1234,26 @@ test/intl402/Intl/getCanonicalLocales/unicode-ext-canonicalize-subdivision.js: - default: 'Test262Error: Expected SameValue(«und-NO-u-sd-no23», «und-NO-u-sd-no50») to be true' - strict mode: 'Test262Error: Expected SameValue(«und-NO-u-sd-no23», «und-NO-u-sd-no50») to be true' - test/intl402/Locale/extensions-grandfathered.js: -- default: 'Test262Error: Expected SameValue(«fr-Cyrl-FR-u-nu-latn-x-cel-gaulish», «fr-Cyrl-FR-u-nu-latn») to be true' -- strict mode: 'Test262Error: Expected SameValue(«fr-Cyrl-FR-u-nu-latn-x-cel-gaulish», «fr-Cyrl-FR-u-nu-latn») to be true' -+ default: 'Test262Error: Expected SameValue(«fr-Cyrl-FR-gaulish-u-nu-latn», «fr-Cyrl-FR-u-nu-latn») to be true' -+ strict mode: 'Test262Error: Expected SameValue(«fr-Cyrl-FR-gaulish-u-nu-latn», «fr-Cyrl-FR-u-nu-latn») to be true' -+test/intl402/Locale/getters-grandfathered.js: -+ default: 'Test262Error: Expected SameValue(«cel-gaulish», «xtg») to be true' -+ strict mode: 'Test262Error: Expected SameValue(«cel-gaulish», «xtg») to be true' - test/intl402/Locale/likely-subtags-grandfathered.js: -- default: 'Test262Error: Expected SameValue(«xtg-x-cel-gaulish», «xtg») to be true' -- strict mode: 'Test262Error: Expected SameValue(«xtg-x-cel-gaulish», «xtg») to be true' -+ default: 'Test262Error: Expected SameValue(«cel-gaulish», «xtg») to be true' -+ strict mode: 'Test262Error: Expected SameValue(«cel-gaulish», «xtg») to be true' - test/intl402/Locale/prototype/minimize/removing-likely-subtags-first-adds-likely-subtags.js: - default: 'Test262Error: "und".minimize() should be "en" Expected SameValue(«en-u-va-posix», «en») to be true' - strict mode: 'Test262Error: "und".minimize() should be "en" Expected SameValue(«en-u-va-posix», «en») to be true' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js: -- default: 'Test262Error: Formatted value for 1.100, en-US-u-nu-arab and options {"roundingIncrement":10,"maximumFractionDigits":2} is ١٫١٠; expected ١٫١.' -- strict mode: 'Test262Error: Formatted value for 1.100, en-US-u-nu-arab and options {"roundingIncrement":10,"maximumFractionDigits":2} is ١٫١٠; expected ١٫١.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js: -- default: 'Test262Error: Formatted value for 1.100, en-US-u-nu-arab and options {"roundingIncrement":100,"maximumFractionDigits":3} is ١٫١٠٠; expected ١٫١.' -- strict mode: 'Test262Error: Formatted value for 1.100, en-US-u-nu-arab and options {"roundingIncrement":100,"maximumFractionDigits":3} is ١٫١٠٠; expected ١٫١.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js: -- default: 'Test262Error: Formatted value for 1.100, en-US-u-nu-arab and options {"roundingIncrement":1000,"maximumFractionDigits":4} is ١٫١٠٠٠; expected ١٫١.' -- strict mode: 'Test262Error: Formatted value for 1.100, en-US-u-nu-arab and options {"roundingIncrement":1000,"maximumFractionDigits":4} is ١٫١٠٠٠; expected ١٫١.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js: -- default: 'Test262Error: Formatted value for 1.20, en-US-u-nu-arab and options {"roundingIncrement":20,"maximumFractionDigits":2} is ١٫٢٠; expected ١٫٢.' -- strict mode: 'Test262Error: Formatted value for 1.20, en-US-u-nu-arab and options {"roundingIncrement":20,"maximumFractionDigits":2} is ١٫٢٠; expected ١٫٢.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js: -- default: 'Test262Error: Formatted value for 1.20, en-US-u-nu-arab and options {"roundingIncrement":200,"maximumFractionDigits":3} is ١٫٢٠٠; expected ١٫٢.' -- strict mode: 'Test262Error: Formatted value for 1.20, en-US-u-nu-arab and options {"roundingIncrement":200,"maximumFractionDigits":3} is ١٫٢٠٠; expected ١٫٢.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js: -- default: 'Test262Error: Formatted value for 1.20, en-US-u-nu-arab and options {"roundingIncrement":2000,"maximumFractionDigits":4} is ١٫٢٠٠٠; expected ١٫٢.' -- strict mode: 'Test262Error: Formatted value for 1.20, en-US-u-nu-arab and options {"roundingIncrement":2000,"maximumFractionDigits":4} is ١٫٢٠٠٠; expected ١٫٢.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js: -- default: 'Test262Error: Formatted value for 1.3750, en-US-u-nu-arab and options {"roundingIncrement":25,"maximumFractionDigits":2,"minimumFractionDigits":1} is ١٫٥٠; expected ١٫٥.' -- strict mode: 'Test262Error: Formatted value for 1.3750, en-US-u-nu-arab and options {"roundingIncrement":25,"maximumFractionDigits":2,"minimumFractionDigits":1} is ١٫٥٠; expected ١٫٥.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js: -- default: 'Test262Error: Formatted value for 1.2500, en-US-u-nu-arab and options {"roundingIncrement":250,"maximumFractionDigits":3,"minimumFractionDigits":1} is ١٫٢٥٠; expected ١٫٢٥.' -- strict mode: 'Test262Error: Formatted value for 1.2500, en-US-u-nu-arab and options {"roundingIncrement":250,"maximumFractionDigits":3,"minimumFractionDigits":1} is ١٫٢٥٠; expected ١٫٢٥.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js: -- default: 'Test262Error: Formatted value for 1.2500, en-US-u-nu-arab and options {"roundingIncrement":2500,"maximumFractionDigits":4,"minimumFractionDigits":1} is ١٫٢٥٠٠; expected ١٫٢٥.' -- strict mode: 'Test262Error: Formatted value for 1.2500, en-US-u-nu-arab and options {"roundingIncrement":2500,"maximumFractionDigits":4,"minimumFractionDigits":1} is ١٫٢٥٠٠; expected ١٫٢٥.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js: -- default: 'Test262Error: Formatted value for 1.0750, en-US-u-nu-arab and options {"roundingIncrement":5,"maximumFractionDigits":2} is ١٫١٠; expected ١٫١.' -- strict mode: 'Test262Error: Formatted value for 1.0750, en-US-u-nu-arab and options {"roundingIncrement":5,"maximumFractionDigits":2} is ١٫١٠; expected ١٫١.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js: -- default: 'Test262Error: Formatted value for 1.500, en-US-u-nu-arab and options {"roundingIncrement":50,"maximumFractionDigits":2,"minimumFractionDigits":1} is ١٫٥٠; expected ١٫٥.' -- strict mode: 'Test262Error: Formatted value for 1.500, en-US-u-nu-arab and options {"roundingIncrement":50,"maximumFractionDigits":2,"minimumFractionDigits":1} is ١٫٥٠; expected ١٫٥.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js: -- default: 'Test262Error: Formatted value for 1.500, en-US-u-nu-arab and options {"roundingIncrement":500,"maximumFractionDigits":3,"minimumFractionDigits":1} is ١٫٥٠٠; expected ١٫٥.' -- strict mode: 'Test262Error: Formatted value for 1.500, en-US-u-nu-arab and options {"roundingIncrement":500,"maximumFractionDigits":3,"minimumFractionDigits":1} is ١٫٥٠٠; expected ١٫٥.' --test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js: -- default: 'Test262Error: Formatted value for 1.500, en-US-u-nu-arab and options {"roundingIncrement":5000,"maximumFractionDigits":4,"minimumFractionDigits":1} is ١٫٥٠٠٠; expected ١٫٥.' -- strict mode: 'Test262Error: Formatted value for 1.500, en-US-u-nu-arab and options {"roundingIncrement":5000,"maximumFractionDigits":4,"minimumFractionDigits":1} is ١٫٥٠٠٠; expected ١٫٥.' --test/intl402/NumberFormat/prototype/format/format-rounding-mode-half-ceil.js: -- default: 'Test262Error: Formatted value for -1.15, en-US-u-nu-arab and options {"useGrouping":false,"roundingMode":"halfCeil","maximumSignificantDigits":2} is ؜-١٫٢; expected ؜-١٫١.' -- strict mode: 'Test262Error: Formatted value for -1.15, en-US-u-nu-arab and options {"useGrouping":false,"roundingMode":"halfCeil","maximumSignificantDigits":2} is ؜-١٫٢; expected ؜-١٫١.' --test/intl402/NumberFormat/prototype/format/format-rounding-mode-half-floor.js: -- default: 'Test262Error: Formatted value for 1.15, en-US-u-nu-arab and options {"useGrouping":false,"roundingMode":"halfFloor","maximumSignificantDigits":2} is ١٫٢; expected ١٫١.' -- strict mode: 'Test262Error: Formatted value for 1.15, en-US-u-nu-arab and options {"useGrouping":false,"roundingMode":"halfFloor","maximumSignificantDigits":2} is ١٫٢; expected ١٫١.' -+test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js: -+ default: 'Test262Error: "maximumFractionDigits" is not equal to "minimumFractionDigits" Expected a RangeError to be thrown but no exception was thrown at all' -+ strict mode: 'Test262Error: "maximumFractionDigits" is not equal to "minimumFractionDigits" Expected a RangeError to be thrown but no exception was thrown at all' - test/intl402/NumberFormat/prototype/format/format-rounding-priority-less-precision.js: -- default: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"lessPrecision","minimumSignificantDigits":2,"minimumFractionDigits":2} is ١; expected ١٫٠٠.' -- strict mode: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"lessPrecision","minimumSignificantDigits":2,"minimumFractionDigits":2} is ١; expected ١٫٠٠.' -+ default: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"lessPrecision","minimumSignificantDigits":3,"minimumFractionDigits":1} is ١٫٠٠; expected ١٫٠.' -+ strict mode: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"lessPrecision","minimumSignificantDigits":3,"minimumFractionDigits":1} is ١٫٠٠; expected ١٫٠.' - test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js: -- default: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"morePrecision","minimumSignificantDigits":2,"minimumFractionDigits":2} is ١; expected ١٫٠٠.' -- strict mode: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"morePrecision","minimumSignificantDigits":2,"minimumFractionDigits":2} is ١; expected ١٫٠٠.' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-currency-de-DE.js: -- default: 'Test262Error: Expected SameValue(«-0,00 $», «0,00 $») to be true' -- strict mode: 'Test262Error: Expected SameValue(«-0,00 $», «0,00 $») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-currency-en-US.js: -- default: 'Test262Error: Expected SameValue(«-$987.00», «($987.00)») to be true' -- strict mode: 'Test262Error: Expected SameValue(«-$987.00», «($987.00)») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-currency-ja-JP.js: -- default: 'Test262Error: Expected SameValue(«-$987.00», «($987.00)») to be true' -- strict mode: 'Test262Error: Expected SameValue(«-$987.00», «($987.00)») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-currency-ko-KR.js: -- default: 'Test262Error: Expected SameValue(«-US$987.00», «(US$987.00)») to be true' -- strict mode: 'Test262Error: Expected SameValue(«-US$987.00», «(US$987.00)») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-currency-zh-TW.js: -- default: 'Test262Error: Expected SameValue(«-US$987.00», «(US$987.00)») to be true' -- strict mode: 'Test262Error: Expected SameValue(«-US$987.00», «(US$987.00)») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-de-DE.js: -- default: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-en-US.js: -- default: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-ja-JP.js: -- default: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-ko-KR.js: -- default: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' --test/intl402/NumberFormat/prototype/format/signDisplay-negative-zh-TW.js: -- default: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' -- strict mode: 'Test262Error: -0.0001 Expected SameValue(«-0», «0») to be true' -+ default: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"morePrecision","minimumSignificantDigits":2,"minimumFractionDigits":2} is ١٫٠٠; expected ١٫٠.' -+ strict mode: 'Test262Error: Formatted value for 1, en-US-u-nu-arab and options {"useGrouping":false,"roundingPriority":"morePrecision","minimumSignificantDigits":2,"minimumFractionDigits":2} is ١٫٠٠; expected ١٫٠.' - test/intl402/NumberFormat/prototype/format/useGrouping-extended-en-IN.js: - default: 'Test262Error: notation: "compact" Expected SameValue(«1K», «1T») to be true' - strict mode: 'Test262Error: notation: "compact" Expected SameValue(«1K», «1T») to be true' -@@ -1242,36 +1311,6 @@ test/intl402/NumberFormat/prototype/formatRangeToParts/prop-desc.js: - test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js: - default: 'Test262Error: Expected a RangeError but got a TypeError' - strict mode: 'Test262Error: Expected a RangeError but got a TypeError' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-de-DE.js: -- default: 'Test262Error: negativeNearZero: length Expected SameValue(«6», «5») to be true' -- strict mode: 'Test262Error: negativeNearZero: length Expected SameValue(«6», «5») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-en-US.js: -- default: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' -- strict mode: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ja-JP.js: -- default: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' -- strict mode: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ko-KR.js: -- default: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' -- strict mode: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-zh-TW.js: -- default: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' -- strict mode: 'Test262Error: negative: length Expected SameValue(«5», «6») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-de-DE.js: -- default: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' -- strict mode: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-en-US.js: -- default: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' -- strict mode: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ja-JP.js: -- default: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' -- strict mode: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ko-KR.js: -- default: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' -- strict mode: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' --test/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-zh-TW.js: -- default: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' -- strict mode: 'Test262Error: -0.0001 (negative): length Expected SameValue(«2», «1») to be true' - test/intl402/PluralRules/prototype/selectRange/default-en-us.js: - default: "TypeError: pr.selectRange is not a function. (In 'pr.selectRange(102, 201)', 'pr.selectRange' is undefined)" - strict mode: "TypeError: pr.selectRange is not a function. (In 'pr.selectRange(102, 201)', 'pr.selectRange' is undefined)" -@@ -1293,6 +1332,9 @@ test/intl402/PluralRules/prototype/selectRange/prop-desc.js: - test/intl402/PluralRules/prototype/selectRange/x-greater-than-y-throws.js: - default: 'Test262Error: Expected a RangeError but got a TypeError' - strict mode: 'Test262Error: Expected a RangeError but got a TypeError' -+test/intl402/Temporal/Duration/compare/relativeto-hour.js: -+ default: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.from')" -+ strict mode: "TypeError: undefined is not an object (evaluating 'Temporal.ZonedDateTime.from')" - test/intl402/Temporal/Duration/prototype/add/relativeto-string-datetime.js: - default: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot add a duration of years, months, or weeks without a relativeTo option' -@@ -1305,6 +1347,9 @@ test/intl402/Temporal/Duration/prototype/subtract/relativeto-string-datetime.js: - test/intl402/Temporal/Duration/prototype/total/relativeto-string-datetime.js: - default: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' - strict mode: 'RangeError: Cannot total a duration of years, months, or weeks without a relativeTo option' -+test/intl402/Temporal/Instant/prototype/toString/timezone-offset.js: -+ default: 'Test262Error: positive offset Expected SameValue(«1970-01-01T00:00:00Z», «1970-01-01T01:00:00+01:00») to be true' -+ strict mode: 'Test262Error: positive offset Expected SameValue(«1970-01-01T00:00:00Z», «1970-01-01T01:00:00+01:00») to be true' - test/intl402/Temporal/Instant/prototype/toString/timezone-string-datetime.js: - default: 'RangeError: argument needs to be UTC offset string, TimeZone identifier, or temporal Instant string' - strict mode: 'RangeError: argument needs to be UTC offset string, TimeZone identifier, or temporal Instant string' -@@ -1948,18 +1993,6 @@ test/language/expressions/compound-assignment/S11.13.2_A7.8_T4.js: - test/language/expressions/compound-assignment/S11.13.2_A7.9_T4.js: - default: 'Test262Error: Expected true but got false' - strict mode: 'Test262Error: Expected true but got false' --test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js: -- default: 'Test262Error: PutValue throws when storing the result in a method private reference Expected a TypeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: PutValue throws when storing the result in a method private reference Expected a TypeError to be thrown but no exception was thrown at all' --test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js: -- default: 'Test262Error: PutValue throws when storing the result in a method private reference Expected a TypeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: PutValue throws when storing the result in a method private reference Expected a TypeError to be thrown but no exception was thrown at all' --test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js: -- default: 'Test262Error: PutValue throws when storing the result if no setter Expected a TypeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: PutValue throws when storing the result if no setter Expected a TypeError to be thrown but no exception was thrown at all' --test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js: -- default: 'Test262Error: PutValue throws when storing the result if no setter Expected a TypeError to be thrown but no exception was thrown at all' -- strict mode: 'Test262Error: PutValue throws when storing the result if no setter Expected a TypeError to be thrown but no exception was thrown at all' - test/language/expressions/dynamic-import/catch/nested-async-gen-await-eval-script-code-target.js: - module: 'Test262:AsyncTestFailure:Test262Error: [object Object]' - test/language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-script-code-target.js: -@@ -2047,30 +2080,6 @@ test/language/global-code/script-decl-var-err.js: - strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all' - test/language/identifier-resolution/assign-to-global-undefined.js: - strict mode: Expected uncaught exception with name 'ReferenceError' but none was thrown --test/language/identifiers/part-unicode-14.0.0-class-escaped.js: -- default: "SyntaxError: Invalid unicode escape in identifier: '#_\\u0898'" -- strict mode: "SyntaxError: Invalid unicode escape in identifier: '#_\\u0898'" --test/language/identifiers/part-unicode-14.0.0-class.js: -- default: "SyntaxError: Invalid character '\\u0898'" -- strict mode: "SyntaxError: Invalid character '\\u0898'" --test/language/identifiers/part-unicode-14.0.0-escaped.js: -- default: "SyntaxError: Invalid unicode escape in identifier: '_\\u0898'" -- strict mode: "SyntaxError: Invalid unicode escape in identifier: '_\\u0898'" --test/language/identifiers/part-unicode-14.0.0.js: -- default: "SyntaxError: Invalid character '\\u0898'" -- strict mode: "SyntaxError: Invalid character '\\u0898'" --test/language/identifiers/start-unicode-14.0.0-class-escaped.js: -- default: "SyntaxError: Invalid unicode escape in identifier: '#\\u0870'" -- strict mode: "SyntaxError: Invalid unicode escape in identifier: '#\\u0870'" --test/language/identifiers/start-unicode-14.0.0-class.js: -- default: "SyntaxError: Invalid character: '#'" -- strict mode: "SyntaxError: Invalid character: '#'" --test/language/identifiers/start-unicode-14.0.0-escaped.js: -- default: "SyntaxError: Invalid unicode escape in identifier: '\\u0870'" -- strict mode: "SyntaxError: Invalid unicode escape in identifier: '\\u0870'" --test/language/identifiers/start-unicode-14.0.0.js: -- default: "SyntaxError: Invalid character '\\u0870'" -- strict mode: "SyntaxError: Invalid character '\\u0870'" - test/language/literals/regexp/u-astral-char-class-invert.js: - default: 'Test262Error: Expected SameValue(«�», «null») to be true' - strict mode: 'Test262Error: Expected SameValue(«�», «null») to be true' -diff --git a/JSTests/test262/harness/propertyHelper.js b/JSTests/test262/harness/propertyHelper.js -index 0ee7e21a92825d1e00e9545702c7e6e7c64279cc..7068f2560ccb2229ce340a12f139c03750f32bca 100644 ---- a/JSTests/test262/harness/propertyHelper.js -+++ b/JSTests/test262/harness/propertyHelper.js -@@ -6,13 +6,13 @@ description: | - property descriptors. - defines: - - verifyProperty -- - verifyEqualTo -- - verifyWritable -- - verifyNotWritable -- - verifyEnumerable -- - verifyNotEnumerable -- - verifyConfigurable -- - verifyNotConfigurable -+ - verifyEqualTo # deprecated -+ - verifyWritable # deprecated -+ - verifyNotWritable # deprecated -+ - verifyEnumerable # deprecated -+ - verifyNotEnumerable # deprecated -+ - verifyConfigurable # deprecated -+ - verifyNotConfigurable # deprecated - ---*/ - - // @ts-check -@@ -173,6 +173,9 @@ function isWritable(obj, name, verifyProp, value) { - return writeSucceeded; - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyEqualTo(obj, name, value) { - if (!isSameValue(obj[name], value)) { - throw new Test262Error("Expected obj[" + String(name) + "] to equal " + value + -@@ -180,6 +183,9 @@ function verifyEqualTo(obj, name, value) { - } - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyWritable(obj, name, verifyProp, value) { - if (!verifyProp) { - assert(Object.getOwnPropertyDescriptor(obj, name).writable, -@@ -190,6 +196,9 @@ function verifyWritable(obj, name, verifyProp, value) { - } - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyNotWritable(obj, name, verifyProp, value) { - if (!verifyProp) { - assert(!Object.getOwnPropertyDescriptor(obj, name).writable, -@@ -200,6 +209,9 @@ function verifyNotWritable(obj, name, verifyProp, value) { - } - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyEnumerable(obj, name) { - assert(Object.getOwnPropertyDescriptor(obj, name).enumerable, - "Expected obj[" + String(name) + "] to have enumerable:true."); -@@ -208,6 +220,9 @@ function verifyEnumerable(obj, name) { - } - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyNotEnumerable(obj, name) { - assert(!Object.getOwnPropertyDescriptor(obj, name).enumerable, - "Expected obj[" + String(name) + "] to have enumerable:false."); -@@ -216,6 +231,9 @@ function verifyNotEnumerable(obj, name) { - } - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyConfigurable(obj, name) { - assert(Object.getOwnPropertyDescriptor(obj, name).configurable, - "Expected obj[" + String(name) + "] to have configurable:true."); -@@ -224,6 +242,9 @@ function verifyConfigurable(obj, name) { - } - } - -+/** -+ * Deprecated; please use `verifyProperty` in new tests. -+ */ - function verifyNotConfigurable(obj, name) { - assert(!Object.getOwnPropertyDescriptor(obj, name).configurable, - "Expected obj[" + String(name) + "] to have configurable:false."); -diff --git a/JSTests/test262/harness/regExpUtils.js b/JSTests/test262/harness/regExpUtils.js -index e57e196a0540ada331475e38567317c85c35faeb..9b4c58ae1d2a82548485143c74e0590df2f1ff40 100644 ---- a/JSTests/test262/harness/regExpUtils.js -+++ b/JSTests/test262/harness/regExpUtils.js -@@ -51,7 +51,7 @@ function printStringCodePoints(string) { - function testPropertyEscapes(regExp, string, expression) { - if (!regExp.test(string)) { - for (const symbol of string) { -- printCodePoint(symbol.codePointAt(0)); -+ const hex = printCodePoint(symbol.codePointAt(0)); - assert( - regExp.test(symbol), - `\`${ expression }\` should match U+${ hex } (\`${ symbol }\`)` -diff --git a/JSTests/test262/harness/temporalHelpers.js b/JSTests/test262/harness/temporalHelpers.js -index 3a2ed5e4d45618c94fccb1290fee801549e6dc69..963498b909a90f5e1ee58316311b1b4594367d14 100644 ---- a/JSTests/test262/harness/temporalHelpers.js -+++ b/JSTests/test262/harness/temporalHelpers.js -@@ -151,20 +151,21 @@ var TemporalHelpers = { - }, - - /* -- * assertPlainYearMonth(yearMonth, year, month, monthCode[, description[, era, eraYear]]): -+ * assertPlainYearMonth(yearMonth, year, month, monthCode[, description[, era, eraYear, referenceISODay]]): - * - * Shorthand for asserting that each field of a Temporal.PlainYearMonth is - * equal to an expected value. (Except the `calendar` property, since callers - * may want to assert either object equality with an object they put in there, - * or the result of yearMonth.calendar.toString().) - */ -- assertPlainYearMonth(yearMonth, year, month, monthCode, description = "", era = undefined, eraYear = undefined) { -+ assertPlainYearMonth(yearMonth, year, month, monthCode, description = "", era = undefined, eraYear = undefined, referenceISODay = 1) { - assert(yearMonth instanceof Temporal.PlainYearMonth, `${description} instanceof`); - assert.sameValue(yearMonth.era, era, `${description} era result`); - assert.sameValue(yearMonth.eraYear, eraYear, `${description} eraYear result`); - assert.sameValue(yearMonth.year, year, `${description} year result`); - assert.sameValue(yearMonth.month, month, `${description} month result`); - assert.sameValue(yearMonth.monthCode, monthCode, `${description} monthCode result`); -+ assert.sameValue(yearMonth.getISOFields().isoDay, referenceISODay, `${description} referenceISODay result`); - }, - - /* -@@ -238,39 +239,6 @@ var TemporalHelpers = { - }); - }, - -- /* -- * checkFractionalSecondDigitsOptionWrongType(temporalObject): -- * -- * Checks the string-or-number type handling of the fractionalSecondDigits -- * option to the various types' toString() methods. temporalObject is an -- * instance of the Temporal type under test. -- */ -- checkFractionalSecondDigitsOptionWrongType(temporalObject) { -- // null is not a number, and converts to the string "null", which is an invalid string value -- assert.throws(RangeError, () => temporalObject.toString({ fractionalSecondDigits: null }), "null"); -- // Booleans are not numbers, and convert to the strings "true" or "false", which are invalid -- assert.throws(RangeError, () => temporalObject.toString({ fractionalSecondDigits: true }), "true"); -- assert.throws(RangeError, () => temporalObject.toString({ fractionalSecondDigits: false }), "false"); -- // Symbols are not numbers and cannot convert to strings -- assert.throws(TypeError, () => temporalObject.toString({ fractionalSecondDigits: Symbol() }), "symbol"); -- // BigInts are not numbers and convert to strings which are invalid -- assert.throws(RangeError, () => temporalObject.toString({ fractionalSecondDigits: 2n }), "bigint"); -- -- // Objects are not numbers and prefer their toString() methods when converting to a string -- assert.throws(RangeError, () => temporalObject.toString({ fractionalSecondDigits: {} }), "plain object"); -- -- const toStringExpected = temporalObject.toString({ fractionalSecondDigits: 'auto' }); -- const expected = [ -- "get fractionalSecondDigits.toString", -- "call fractionalSecondDigits.toString", -- ]; -- const actual = []; -- const observer = TemporalHelpers.toPrimitiveObserver(actual, "auto", "fractionalSecondDigits"); -- const result = temporalObject.toString({ fractionalSecondDigits: observer }); -- assert.sameValue(result, toStringExpected, "object with toString"); -- assert.compareArray(actual, expected, "order of operations"); -- }, -- - /* - * checkPlainDateTimeConversionFastPath(func): - * -@@ -1034,6 +1002,44 @@ var TemporalHelpers = { - return new CalendarFieldsIterable(); - }, - -+ /* -+ * A custom calendar that asserts its ...FromFields() methods are called with -+ * the options parameter having the value undefined. -+ */ -+ calendarFromFieldsUndefinedOptions() { -+ class CalendarFromFieldsUndefinedOptions extends Temporal.Calendar { -+ constructor() { -+ super("iso8601"); -+ this.dateFromFieldsCallCount = 0; -+ this.monthDayFromFieldsCallCount = 0; -+ this.yearMonthFromFieldsCallCount = 0; -+ } -+ -+ toString() { -+ return "from-fields-undef-options"; -+ } -+ -+ dateFromFields(fields, options) { -+ this.dateFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "dateFromFields shouldn't be called with options"); -+ return super.dateFromFields(fields, options); -+ } -+ -+ yearMonthFromFields(fields, options) { -+ this.yearMonthFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "yearMonthFromFields shouldn't be called with options"); -+ return super.yearMonthFromFields(fields, options); -+ } -+ -+ monthDayFromFields(fields, options) { -+ this.monthDayFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "monthDayFromFields shouldn't be called with options"); -+ return super.monthDayFromFields(fields, options); -+ } -+ } -+ return new CalendarFromFieldsUndefinedOptions(); -+ }, -+ - /* - * A custom calendar that modifies the fields object passed in to - * dateFromFields, sabotaging its time properties. -@@ -1312,10 +1318,10 @@ var TemporalHelpers = { - if (this._shiftNanoseconds > 0) { - if (this._isBeforeShift(instant)) return [instant]; - if (instant.epochNanoseconds < this._epoch2) return []; -- return [instant.add(this._shift)]; -+ return [instant.subtract(this._shift)]; - } - if (instant.epochNanoseconds < this._epoch2) return [instant]; -- const shifted = instant.add(this._shift); -+ const shifted = instant.subtract(this._shift); - if (this._isBeforeShift(instant)) return [instant, shifted]; - return [shifted]; - } -diff --git a/JSTests/test262/latest-changes-summary.txt b/JSTests/test262/latest-changes-summary.txt -index 98346984e6b64f9a10b257c0c31bf00bb411979d..2bd51c9d3d2db52ae818d2e70043f890b6a46367 100644 ---- a/JSTests/test262/latest-changes-summary.txt -+++ b/JSTests/test262/latest-changes-summary.txt -@@ -1,544 +1,1367 @@ -+M harness/propertyHelper.js -+M harness/regExpUtils.js - M harness/temporalHelpers.js -+A test/built-ins/Array/prototype/Symbol.unscopables/array-find-from-last.js -+A test/built-ins/Array/prototype/Symbol.unscopables/array-grouping.js - M test/built-ins/Array/prototype/Symbol.unscopables/value.js --A test/built-ins/Array/prototype/pop/set-length-array-is-frozen.js --A test/built-ins/Array/prototype/pop/set-length-array-length-is-non-writable.js --A test/built-ins/Array/prototype/pop/set-length-zero-array-is-frozen.js --A test/built-ins/Array/prototype/pop/set-length-zero-array-length-is-non-writable.js --A test/built-ins/Array/prototype/push/set-length-array-is-frozen.js --A test/built-ins/Array/prototype/push/set-length-array-length-is-non-writable.js --A test/built-ins/Array/prototype/push/set-length-zero-array-is-frozen.js --A test/built-ins/Array/prototype/push/set-length-zero-array-length-is-non-writable.js --A test/built-ins/Array/prototype/shift/set-length-array-is-frozen.js --A test/built-ins/Array/prototype/shift/set-length-array-length-is-non-writable.js --A test/built-ins/Array/prototype/shift/set-length-zero-array-is-frozen.js --A test/built-ins/Array/prototype/shift/set-length-zero-array-length-is-non-writable.js --A test/built-ins/Array/prototype/unshift/set-length-array-is-frozen.js --A test/built-ins/Array/prototype/unshift/set-length-array-length-is-non-writable.js --A test/built-ins/Array/prototype/unshift/set-length-zero-array-is-frozen.js --A test/built-ins/Array/prototype/unshift/set-length-zero-array-length-is-non-writable.js --A test/built-ins/ShadowRealm/WrappedFunction/length-throws-typeerror.js --A test/built-ins/ShadowRealm/WrappedFunction/length.js --A test/built-ins/ShadowRealm/WrappedFunction/name-throws-typeerror.js --A test/built-ins/ShadowRealm/WrappedFunction/name.js --A test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js --M test/built-ins/Temporal/Calendar/prototype/dateUntil/throws-range-error-ToLargestTemporalUnit.js --A test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/day/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/id/branding.js --A test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/month/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/toJSON/branding.js --A test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js --A test/built-ins/Temporal/Calendar/prototype/year/year-zero.js --A test/built-ins/Temporal/Duration/compare/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/Duration/compare/calendar-possibly-required.js --M test/built-ins/Temporal/Duration/compare/timezone-string-datetime.js --A test/built-ins/Temporal/Duration/compare/year-zero.js --A test/built-ins/Temporal/Duration/from/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/Duration/prototype/add/argument-string-fractional-units-rounding-mode.js --M test/built-ins/Temporal/Duration/prototype/add/relativeto-string-datetime.js --M test/built-ins/Temporal/Duration/prototype/add/relativeto-string-zoneddatetime-wrong-offset.js --M test/built-ins/Temporal/Duration/prototype/add/timezone-string-datetime.js --A test/built-ins/Temporal/Duration/prototype/add/year-zero.js --A test/built-ins/Temporal/Duration/prototype/round/calendar-possibly-required.js --M test/built-ins/Temporal/Duration/prototype/round/relativeto-string-datetime.js --M test/built-ins/Temporal/Duration/prototype/round/relativeto-string-zoneddatetime-wrong-offset.js --M test/built-ins/Temporal/Duration/prototype/round/timezone-string-datetime.js --A test/built-ins/Temporal/Duration/prototype/round/year-zero.js --A test/built-ins/Temporal/Duration/prototype/subtract/argument-string-fractional-units-rounding-mode.js --M test/built-ins/Temporal/Duration/prototype/subtract/relativeto-string-datetime.js --M test/built-ins/Temporal/Duration/prototype/subtract/relativeto-string-zoneddatetime-wrong-offset.js --M test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-datetime.js --A test/built-ins/Temporal/Duration/prototype/subtract/year-zero.js --A test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-exact-number-of-digits.js --A test/built-ins/Temporal/Duration/prototype/total/calendar-possibly-required.js --M test/built-ins/Temporal/Duration/prototype/total/relativeto-string-datetime.js --M test/built-ins/Temporal/Duration/prototype/total/relativeto-string-zoneddatetime-wrong-offset.js --M test/built-ins/Temporal/Duration/prototype/total/timezone-string-datetime.js --A test/built-ins/Temporal/Duration/prototype/total/year-zero.js --A test/built-ins/Temporal/Duration/prototype/with/copy-properties-not-undefined.js --M test/built-ins/Temporal/Instant/compare/instant-string.js --A test/built-ins/Temporal/Instant/compare/year-zero.js --M test/built-ins/Temporal/Instant/from/instant-string.js --A test/built-ins/Temporal/Instant/from/year-zero.js --A test/built-ins/Temporal/Instant/prototype/add/argument-string-fractional-units-rounding-mode.js --M test/built-ins/Temporal/Instant/prototype/equals/instant-string.js --A test/built-ins/Temporal/Instant/prototype/equals/year-zero.js --M test/built-ins/Temporal/Instant/prototype/since/instant-string.js -+M test/built-ins/Array/prototype/concat/create-species-non-ctor.js -+M test/built-ins/Array/prototype/filter/create-species-non-ctor.js -+M test/built-ins/Array/prototype/map/create-species-non-ctor.js -+M test/built-ins/Array/prototype/slice/create-species-non-ctor.js -+M test/built-ins/Array/prototype/splice/create-species-non-ctor.js -+A test/built-ins/Date/parse/year-zero.js -+A test/built-ins/Date/year-zero.js -+M test/built-ins/Error/constructor.js -+M test/built-ins/Function/prototype/bind/instance-length-tointeger.js -+M test/built-ins/Number/S15.7.1.1_A1.js -+M test/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js -+M test/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js -+A test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js -+R081 test/built-ins/ShadowRealm/prototype/evaluate/globalthis-orginary-object.js test/built-ins/ShadowRealm/prototype/evaluate/globalthis-ordinary-object.js -+A test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js -+M test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js -+A test/built-ins/Temporal/Calendar/from/calendar-number.js -+A test/built-ins/Temporal/Calendar/from/calendar-string-leap-second.js -+A test/built-ins/Temporal/Calendar/from/calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-invalid.js -+M test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-with-utc-designator.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/dateAdd/options-wrong-type.js -+M test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js -+M test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js -+M test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/dateUntil/options-wrong-type.js -+M test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/day/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/day/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/day/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/day/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfWeek/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/dayOfYear/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/daysInMonth/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/daysInWeek/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/daysInYear/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-wrong-type.js -+M test/built-ins/Temporal/Calendar/prototype/inLeapYear/basic.js -+M test/built-ins/Temporal/Calendar/prototype/inLeapYear/branding.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/inLeapYear/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/mergeFields/basic.js -+A test/built-ins/Temporal/Calendar/prototype/mergeFields/iso8601-calendar-month-monthCode.js -+A test/built-ins/Temporal/Calendar/prototype/mergeFields/non-string-properties.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/month/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/month/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/month/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/month/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/monthCode/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/basic.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-missing-properties.js -+M test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-not-object.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/monthcode-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/options-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-constrain.js -+M test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-invalid-string.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-reject.js -+A test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/reference-year-1972.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-wrong-type.js -+M test/built-ins/Temporal/Calendar/prototype/monthsInYear/basic.js -+M test/built-ins/Temporal/Calendar/prototype/monthsInYear/branding.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/monthsInYear/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindate.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindatetime.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-wrong-type.js -+M test/built-ins/Temporal/Calendar/prototype/weekOfYear/branding.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/weekOfYear/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-number.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-string-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/year/argument-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/year/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/Calendar/prototype/year/leap-second.js -+M test/built-ins/Temporal/Calendar/prototype/year/year-zero.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/basic.js -+M test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/branding.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-missing-properties.js -+M test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-not-object.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/monthcode-invalid.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-not-object.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-wrong-type.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-constrain.js -+M test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-invalid-string.js -+A test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-reject.js -+A test/built-ins/Temporal/Duration/basic.js -+A test/built-ins/Temporal/Duration/call-builtin.js -+A test/built-ins/Temporal/Duration/compare/argument-cast.js -+A test/built-ins/Temporal/Duration/compare/basic.js -+A test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-options-undefined.js -+A test/built-ins/Temporal/Duration/compare/options-wrong-type.js -+A test/built-ins/Temporal/Duration/compare/relativeto-hour.js -+A test/built-ins/Temporal/Duration/compare/relativeto-month.js -+A test/built-ins/Temporal/Duration/compare/relativeto-propertybag-invalid.js -+A test/built-ins/Temporal/Duration/compare/relativeto-year.js -+A test/built-ins/Temporal/Duration/compare/timezone-string-leap-second.js -+A test/built-ins/Temporal/Duration/compare/timezone-string-year-zero.js -+A test/built-ins/Temporal/Duration/compare/timezone-wrong-type.js -+A test/built-ins/Temporal/Duration/compare/twenty-five-hour-day.js -+M test/built-ins/Temporal/Duration/days-undefined.js -+A test/built-ins/Temporal/Duration/from/argument-duration.js -+M test/built-ins/Temporal/Duration/from/argument-existing-object.js -+A test/built-ins/Temporal/Duration/from/argument-object-invalid.js -+A test/built-ins/Temporal/Duration/from/argument-string-invalid.js -+A test/built-ins/Temporal/Duration/from/argument-string.js -+M test/built-ins/Temporal/Duration/hours-undefined.js -+M test/built-ins/Temporal/Duration/microseconds-undefined.js -+M test/built-ins/Temporal/Duration/milliseconds-undefined.js -+M test/built-ins/Temporal/Duration/minutes-undefined.js -+A test/built-ins/Temporal/Duration/mixed.js -+M test/built-ins/Temporal/Duration/months-undefined.js -+M test/built-ins/Temporal/Duration/nanoseconds-undefined.js -+A test/built-ins/Temporal/Duration/prototype/abs/basic.js -+A test/built-ins/Temporal/Duration/prototype/abs/new-object.js -+A test/built-ins/Temporal/Duration/prototype/add/argument-object-invalid.js -+A test/built-ins/Temporal/Duration/prototype/add/argument-string.js -+A test/built-ins/Temporal/Duration/prototype/add/basic.js -+M test/built-ins/Temporal/Duration/prototype/add/options-undefined.js -+A test/built-ins/Temporal/Duration/prototype/add/options-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-number.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-number.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-required.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js -+A test/built-ins/Temporal/Duration/prototype/add/timezone-string-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/add/timezone-string-year-zero.js -+A test/built-ins/Temporal/Duration/prototype/add/timezone-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/blank/basic.js -+A test/built-ins/Temporal/Duration/prototype/negated/basic.js -+A test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-options-undefined.js -+A test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-default.js -+A test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/Duration/prototype/round/options-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/round/relativeto-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/round/relativeto-number.js -+A test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-number.js -+A test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type.js -+M test/built-ins/Temporal/Duration/prototype/round/roundingmode-invalid-string.js -+A test/built-ins/Temporal/Duration/prototype/round/roundto-invalid-string.js -+D test/built-ins/Temporal/Duration/prototype/round/smallestunit-disallowed-units-string.js -+M test/built-ins/Temporal/Duration/prototype/round/smallestunit-invalid-string.js -+A test/built-ins/Temporal/Duration/prototype/round/smallestunit.js -+A test/built-ins/Temporal/Duration/prototype/round/timezone-string-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/round/timezone-string-year-zero.js -+A test/built-ins/Temporal/Duration/prototype/round/timezone-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/subtract/argument-object-invalid.js -+A test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js -+A test/built-ins/Temporal/Duration/prototype/subtract/basic.js -+M test/built-ins/Temporal/Duration/prototype/subtract/options-undefined.js -+A test/built-ins/Temporal/Duration/prototype/subtract/options-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-number.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-number.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-required.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js -+A test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-year-zero.js -+A test/built-ins/Temporal/Duration/prototype/subtract/timezone-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/toJSON/basic.js -+A test/built-ins/Temporal/Duration/prototype/toJSON/options.js -+A test/built-ins/Temporal/Duration/prototype/toString/balance.js -+A test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-auto.js -+M test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-invalid-string.js -+A test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-number.js -+M test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-out-of-range.js -+M test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-undefined.js -+M test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-wrong-type.js -+M test/built-ins/Temporal/Duration/prototype/toString/negative-components.js -+A test/built-ins/Temporal/Duration/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/toString/roundingmode-ceil.js -+A test/built-ins/Temporal/Duration/prototype/toString/roundingmode-floor.js -+A test/built-ins/Temporal/Duration/prototype/toString/roundingmode-halfExpand.js -+M test/built-ins/Temporal/Duration/prototype/toString/roundingmode-invalid-string.js -+A test/built-ins/Temporal/Duration/prototype/toString/roundingmode-trunc.js -+A test/built-ins/Temporal/Duration/prototype/toString/smallestunit-fractionalseconddigits.js -+M test/built-ins/Temporal/Duration/prototype/toString/smallestunit-invalid-string.js -+M test/built-ins/Temporal/Duration/prototype/toString/smallestunit-valid-units.js -+A test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-options-undefined.js -+M test/built-ins/Temporal/Duration/prototype/total/options-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/total/relativeto-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/total/relativeto-number.js -+A test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-number.js -+A test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/total/relativeto-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/total/timezone-string-leap-second.js -+A test/built-ins/Temporal/Duration/prototype/total/timezone-string-year-zero.js -+A test/built-ins/Temporal/Duration/prototype/total/timezone-wrong-type.js -+A test/built-ins/Temporal/Duration/prototype/valueOf/basic.js -+A test/built-ins/Temporal/Duration/prototype/with/all-negative.js -+A test/built-ins/Temporal/Duration/prototype/with/all-positive.js -+A test/built-ins/Temporal/Duration/prototype/with/argument-invalid-prop.js -+A test/built-ins/Temporal/Duration/prototype/with/argument-mixed-sign.js -+A test/built-ins/Temporal/Duration/prototype/with/argument-object-wrong-shape.js -+A test/built-ins/Temporal/Duration/prototype/with/argument-sign-prop.js -+A test/built-ins/Temporal/Duration/prototype/with/argument-wrong-type.js -+M test/built-ins/Temporal/Duration/prototype/with/branding.js -+A test/built-ins/Temporal/Duration/prototype/with/partial-positive.js -+A test/built-ins/Temporal/Duration/prototype/with/sign-conflict-throws-rangeerror.js -+A test/built-ins/Temporal/Duration/prototype/with/sign-replace.js -+M test/built-ins/Temporal/Duration/seconds-undefined.js -+M test/built-ins/Temporal/Duration/weeks-undefined.js -+M test/built-ins/Temporal/Duration/years-undefined.js -+A test/built-ins/Temporal/Instant/compare/argument-object-tostring.js -+A test/built-ins/Temporal/Instant/compare/argument-wrong-type.js -+A test/built-ins/Temporal/Instant/compare/instant-string-sub-minute-offset.js -+A test/built-ins/Temporal/Instant/compare/leap-second.js -+M test/built-ins/Temporal/Instant/compare/year-zero.js -+A test/built-ins/Temporal/Instant/from/argument-instant.js -+A test/built-ins/Temporal/Instant/from/argument-object-tostring.js -+A test/built-ins/Temporal/Instant/from/argument-wrong-type.js -+A test/built-ins/Temporal/Instant/from/basic.js -+A test/built-ins/Temporal/Instant/from/instant-string-sub-minute-offset.js -+A test/built-ins/Temporal/Instant/from/leap-second.js -+M test/built-ins/Temporal/Instant/from/year-zero.js -+A test/built-ins/Temporal/Instant/prototype/add/basic.js -+M test/built-ins/Temporal/Instant/prototype/add/branding.js -+A test/built-ins/Temporal/Instant/prototype/add/disallowed-duration-units.js -+M test/built-ins/Temporal/Instant/prototype/add/result-out-of-range.js -+A test/built-ins/Temporal/Instant/prototype/equals/argument-object-tostring.js -+M test/built-ins/Temporal/Instant/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/equals/instant-string-sub-minute-offset.js -+A test/built-ins/Temporal/Instant/prototype/equals/leap-second.js -+M test/built-ins/Temporal/Instant/prototype/equals/year-zero.js -+M test/built-ins/Temporal/Instant/prototype/round/options-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/round/rounding-direction.js -+M test/built-ins/Temporal/Instant/prototype/round/roundingmode-invalid-string.js -+A test/built-ins/Temporal/Instant/prototype/round/roundto-invalid-string.js -+D test/built-ins/Temporal/Instant/prototype/round/smallestunit-disallowed-units.js -+M test/built-ins/Temporal/Instant/prototype/round/smallestunit-invalid-string.js -+A test/built-ins/Temporal/Instant/prototype/since/argument-object-tostring.js -+A test/built-ins/Temporal/Instant/prototype/since/argument-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/since/instant-string-sub-minute-offset.js - M test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js --A test/built-ins/Temporal/Instant/prototype/since/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/Instant/prototype/since/leap-second.js -+A test/built-ins/Temporal/Instant/prototype/since/options-wrong-type.js -+M test/built-ins/Temporal/Instant/prototype/since/roundingmode-invalid-string.js - M test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js --A test/built-ins/Temporal/Instant/prototype/since/year-zero.js --A test/built-ins/Temporal/Instant/prototype/subtract/argument-string-fractional-units-rounding-mode.js --M test/built-ins/Temporal/Instant/prototype/toString/timezone-string-datetime.js --M test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-datetime.js --M test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-datetime.js --M test/built-ins/Temporal/Instant/prototype/until/instant-string.js -+M test/built-ins/Temporal/Instant/prototype/since/year-zero.js -+A test/built-ins/Temporal/Instant/prototype/subtract/basic.js -+M test/built-ins/Temporal/Instant/prototype/subtract/branding.js -+A test/built-ins/Temporal/Instant/prototype/subtract/disallowed-duration-units.js -+M test/built-ins/Temporal/Instant/prototype/subtract/result-out-of-range.js -+A test/built-ins/Temporal/Instant/prototype/toJSON/year-format.js -+A test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-auto.js -+M test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-invalid-string.js -+M test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-non-integer.js -+A test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-number.js -+M test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-out-of-range.js -+M test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-undefined.js -+M test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/toString/rounding-cross-midnight.js -+A test/built-ins/Temporal/Instant/prototype/toString/rounding-direction.js -+A test/built-ins/Temporal/Instant/prototype/toString/roundingmode-ceil.js -+A test/built-ins/Temporal/Instant/prototype/toString/roundingmode-floor.js -+A test/built-ins/Temporal/Instant/prototype/toString/roundingmode-halfExpand.js -+M test/built-ins/Temporal/Instant/prototype/toString/roundingmode-invalid-string.js -+A test/built-ins/Temporal/Instant/prototype/toString/roundingmode-trunc.js -+A test/built-ins/Temporal/Instant/prototype/toString/smallestunit-fractionalseconddigits.js -+M test/built-ins/Temporal/Instant/prototype/toString/smallestunit-invalid-string.js -+M test/built-ins/Temporal/Instant/prototype/toString/smallestunit-valid-units.js -+A test/built-ins/Temporal/Instant/prototype/toString/timezone-string-leap-second.js -+A test/built-ins/Temporal/Instant/prototype/toString/timezone-string-year-zero.js -+A test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/toString/year-format.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-number.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-string-leap-second.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-year-zero.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-leap-second.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-year-zero.js -+A test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/until/argument-object-tostring.js -+A test/built-ins/Temporal/Instant/prototype/until/argument-wrong-type.js -+A test/built-ins/Temporal/Instant/prototype/until/instant-string-sub-minute-offset.js - M test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js --A test/built-ins/Temporal/Instant/prototype/until/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/Instant/prototype/until/leap-second.js -+A test/built-ins/Temporal/Instant/prototype/until/options-wrong-type.js -+M test/built-ins/Temporal/Instant/prototype/until/roundingmode-invalid-string.js - M test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js --A test/built-ins/Temporal/Instant/prototype/until/year-zero.js --A test/built-ins/Temporal/Now/builtin.js --M test/built-ins/Temporal/Now/instant/prop-desc.js --A test/built-ins/Temporal/Now/instant/return-value-instance.js --A test/built-ins/Temporal/Now/plainDate/calendar-undefined.js --A test/built-ins/Temporal/Now/plainDate/prop-desc.js --M test/built-ins/Temporal/Now/plainDate/timezone-string-datetime.js --A test/built-ins/Temporal/Now/plainDateISO/prop-desc.js --A test/built-ins/Temporal/Now/plainDateISO/return-value.js --M test/built-ins/Temporal/Now/plainDateISO/timezone-string-datetime.js --A test/built-ins/Temporal/Now/plainDateTime/calendar-undefined.js --M test/built-ins/Temporal/Now/plainDateTime/prop-desc.js --M test/built-ins/Temporal/Now/plainDateTime/timezone-string-datetime.js --M test/built-ins/Temporal/Now/plainDateTimeISO/prop-desc.js --A test/built-ins/Temporal/Now/plainDateTimeISO/return-value-calendar.js --M test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-datetime.js --A test/built-ins/Temporal/Now/plainTimeISO/prop-desc.js --A test/built-ins/Temporal/Now/plainTimeISO/return-value.js --M test/built-ins/Temporal/Now/plainTimeISO/timezone-string-datetime.js --A test/built-ins/Temporal/Now/prop-desc.js --M test/built-ins/Temporal/Now/timeZone/prop-desc.js --A test/built-ins/Temporal/Now/zonedDateTime/calendar-undefined.js --M test/built-ins/Temporal/Now/zonedDateTime/prop-desc.js --M test/built-ins/Temporal/Now/zonedDateTimeISO/prop-desc.js --A test/built-ins/Temporal/Now/zonedDateTimeISO/return-value.js --A test/built-ins/Temporal/PlainDate/compare/year-zero.js --A test/built-ins/Temporal/PlainDate/from/argument-number.js --R050 test/built-ins/Temporal/PlainDate/from/argument-object.js test/built-ins/Temporal/PlainDate/from/argument-object-invalid.js --A test/built-ins/Temporal/PlainDate/from/argument-object-valid.js --A test/built-ins/Temporal/PlainDate/from/argument-string-overflow.js --A test/built-ins/Temporal/PlainDate/from/argument-string-trailing-junk.js --M test/built-ins/Temporal/PlainDate/from/argument-string.js --M test/built-ins/Temporal/PlainDate/from/options-invalid.js --M test/built-ins/Temporal/PlainDate/from/overflow-undefined.js --A test/built-ins/Temporal/PlainDate/from/year-zero.js --A test/built-ins/Temporal/PlainDate/prototype/add/argument-invalid-duration.js --A test/built-ins/Temporal/PlainDate/prototype/add/argument-missing-properties.js --A test/built-ins/Temporal/PlainDate/prototype/add/argument-singular-units.js --A test/built-ins/Temporal/PlainDate/prototype/add/balance-smaller-units-basic.js --A test/built-ins/Temporal/PlainDate/prototype/add/basic.js --A test/built-ins/Temporal/PlainDate/prototype/add/overflow-constrain.js -+M test/built-ins/Temporal/Instant/prototype/until/year-zero.js -+A test/built-ins/Temporal/Now/plainDate/calendar-number.js -+A test/built-ins/Temporal/Now/plainDate/calendar-string-leap-second.js -+A test/built-ins/Temporal/Now/plainDate/calendar-wrong-type.js -+A test/built-ins/Temporal/Now/plainDate/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/plainDate/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js -+A test/built-ins/Temporal/Now/plainDateISO/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/plainDateISO/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js -+A test/built-ins/Temporal/Now/plainDateTime/calendar-number.js -+A test/built-ins/Temporal/Now/plainDateTime/calendar-string-leap-second.js -+A test/built-ins/Temporal/Now/plainDateTime/calendar-wrong-type.js -+A test/built-ins/Temporal/Now/plainDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/plainDateTime/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js -+A test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js -+A test/built-ins/Temporal/Now/plainTimeISO/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/plainTimeISO/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js -+A test/built-ins/Temporal/Now/zonedDateTime/calendar-number.js -+A test/built-ins/Temporal/Now/zonedDateTime/calendar-string-leap-second.js -+A test/built-ins/Temporal/Now/zonedDateTime/calendar-wrong-type.js -+A test/built-ins/Temporal/Now/zonedDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/zonedDateTime/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js -+A test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-leap-second.js -+A test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-year-zero.js -+A test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js -+A test/built-ins/Temporal/PlainDate/calendar-number.js -+A test/built-ins/Temporal/PlainDate/calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDate/compare/argument-number.js -+A test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDate/compare/argument-string-invalid.js -+A test/built-ins/Temporal/PlainDate/compare/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/compare/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDate/compare/leap-second.js -+M test/built-ins/Temporal/PlainDate/compare/year-zero.js -+M test/built-ins/Temporal/PlainDate/from/argument-number.js -+M test/built-ins/Temporal/PlainDate/from/argument-plaindate.js -+A test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-year-zero.js -+M test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js -+A test/built-ins/Temporal/PlainDate/from/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/from/leap-second.js -+A test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string-invalid.js -+R100 test/built-ins/Temporal/PlainDate/from/argument-string-overflow.js test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string.js -+A test/built-ins/Temporal/PlainDate/from/options-wrong-type.js -+M test/built-ins/Temporal/PlainDate/from/overflow-invalid-string.js -+M test/built-ins/Temporal/PlainDate/from/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/add/options-wrong-type.js - M test/built-ins/Temporal/PlainDate/prototype/add/overflow-invalid-string.js --A test/built-ins/Temporal/PlainDate/prototype/add/overflow-reject.js --M test/built-ins/Temporal/PlainDate/prototype/add/overflow-undefined.js --A test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js --A test/built-ins/Temporal/PlainDate/prototype/since/days-in-month.js --A test/built-ins/Temporal/PlainDate/prototype/since/days-in-year.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/argument-number.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-invalid.js -+M test/built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDate/prototype/equals/leap-second.js -+M test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-number.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-string-invalid.js -+A test/built-ins/Temporal/PlainDate/prototype/since/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/since/calendar-datefromfields-called-with-options-undefined.js -+M test/built-ins/Temporal/PlainDate/prototype/since/largestunit-default.js -+M test/built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units.js - M test/built-ins/Temporal/PlainDate/prototype/since/largestunit-invalid-string.js --M test/built-ins/Temporal/PlainDate/prototype/since/largestunit-smallestunit-mismatch.js --A test/built-ins/Temporal/PlainDate/prototype/since/largestunit-undefined.js --A test/built-ins/Temporal/PlainDate/prototype/since/rounding-relative.js --A test/built-ins/Temporal/PlainDate/prototype/since/roundingincrement.js --A test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-ceil.js --A test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-floor.js --A test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-halfExpand.js --A test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-trunc.js --A test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-higher-units.js -+A test/built-ins/Temporal/PlainDate/prototype/since/leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/since/options-wrong-type.js -+M test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-invalid-string.js - M test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-invalid-string.js --A test/built-ins/Temporal/PlainDate/prototype/since/weeks-months.js --A test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/argument-invalid-duration.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/argument-missing-properties.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/argument-singular-units.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/balance-smaller-units-basic.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/basic.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-constrain.js -+M test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/subtract/options-wrong-type.js - M test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-invalid-string.js --A test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-reject.js --M test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-undefined.js --A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-with-time-designator.js --A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js --A test/built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/limits.js --A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-with-time-designator.js --M test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/basic.js --M test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-datetime.js --A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/toJSON/year-format.js -+A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-number.js -+M test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/limits.js -+M test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/plaintime-propertybag-no-time-units.js -+M test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDate/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/toString/year-format.js -+A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-number.js -+M test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/leap-second.js -+M test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/plaintime-propertybag-no-time-units.js -+A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js -+M test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-number.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-string-invalid.js -+A test/built-ins/Temporal/PlainDate/prototype/until/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDate/prototype/until/calendar-datefromfields-called-with-options-undefined.js -+M test/built-ins/Temporal/PlainDate/prototype/until/largestunit-default.js -+M test/built-ins/Temporal/PlainDate/prototype/until/largestunit-higher-units.js - M test/built-ins/Temporal/PlainDate/prototype/until/largestunit-invalid-string.js --M test/built-ins/Temporal/PlainDate/prototype/until/largestunit-smallestunit-mismatch.js --A test/built-ins/Temporal/PlainDate/prototype/until/largestunit-undefined.js --A test/built-ins/Temporal/PlainDate/prototype/until/rounding-relative.js --A test/built-ins/Temporal/PlainDate/prototype/until/roundingincrement.js --A test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-ceil.js --A test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-floor.js --A test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-halfExpand.js --A test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-trunc.js --A test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-higher-units.js -+A test/built-ins/Temporal/PlainDate/prototype/until/leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/until/options-wrong-type.js -+M test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-invalid-string.js - M test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-invalid-string.js --A test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js --A test/built-ins/Temporal/PlainDate/prototype/with/copy-properties-not-undefined.js --A test/built-ins/Temporal/PlainDateTime/compare/year-zero.js --A test/built-ins/Temporal/PlainDateTime/from/year-zero.js --A test/built-ins/Temporal/PlainDateTime/prototype/add/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js -+M test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js -+A test/built-ins/Temporal/PlainDate/prototype/with/options-wrong-type.js -+M test/built-ins/Temporal/PlainDate/prototype/with/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-number.js -+A test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-string-leap-second.js -+A test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDateTime/compare/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/compare/basic.js -+A test/built-ins/Temporal/PlainDateTime/compare/calendar-ignored.js -+A test/built-ins/Temporal/PlainDateTime/compare/cast.js -+A test/built-ins/Temporal/PlainDateTime/compare/leap-second.js -+M test/built-ins/Temporal/PlainDateTime/compare/year-zero.js -+A test/built-ins/Temporal/PlainDateTime/constructor-full.js -+A test/built-ins/Temporal/PlainDateTime/datetime-math.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-object-month.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-object.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-plaindatetime.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-comma-decimal-separator.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-invalid.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-offset.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-optional-data.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-out-of-range.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-subsecond.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-time-separators.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string-timezone.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-string.js -+A test/built-ins/Temporal/PlainDateTime/from/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/from/leap-second.js -+A test/built-ins/Temporal/PlainDateTime/from/limits.js -+A test/built-ins/Temporal/PlainDateTime/from/options-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/from/overflow-default-constrain.js -+M test/built-ins/Temporal/PlainDateTime/from/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/from/overflow-reject.js -+M test/built-ins/Temporal/PlainDateTime/from/year-zero.js -+M test/built-ins/Temporal/PlainDateTime/hour-undefined.js -+A test/built-ins/Temporal/PlainDateTime/limits.js -+M test/built-ins/Temporal/PlainDateTime/microsecond-undefined.js -+M test/built-ins/Temporal/PlainDateTime/millisecond-undefined.js -+M test/built-ins/Temporal/PlainDateTime/minute-undefined.js -+M test/built-ins/Temporal/PlainDateTime/nanosecond-undefined.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/ambiguous-date.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/argument-duration.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/argument-plain-object-mixed-signs.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/hour-overflow.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/limits.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/negative-duration.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/options-empty.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/options-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/add/options-wrong-type.js -+M test/built-ins/Temporal/PlainDateTime/prototype/add/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/dayOfWeek/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/dayOfYear/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/daysInMonth/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/daysInWeek/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/daysInYear/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js -+M test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/calendar-checked.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/cast.js -+A test/built-ins/Temporal/PlainDateTime/prototype/equals/leap-second.js -+M test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/monthsInYear/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/balance.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/limits.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/options-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/rounding-direction.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js -+M test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/roundto-invalid-string.js -+D test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-disallowed-units.js -+M test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/throws-no-argument.js -+A test/built-ins/Temporal/PlainDateTime/prototype/round/throws-undefined.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/different-calendars-throws.js - M test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-invalid-string.js --A test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/no-unnecessary-units.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/options-empty.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/options-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/options-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/returns-days.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/round-relative-to-receiver.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-cleanly-divides.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-does-not-divide.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-ceil-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-floor-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-default-changes.js -+M test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-is-default.js - M test/built-ins/Temporal/PlainDateTime/prototype/since/smallestunit-invalid-string.js --A test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js --A test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-string-fractional-units-rounding-mode.js --M test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-datetime.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/subseconds.js -+A test/built-ins/Temporal/PlainDateTime/prototype/since/weeks-months-mutually-exclusive.js -+M test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/ambiguous-date.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-duration.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-plain-object-mixed-signs.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/hour-overflow.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/limits.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/negative-duration.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-empty.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-wrong-type.js -+M test/built-ins/Temporal/PlainDateTime/prototype/subtract/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toJSON/year-format.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toPlainTime/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-always.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-never.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-auto.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-non-integer.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-number.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-undefined.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-cross-midnight.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-direction.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-ceil.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-floor.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-halfExpand.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-trunc.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-fractionalseconddigits.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-invalid-string.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-valid-units.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toString/year-format.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/basic.js -+M test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguation-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/invalid-instant.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/multiple-instants.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/argument-wrong-type.js -+M test/built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration.js -+M test/built-ins/Temporal/PlainDateTime/prototype/until/balance.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/casts-argument.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/different-calendars-throws.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/inverse.js - M test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-invalid-string.js --A test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/no-unnecessary-units.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/options-empty.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/options-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/options-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/returns-days.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/round-relative-to-receiver.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-cleanly-divides.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-does-not-divide.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-ceil-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-floor-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-default-changes.js -+M test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-is-default.js - M test/built-ins/Temporal/PlainDateTime/prototype/until/smallestunit-invalid-string.js --A test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js --A test/built-ins/Temporal/PlainDateTime/prototype/with/copy-properties-not-undefined.js --A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js --A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-with-time-designator.js --A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js --A test/built-ins/Temporal/PlainMonthDay/from/year-zero.js --A test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js --A test/built-ins/Temporal/PlainMonthDay/prototype/with/copy-properties-not-undefined.js --A test/built-ins/Temporal/PlainTime/compare/argument-cast.js --A test/built-ins/Temporal/PlainTime/compare/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainTime/compare/argument-string-with-time-designator.js --A test/built-ins/Temporal/PlainTime/compare/basic.js --A test/built-ins/Temporal/PlainTime/compare/year-zero.js --A test/built-ins/Temporal/PlainTime/from/argument-plaindatetime.js --A test/built-ins/Temporal/PlainTime/from/argument-plaintime.js --A test/built-ins/Temporal/PlainTime/from/argument-string-invalid.js --A test/built-ins/Temporal/PlainTime/from/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainTime/from/argument-string-trailing-junk.js --A test/built-ins/Temporal/PlainTime/from/argument-string-with-time-designator.js --A test/built-ins/Temporal/PlainTime/from/argument-string.js --A test/built-ins/Temporal/PlainTime/from/options-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/subseconds.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/units-changed.js -+A test/built-ins/Temporal/PlainDateTime/prototype/until/weeks-months-mutually-exclusive.js -+M test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/valueOf/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/weekOfYear/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/argument-not-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-options.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-temporal-object-throws.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-throws.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/month-and-monthcode-must-agree.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/multiple-unrecognized-properties-ignored.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/options-empty.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/options-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/options-wrong-type.js -+M test/built-ins/Temporal/PlainDateTime/prototype/with/order-of-operations.js -+M test/built-ins/Temporal/PlainDateTime/prototype/with/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/string-throws.js -+A test/built-ins/Temporal/PlainDateTime/prototype/with/timezone-throws.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/argument-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/basic.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-string-leap-second.js -+M test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-temporal-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object-insufficient-data.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-invalid.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/non-compatible-calendars-throw.js -+M test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-number.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-object-insufficient-data.js -+M test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-without-time-designator.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-time.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-wrong-type.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/leap-second.js -+A test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/no-argument-default-to-midnight.js -+M test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -+M test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js -+M test/built-ins/Temporal/PlainDateTime/second-undefined.js -+A test/built-ins/Temporal/PlainMonthDay/calendar-always.js -+A test/built-ins/Temporal/PlainMonthDay/calendar-number.js -+A test/built-ins/Temporal/PlainMonthDay/calendar-wrong-type.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-number.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-plainmonthday.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainMonthDay/from/argument-wrong-type.js -+A test/built-ins/Temporal/PlainMonthDay/from/calendar-monthdayfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainMonthDay/from/leap-second.js -+A test/built-ins/Temporal/PlainMonthDay/from/options-wrong-type.js -+M test/built-ins/Temporal/PlainMonthDay/from/overflow-invalid-string.js -+M test/built-ins/Temporal/PlainMonthDay/from/year-zero.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-number.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-year-zero.js -+M test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/calendar-monthdayfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/equals/leap-second.js -+M test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/toJSON/year-format.js -+M test/built-ins/Temporal/PlainMonthDay/prototype/toString/calendarname-always.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/toString/year-format.js -+A test/built-ins/Temporal/PlainMonthDay/prototype/with/options-wrong-type.js -+M test/built-ins/Temporal/PlainMonthDay/prototype/with/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainTime/compare/argument-number.js -+M test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainTime/compare/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/compare/leap-second.js -+M test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js -+M test/built-ins/Temporal/PlainTime/compare/year-zero.js -+A test/built-ins/Temporal/PlainTime/from/argument-number.js -+A test/built-ins/Temporal/PlainTime/from/argument-object-leap-second.js -+A test/built-ins/Temporal/PlainTime/from/argument-object.js -+M test/built-ins/Temporal/PlainTime/from/argument-plaintime.js -+A test/built-ins/Temporal/PlainTime/from/argument-string-leap-second.js -+M test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainTime/from/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/from/leap-second.js -+R100 test/built-ins/Temporal/PlainTime/from/argument-string-invalid.js test/built-ins/Temporal/PlainTime/from/observable-get-overflow-argument-string-invalid.js -+A test/built-ins/Temporal/PlainTime/from/options-wrong-type.js -+A test/built-ins/Temporal/PlainTime/from/overflow-constrain.js - M test/built-ins/Temporal/PlainTime/from/overflow-invalid-string.js --M test/built-ins/Temporal/PlainTime/from/overflow-undefined.js --A test/built-ins/Temporal/PlainTime/from/year-zero.js --A test/built-ins/Temporal/PlainTime/prototype/add/argument-object-invalid.js --A test/built-ins/Temporal/PlainTime/prototype/add/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/PlainTime/prototype/add/options-ignored.js --A test/built-ins/Temporal/PlainTime/prototype/equals/argument-cast.js --A test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-with-time-designator.js --A test/built-ins/Temporal/PlainTime/prototype/equals/basic.js --A test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js -+A test/built-ins/Temporal/PlainTime/from/overflow-reject.js -+M test/built-ins/Temporal/PlainTime/from/year-zero.js -+A test/built-ins/Temporal/PlainTime/negative-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/add/argument-duration.js -+A test/built-ins/Temporal/PlainTime/prototype/add/argument-higher-units.js -+A test/built-ins/Temporal/PlainTime/prototype/add/argument-object.js -+A test/built-ins/Temporal/PlainTime/prototype/equals/argument-number.js -+M test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js -+M test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/equals/leap-second.js -+M test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js -+M test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/round/options-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/round/rounding-cross-midnight.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-hours.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-invalid.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-microseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-milliseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-minutes.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-seconds.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-ceil.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-floor.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-halfExpand.js - M test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-invalid-string.js --A test/built-ins/Temporal/PlainTime/prototype/since/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainTime/prototype/since/argument-string-with-time-designator.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-trunc.js -+M test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-undefined.js -+A test/built-ins/Temporal/PlainTime/prototype/round/roundto-invalid-string.js -+D test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-disallowed-units.js -+M test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-invalid-string.js -+A test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-missing.js -+A test/built-ins/Temporal/PlainTime/prototype/since/argument-cast.js -+A test/built-ins/Temporal/PlainTime/prototype/since/argument-number.js -+M test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainTime/prototype/since/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/since/basic.js - M test/built-ins/Temporal/PlainTime/prototype/since/largestunit-invalid-string.js --A test/built-ins/Temporal/PlainTime/prototype/since/largestunit-smallestunit-mismatch.js --A test/built-ins/Temporal/PlainTime/prototype/since/options-invalid.js -+M test/built-ins/Temporal/PlainTime/prototype/since/largestunit.js -+A test/built-ins/Temporal/PlainTime/prototype/since/leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/since/options-wrong-type.js -+M test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js -+A test/built-ins/Temporal/PlainTime/prototype/since/result-sub-second.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-hours.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-invalid.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-microseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-milliseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-minutes.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-nanoseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-seconds.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-ceil.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-floor.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-halfExpand.js - M test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-invalid-string.js -+A test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-trunc.js -+M test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-undefined.js - M test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-invalid-string.js --M test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-undefined.js --A test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js --A test/built-ins/Temporal/PlainTime/prototype/subtract/argument-object-invalid.js --A test/built-ins/Temporal/PlainTime/prototype/subtract/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/PlainTime/prototype/subtract/options-ignored.js --A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js --A test/built-ins/Temporal/PlainTime/prototype/toString/basic.js --A test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js -+M test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/subtract/argument-duration.js -+A test/built-ins/Temporal/PlainTime/prototype/subtract/argument-higher-units.js -+A test/built-ins/Temporal/PlainTime/prototype/subtract/argument-object.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-number.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-string-invalid.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/limits.js -+M test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js - M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-invalid-string.js --A test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-non-integer.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js - M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-out-of-range.js - M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-undefined.js --A test/built-ins/Temporal/PlainTime/prototype/toString/options-invalid.js --M test/built-ins/Temporal/PlainTime/prototype/toString/options-undefined.js --A test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js --A test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js --A test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js --A test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/toString/options-wrong-type.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js - M test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-invalid-string.js --A test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js --A test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js -+M test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js - M test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-invalid-string.js - M test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-valid-units.js --M test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/basic.js --M test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-datetime.js --A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js --A test/built-ins/Temporal/PlainTime/prototype/until/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/PlainTime/prototype/until/argument-string-with-time-designator.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-number.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-invalid.js -+M test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-with-utc-designator.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js -+M test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/until/argument-cast.js -+A test/built-ins/Temporal/PlainTime/prototype/until/argument-number.js -+M test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/PlainTime/prototype/until/argument-wrong-type.js -+A test/built-ins/Temporal/PlainTime/prototype/until/basic.js - M test/built-ins/Temporal/PlainTime/prototype/until/largestunit-invalid-string.js --A test/built-ins/Temporal/PlainTime/prototype/until/largestunit-smallestunit-mismatch.js --A test/built-ins/Temporal/PlainTime/prototype/until/options-invalid.js --M test/built-ins/Temporal/PlainTime/prototype/until/options-undefined.js -+A test/built-ins/Temporal/PlainTime/prototype/until/largestunit.js -+A test/built-ins/Temporal/PlainTime/prototype/until/leap-second.js -+A test/built-ins/Temporal/PlainTime/prototype/until/options-wrong-type.js -+M test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js -+A test/built-ins/Temporal/PlainTime/prototype/until/result-sub-second.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-hours.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-invalid.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-microseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-milliseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-minutes.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-nanoseconds.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-seconds.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-ceil.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-floor.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-halfExpand.js - M test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-invalid-string.js -+A test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-trunc.js -+M test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-undefined.js - M test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-invalid-string.js --M test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-undefined.js --A test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js --A test/built-ins/Temporal/PlainTime/prototype/valueOf/basic.js --A test/built-ins/Temporal/PlainTime/prototype/with/copy-properties-not-undefined.js --A test/built-ins/Temporal/PlainYearMonth/basic.js --A test/built-ins/Temporal/PlainYearMonth/compare/argument-cast.js --A test/built-ins/Temporal/PlainYearMonth/compare/basic.js --A test/built-ins/Temporal/PlainYearMonth/compare/compare-calendar.js --A test/built-ins/Temporal/PlainYearMonth/compare/compare-reference-day.js --M test/built-ins/Temporal/PlainYearMonth/compare/use-internal-slots.js --A test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js --M test/built-ins/Temporal/PlainYearMonth/constructor.js --A test/built-ins/Temporal/PlainYearMonth/from/argument-number.js --A test/built-ins/Temporal/PlainYearMonth/from/argument-object.js --A test/built-ins/Temporal/PlainYearMonth/from/argument-plaindate.js --A test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js --A test/built-ins/Temporal/PlainYearMonth/from/argument-string-invalid.js --A test/built-ins/Temporal/PlainYearMonth/from/argument-string-trailing-junk.js --M test/built-ins/Temporal/PlainYearMonth/from/argument-string.js --A test/built-ins/Temporal/PlainYearMonth/from/limits.js --A test/built-ins/Temporal/PlainYearMonth/from/options-invalid.js --A test/built-ins/Temporal/PlainYearMonth/from/overflow-constrain.js -+M test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js -+A test/built-ins/Temporal/PlainTime/prototype/with/options-wrong-type.js -+M test/built-ins/Temporal/PlainTime/prototype/with/overflow-invalid-string.js -+A test/built-ins/Temporal/PlainYearMonth/calendar-always.js -+A test/built-ins/Temporal/PlainYearMonth/calendar-number.js -+A test/built-ins/Temporal/PlainYearMonth/calendar-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/compare/argument-number.js -+A test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainYearMonth/compare/argument-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/compare/calendar-yearmonthfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainYearMonth/compare/leap-second.js -+M test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js -+M test/built-ins/Temporal/PlainYearMonth/from/argument-number.js -+M test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js -+A test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainYearMonth/from/argument-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/from/calendar-yearmonthfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainYearMonth/from/leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/from/options-wrong-type.js - M test/built-ins/Temporal/PlainYearMonth/from/overflow-invalid-string.js --A test/built-ins/Temporal/PlainYearMonth/from/overflow-reject.js --M test/built-ins/Temporal/PlainYearMonth/from/overflow-undefined.js --A test/built-ins/Temporal/PlainYearMonth/from/year-zero.js --A test/built-ins/Temporal/PlainYearMonth/limits.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/argument-duration-object.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/argument-lower-units.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/argument-object-invalid.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/argument-object-plural.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/argument-object.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/limits.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/month-length.js --A test/built-ins/Temporal/PlainYearMonth/prototype/add/options-invalid.js -+M test/built-ins/Temporal/PlainYearMonth/from/year-zero.js -+M test/built-ins/Temporal/PlainYearMonth/limits.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/add/calendar-datefromfields-called.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/add/options-wrong-type.js - M test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-invalid-string.js --M test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-undefined.js --M test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-wrong-type.js --A test/built-ins/Temporal/PlainYearMonth/prototype/daysInMonth/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/daysInYear/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-cast.js --A test/built-ins/Temporal/PlainYearMonth/prototype/equals/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/equals/compare-calendar.js --A test/built-ins/Temporal/PlainYearMonth/prototype/equals/compare-reference-day.js --A test/built-ins/Temporal/PlainYearMonth/prototype/equals/use-internal-slots.js --A test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js --A test/built-ins/Temporal/PlainYearMonth/prototype/monthsInYear/basic.js --R100 test/built-ins/Temporal/PlainYearMonth/prototype/since/arguments-casting.js test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-casting.js --D test/built-ins/Temporal/PlainYearMonth/prototype/since/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-auto.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-number.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-year-zero.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/calendar-yearmonthfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/equals/leap-second.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-number.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-yearmonthfromfields-called-with-options-undefined.js - M test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-invalid-string.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-months.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-smallestunit-mismatch.js --M test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-undefined.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-years.js --D test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit.js --D test/built-ins/Temporal/PlainYearMonth/prototype/since/negation.js --M test/built-ins/Temporal/PlainYearMonth/prototype/since/options-undefined.js --M test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingincrement-as-expected.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-ceil.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-floor.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-halfExpand.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-trunc.js --D test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-disallowed-units.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/since/options-wrong-type.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-invalid-string.js - M test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-invalid-string.js --A test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/argument-duration-object.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/argument-lower-units.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/argument-object-invalid.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/argument-object-plural.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/argument-object.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/limits.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/month-length.js --A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/options-invalid.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/calendar-datefromfields-called.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/subtract/options-wrong-type.js - M test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-invalid-string.js --M test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-undefined.js --M test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-wrong-type.js --A test/built-ins/Temporal/PlainYearMonth/prototype/toPlainDate/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js --A test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-auto.js --M test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-invalid-string.js --A test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-never.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-casting.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/arguments-missing-throws.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-auto.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-disallowed-units.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/toJSON/year-format.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/toString/year-format.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-number.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-wrong-type.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-yearmonthfromfields-called-with-options-undefined.js - M test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-invalid-string.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-months.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-smallestunit-mismatch.js --M test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-undefined.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-years.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/mixed-calendar-invalid.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/options-invalid.js --M test/built-ins/Temporal/PlainYearMonth/prototype/until/options-undefined.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingincrement-as-expected.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-ceil.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-floor.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-halfExpand.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-trunc.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/leap-second.js -+A test/built-ins/Temporal/PlainYearMonth/prototype/until/options-wrong-type.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-invalid-string.js - M test/built-ins/Temporal/PlainYearMonth/prototype/until/smallestunit-invalid-string.js --A test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js --A test/built-ins/Temporal/PlainYearMonth/prototype/valueOf/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/with/argument-calendar-field.js --A test/built-ins/Temporal/PlainYearMonth/prototype/with/argument-missing-fields.js --A test/built-ins/Temporal/PlainYearMonth/prototype/with/argument-timezone-field.js --A test/built-ins/Temporal/PlainYearMonth/prototype/with/basic.js --A test/built-ins/Temporal/PlainYearMonth/prototype/with/copy-properties-not-undefined.js --A test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js -+M test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js - M test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-invalid-string.js --M test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-undefined.js --M test/built-ins/Temporal/TimeZone/from/argument-primitive.js --M test/built-ins/Temporal/TimeZone/from/timezone-string-datetime.js --A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/branding.js --M test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/custom-timezone.js --M test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string.js --A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js --A test/built-ins/Temporal/TimeZone/prototype/id/branding.js --A test/built-ins/Temporal/TimeZone/prototype/id/custom-timezone.js --M test/built-ins/Temporal/TimeZone/prototype/id/no-toString.js --D test/built-ins/Temporal/TimeZone/prototype/id/plain-custom-timezone.js --A test/built-ins/Temporal/TimeZone/prototype/toJSON/branding.js --M test/built-ins/Temporal/TimeZone/prototype/toJSON/tostring-call.js --M test/built-ins/Temporal/TimeZone/prototype/toJSON/tostring-undefined-custom.js --A test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-offset-not-agreeing-with-timezone.js --M test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-datetime.js --A test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js --M test/built-ins/Temporal/ZonedDateTime/compare/zoneddatetime-string.js --A test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-offset-not-agreeing-with-timezone.js --M test/built-ins/Temporal/ZonedDateTime/from/timezone-string-datetime.js --A test/built-ins/Temporal/ZonedDateTime/from/year-zero.js --M test/built-ins/Temporal/ZonedDateTime/from/zoneddatetime-string.js --A test/built-ins/Temporal/ZonedDateTime/prototype/add/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-offset-not-agreeing-with-timezone.js --M test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-datetime.js --A test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js --A test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-offset-not-agreeing-with-timezone.js -+A test/built-ins/Temporal/TimeZone/from/timezone-string-leap-second.js -+A test/built-ins/Temporal/TimeZone/from/timezone-string-year-zero.js -+A test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-number.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/leap-second.js -+A test/built-ins/Temporal/TimeZone/prototype/getInstantFor/options-wrong-type.js -+M test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getNextTransition/leap-second.js -+M test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/leap-second.js -+M test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/leap-second.js -+M test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-object-tostring.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-number.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-string-leap-second.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string-sub-minute-offset.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/leap-second.js -+A test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/limits.js -+M test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-number.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-wrong-type.js -+A test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/leap-second.js -+M test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js -+A test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/leap-second.js -+M test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/compare/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/compare/leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/compare/timezone-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/from/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/from/argument-zoneddatetime.js -+A test/built-ins/Temporal/ZonedDateTime/from/leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/from/options-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/from/overflow-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/from/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/from/timezone-string-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/from/timezone-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/from/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/add/options-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/add/overflow-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/round/options-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/round/rounding-direction.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/round/roundingmode-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/round/roundto-invalid-string.js -+D test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-disallowed-units.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/calendar-dateadd-called-with-options-undefined.js - M test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-invalid-string.js --A test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/options-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/since/roundingmode-invalid-string.js - M test/built-ins/Temporal/ZonedDateTime/prototype/since/smallestunit-invalid-string.js --M test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-datetime.js --A test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js --A test/built-ins/Temporal/ZonedDateTime/prototype/subtract/argument-string-fractional-units-rounding-mode.js --A test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-offset-not-agreeing-with-timezone.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/subtract/options-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/subtract/overflow-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toJSON/year-format.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-auto.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-non-integer.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-number.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-undefined.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/options-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-cross-midnight.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-direction.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-ceil.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-floor.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-halfExpand.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-trunc.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-fractionalseconddigits.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-invalid-string.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-valid-units.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/toString/year-format.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/calendar-dateadd-called-with-options-undefined.js - M test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-invalid-string.js --A test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-smallestunit-mismatch.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/options-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/until/roundingmode-invalid-string.js - M test/built-ins/Temporal/ZonedDateTime/prototype/until/smallestunit-invalid-string.js --M test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-datetime.js --A test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js --A test/built-ins/Temporal/ZonedDateTime/prototype/with/copy-properties-not-undefined.js --M test/built-ins/Temporal/ZonedDateTime/prototype/with/offset-undefined.js --A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js --A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-no-implicit-midnight.js --A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js --A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-with-time-designator.js --A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js --M test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-datetime.js --M test/built-ins/Temporal/ZonedDateTime/timezone-string-datetime.js --A test/intl402/DurationFormat/instance/extensibility.js --A test/intl402/DurationFormat/instance/length.js --A test/intl402/DurationFormat/instance/name.js --A test/intl402/DurationFormat/instance/prop-desc.js --A test/intl402/DurationFormat/instance/prototype.js --A test/intl402/DurationFormat/prototype/constructor/prop-desc.js --A test/intl402/DurationFormat/prototype/constructor/value.js --A test/intl402/DurationFormat/prototype/format/length.js --A test/intl402/DurationFormat/prototype/format/name.js --A test/intl402/DurationFormat/prototype/format/prop-desc.js --A test/intl402/DurationFormat/prototype/format/throw-invoked-as-func.js --A test/intl402/DurationFormat/prototype/formatToParts/length.js --A test/intl402/DurationFormat/prototype/formatToParts/name.js --A test/intl402/DurationFormat/prototype/formatToParts/prop-desc.js --A test/intl402/DurationFormat/prototype/formatToParts/throw-invoked-as-func.js --A test/intl402/DurationFormat/prototype/resolvedOptions/length.js --A test/intl402/DurationFormat/prototype/resolvedOptions/name.js --A test/intl402/DurationFormat/prototype/resolvedOptions/prop-desc.js --A test/intl402/DurationFormat/prototype/resolvedOptions/throw-invoked-as-func.js --A test/intl402/DurationFormat/prototype/toStringTag/toString.js --R070 test/intl402/DurationFormat/prototype/toStringTag.js test/intl402/DurationFormat/prototype/toStringTag/toStringTag.js --M test/intl402/NumberFormat/prototype/resolvedOptions/basic.js --M test/intl402/NumberFormat/test-option-useGrouping.js --A test/intl402/Temporal/Calendar/prototype/era/year-zero.js --A test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js --A test/intl402/Temporal/Duration/prototype/add/relativeto-string-datetime.js --A test/intl402/Temporal/Duration/prototype/round/relativeto-string-datetime.js --A test/intl402/Temporal/Duration/prototype/subtract/relativeto-string-datetime.js --A test/intl402/Temporal/Duration/prototype/total/relativeto-string-datetime.js --A test/intl402/Temporal/Instant/prototype/toString/timezone-string-datetime.js --A test/intl402/Temporal/Instant/prototype/toZonedDateTime/timezone-string-datetime.js --A test/intl402/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-datetime.js --A test/intl402/Temporal/Now/plainDate/calendar-string.js --A test/intl402/Temporal/Now/plainDateTime/calendar-string.js --A test/intl402/Temporal/Now/zonedDateTime/calendar-string.js --A test/intl402/Temporal/Now/zonedDateTime/calendar-timezone-string.js --M test/intl402/Temporal/Now/zonedDateTime/timezone-string-datetime.js --M test/intl402/Temporal/Now/zonedDateTimeISO/timezone-string-datetime.js --A test/intl402/Temporal/Now/zonedDateTimeISO/timezone-string.js --A test/intl402/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-datetime.js --A test/intl402/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-datetime.js --A test/intl402/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-datetime.js --A test/intl402/Temporal/PlainYearMonth/from/argument-object.js --A test/intl402/Temporal/TimeZone/from/timezone-string-datetime.js --A test/intl402/Temporal/ZonedDateTime/from/timezone-string-datetime.js --A test/intl402/Temporal/ZonedDateTime/prototype/equals/timezone-string-datetime.js --A test/intl402/Temporal/ZonedDateTime/prototype/since/timezone-string-datetime.js --A test/intl402/Temporal/ZonedDateTime/prototype/until/timezone-string-datetime.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-add.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-and.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-bitand.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-bitor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-bitxor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-div.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-exp.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-lshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-mod.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-mult.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-nullish.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-or.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-rshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-srshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-sub.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-add.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-and.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-bitand.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-bitor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-bitxor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-div.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-exp.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-lshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-mod.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-mult.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-nullish.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-or.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-rshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-srshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-sub.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-add.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-and.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-bitand.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-bitor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-bitxor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-div.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-exp.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-lshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-mod.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-mult.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-rshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-srshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-method-sub.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-add.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-bitand.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-bitor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-bitxor.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-div.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-exp.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-lshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-mod.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-mult.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-rshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-srshift.js --A test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-sub.js -\ No newline at end of file -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/with/options-wrong-type.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/with/overflow-invalid-string.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-number.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-string-invalid.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/leap-second.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-number.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/leap-second.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -+M test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-year-zero.js -+A test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js -+A test/built-ins/Temporal/ZonedDateTime/timezone-string-leap-second.js -+A test/built-ins/Temporal/ZonedDateTime/timezone-string-multiple-offsets.js -+A test/built-ins/Temporal/ZonedDateTime/timezone-wrong-type.js -+D test/built-ins/TypedArray/prototype/set/BigInt/array-arg-targetbuffer-detached-on-get-src-value-throws.js -+A test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js -+D test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-throws.js -+D test/built-ins/TypedArray/prototype/sort/BigInt/detached-buffer-comparefn.js -+D test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn-coerce.js -+D test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn.js -+M test/built-ins/TypedArray/prototype/sort/sort-tonumber.js -+A test/built-ins/TypedArrayConstructors/ctors/no-species.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-access-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-null.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-undefined.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-different-type.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-same-type.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-access-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-throws.js -+D test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-different-type.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-same-type.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-access-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-access-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-throws.js -+D test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js -+M test/built-ins/parseInt/15.1.2.2-2-1.js -+A test/harness/temporalHelpers-one-shift-time-zone.js -+A test/intl402/DurationFormat/constructor-locales-invalid.js -+A test/intl402/DurationFormat/constructor-locales-valid.js -+A test/intl402/DurationFormat/constructor-options-defaults.js -+A test/intl402/DurationFormat/constructor-options-fractionalDigits-invalid.js -+A test/intl402/DurationFormat/constructor-options-fractionalDigits-valid.js -+A test/intl402/DurationFormat/constructor-options-invalid.js -+A test/intl402/DurationFormat/constructor-options-localeMatcher-invalid.js -+A test/intl402/DurationFormat/constructor-options-localeMatcher-valid.js -+A test/intl402/DurationFormat/constructor-options-numberingSystem-invalid.js -+A test/intl402/DurationFormat/constructor-options-numberingSystem-valid.js -+A test/intl402/DurationFormat/constructor-options-order.js -+A test/intl402/DurationFormat/constructor-options-style-invalid.js -+A test/intl402/DurationFormat/constructor-options-style-valid.js -+R100 test/intl402/DurationFormat/instance/extensibility.js test/intl402/DurationFormat/extensibility.js -+R100 test/intl402/DurationFormat/instance/length.js test/intl402/DurationFormat/length.js -+R100 test/intl402/DurationFormat/instance/name.js test/intl402/DurationFormat/name.js -+A test/intl402/DurationFormat/newtarget-undefined.js -+R100 test/intl402/DurationFormat/instance/prop-desc.js test/intl402/DurationFormat/prop-desc.js -+R100 test/intl402/DurationFormat/instance/prototype.js test/intl402/DurationFormat/prototype.js -+A test/intl402/DurationFormat/supportedLocalesOf/basic.js -+A test/intl402/DurationFormat/supportedLocalesOf/branding.js -+A test/intl402/DurationFormat/supportedLocalesOf/length.js -+A test/intl402/DurationFormat/supportedLocalesOf/locales-empty.js -+A test/intl402/DurationFormat/supportedLocalesOf/locales-invalid.js -+A test/intl402/DurationFormat/supportedLocalesOf/locales-specific.js -+A test/intl402/DurationFormat/supportedLocalesOf/name.js -+A test/intl402/DurationFormat/supportedLocalesOf/prop-desc.js -+A test/intl402/Intl/DateTimeFormat/prototype/formatRange/fails-on-distinct-temporal-types.js -+A test/intl402/Intl/DateTimeFormat/prototype/formatRangeToParts/fails-on-distinct-temporal-types.js -+M test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js -+M test/intl402/NumberFormat/constructor-roundingIncrement.js -+A test/intl402/NumberFormat/prototype/format/format-max-min-fraction-significant-digits.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-2.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js -+M test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js -+M test/intl402/NumberFormat/prototype/formatRange/x-greater-than-y-throws.js -+M test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-number.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-leap-second.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-number.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-wrong-type.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-year-zero.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-string-invalid.js -+A test/intl402/Temporal/Calendar/prototype/era/argument-wrong-type.js -+A test/intl402/Temporal/Calendar/prototype/era/calendar-datefromfields-called-with-options-undefined.js -+A test/intl402/Temporal/Calendar/prototype/era/leap-second.js -+M test/intl402/Temporal/Calendar/prototype/era/year-zero.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-number.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-leap-second.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-number.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-wrong-type.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-year-zero.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-string-invalid.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/argument-wrong-type.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/calendar-datefromfields-called-with-options-undefined.js -+A test/intl402/Temporal/Calendar/prototype/eraYear/leap-second.js -+M test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js -+A test/intl402/Temporal/Duration/compare/relativeto-hour.js -+A test/intl402/Temporal/Instant/prototype/toString/timezone-offset.js -+A test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-always.js -+A test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js -+A test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-never.js -+A test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js -+A test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js -+A test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js -+A test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js -+A test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-calendar.js -+A test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js -+A test/intl402/Temporal/TimeZone/etc-timezone.js -+R074 test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-and.js test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-and.js -+R075 test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-nullish.js test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-nullish.js -+R075 test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-or.js test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-or.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-and.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-nullish.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-or.js -+R073 test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-and.js test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-and.js -+R073 test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-nullish.js test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-nullish.js -+R073 test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-or.js test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-or.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-and.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-nullish.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-or.js -+R072 test/language/expressions/compound-assignment/left-hand-side-private-reference-method-and.js test/language/expressions/logical-assignment/left-hand-side-private-reference-method-and.js -+R056 test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-nullish.js -+R055 test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-or.js -+R069 test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js -+R071 test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js -+R069 test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-and.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-nullish.js -+A test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-or.js -+M test/language/expressions/unary-plus/S11.4.6_A3_T3.js -+M test/language/statements/for-in/S12.6.4_A7_T2.js -\ No newline at end of file -diff --git a/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/array-find-from-last.js b/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/array-find-from-last.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ba304c4ca3b60660cbbfc69f71d95206d914de0c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/array-find-from-last.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Microsoft. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+/*--- -+esid: sec-array.prototype-@@unscopables -+description: > -+ Initial value of `Symbol.unscopables` property -+info: | -+ 22.1.3.32 Array.prototype [ @@unscopables ] -+ -+ ... -+ 7. Perform CreateDataProperty(unscopableList, "findLast", true). -+ 8. Perform CreateDataProperty(unscopableList, "findLastIndex", true). -+ ... -+ -+includes: [propertyHelper.js] -+features: [Symbol.unscopables, array-find-from-last] -+---*/ -+ -+var unscopables = Array.prototype[Symbol.unscopables]; -+ -+assert.sameValue(Object.getPrototypeOf(unscopables), null); -+ -+assert.sameValue(unscopables.findLast, true, '`findLast` property value'); -+verifyEnumerable(unscopables, 'findLast'); -+verifyWritable(unscopables, 'findLast'); -+verifyConfigurable(unscopables, 'findLast'); -+ -+assert.sameValue(unscopables.findLastIndex, true, '`findLastIndex` property value'); -+verifyEnumerable(unscopables, 'findLastIndex'); -+verifyWritable(unscopables, 'findLastIndex'); -+verifyConfigurable(unscopables, 'findLastIndex'); -diff --git a/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/array-grouping.js b/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/array-grouping.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4e58eb711aaf2dc998ae985c6cbca06ab168128e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/array-grouping.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Chengzhong Wu. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+/*--- -+esid: sec-array.prototype-@@unscopables -+description: > -+ Initial value of `Symbol.unscopables` property -+info: | -+ 22.1.3.32 Array.prototype [ @@unscopables ] -+ -+ ... -+ 10. Perform ! CreateDataPropertyOrThrow(unscopableList, "groupBy", true). -+ 11. Perform ! CreateDataPropertyOrThrow(unscopableList, "groupByToMap", true). -+ ... -+ -+includes: [propertyHelper.js] -+features: [Symbol.unscopables, array-grouping] -+---*/ -+ -+var unscopables = Array.prototype[Symbol.unscopables]; -+ -+assert.sameValue(Object.getPrototypeOf(unscopables), null); -+ -+assert.sameValue(unscopables.groupBy, true, '`groupBy` property value'); -+verifyEnumerable(unscopables, 'groupBy'); -+verifyWritable(unscopables, 'groupBy'); -+verifyConfigurable(unscopables, 'groupBy'); -+ -+assert.sameValue(unscopables.groupByToMap, true, '`groupByToMap` property value'); -+verifyEnumerable(unscopables, 'groupByToMap'); -+verifyWritable(unscopables, 'groupByToMap'); -+verifyConfigurable(unscopables, 'groupByToMap'); -diff --git a/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/value.js b/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/value.js -index 526cf8b877a28b265c0936c97252100e842a4354..a3c4f5fd1a117ba14ea46af679f6c34698db66e6 100644 ---- a/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/value.js -+++ b/JSTests/test262/test/built-ins/Array/prototype/Symbol.unscopables/value.js -@@ -13,19 +13,16 @@ info: | - 4. Perform CreateDataProperty(unscopableList, "fill", true). - 5. Perform CreateDataProperty(unscopableList, "find", true). - 6. Perform CreateDataProperty(unscopableList, "findIndex", true). -- 7. Perform CreateDataProperty(unscopableList, "findLast", true). -- 8. Perform CreateDataProperty(unscopableList, "findLastIndex", true). -- 9. Perform CreateDataProperty(unscopableList, "flat", true). -- 10. Perform CreateDataProperty(unscopableList, "flatMap", true). -- 11. Perform ! CreateDataPropertyOrThrow(unscopableList, "groupBy", true). -- 12. Perform ! CreateDataPropertyOrThrow(unscopableList, "groupByToMap", true). -- 13. Perform CreateDataProperty(unscopableList, "includes", true). -- 14. Perform CreateDataProperty(unscopableList, "keys", true). -- 15. Perform CreateDataProperty(unscopableList, "values", true). -- 16. Assert: Each of the above calls returns true. -- 17. Return unscopableList. -+ 7. Perform CreateDataProperty(unscopableList, "flat", true). -+ 8. Perform CreateDataProperty(unscopableList, "flatMap", true). -+ 9. Perform CreateDataProperty(unscopableList, "includes", true). -+ 10. Perform CreateDataProperty(unscopableList, "keys", true). -+ 11. Perform CreateDataProperty(unscopableList, "values", true). -+ 12. Assert: Each of the above calls returns true. -+ 13. Return unscopableList. -+ - includes: [propertyHelper.js] --features: [Symbol.unscopables, array-find-from-last] -+features: [Symbol.unscopables] - ---*/ - - var unscopables = Array.prototype[Symbol.unscopables]; -@@ -57,17 +54,6 @@ verifyEnumerable(unscopables, 'findIndex'); - verifyWritable(unscopables, 'findIndex'); - verifyConfigurable(unscopables, 'findIndex'); - -- --assert.sameValue(unscopables.findLast, true, '`findLast` property value'); --verifyEnumerable(unscopables, 'findLast'); --verifyWritable(unscopables, 'findLast'); --verifyConfigurable(unscopables, 'findLast'); -- --assert.sameValue(unscopables.findLastIndex, true, '`findLastIndex` property value'); --verifyEnumerable(unscopables, 'findLastIndex'); --verifyWritable(unscopables, 'findLastIndex'); --verifyConfigurable(unscopables, 'findLastIndex'); -- - assert.sameValue(unscopables.flat, true, '`flat` property value'); - verifyEnumerable(unscopables, 'flat'); - verifyWritable(unscopables, 'flat'); -@@ -78,16 +64,6 @@ verifyEnumerable(unscopables, 'flatMap'); - verifyWritable(unscopables, 'flatMap'); - verifyConfigurable(unscopables, 'flatMap'); - --assert.sameValue(unscopables.groupBy, true, '`groupBy` property value'); --verifyEnumerable(unscopables, 'groupBy'); --verifyWritable(unscopables, 'groupBy'); --verifyConfigurable(unscopables, 'groupBy'); -- --assert.sameValue(unscopables.groupByToMap, true, '`groupByToMap` property value'); --verifyEnumerable(unscopables, 'groupByToMap'); --verifyWritable(unscopables, 'groupByToMap'); --verifyConfigurable(unscopables, 'groupByToMap'); -- - assert.sameValue(unscopables.includes, true, '`includes` property value'); - verifyEnumerable(unscopables, 'includes'); - verifyWritable(unscopables, 'includes'); -diff --git a/JSTests/test262/test/built-ins/Array/prototype/concat/create-species-non-ctor.js b/JSTests/test262/test/built-ins/Array/prototype/concat/create-species-non-ctor.js -index 1095078be4493dc7aac1c0966bc9504a3149fb5f..53a9e2a1993935b0d625c9801a8789b408c28cce 100644 ---- a/JSTests/test262/test/built-ins/Array/prototype/concat/create-species-non-ctor.js -+++ b/JSTests/test262/test/built-ins/Array/prototype/concat/create-species-non-ctor.js -@@ -18,9 +18,16 @@ info: | - b. If C is null, let C be undefined. - [...] - 9. If IsConstructor(C) is false, throw a TypeError exception. --features: [Symbol.species] -+includes: [isConstructor.js] -+features: [Symbol.species, Reflect.construct] - ---*/ - -+assert.sameValue( -+ isConstructor(parseInt), -+ false, -+ 'precondition: isConstructor(parseInt) must return false' -+); -+ - var a = []; - - a.constructor = {}; -diff --git a/JSTests/test262/test/built-ins/Array/prototype/filter/create-species-non-ctor.js b/JSTests/test262/test/built-ins/Array/prototype/filter/create-species-non-ctor.js -index 067c43399384caac7ffa63098bc951a6b5c5de7e..aa3b529fb0984ff53b9b0f747406f493c1ee9802 100644 ---- a/JSTests/test262/test/built-ins/Array/prototype/filter/create-species-non-ctor.js -+++ b/JSTests/test262/test/built-ins/Array/prototype/filter/create-species-non-ctor.js -@@ -19,9 +19,16 @@ info: | - b. If C is null, let C be undefined. - [...] - 9. If IsConstructor(C) is false, throw a TypeError exception. --features: [Symbol.species] -+includes: [isConstructor.js] -+features: [Symbol.species, Reflect.construct] - ---*/ - -+assert.sameValue( -+ isConstructor(parseInt), -+ false, -+ 'precondition: isConstructor(parseInt) must return false' -+); -+ - var a = []; - var callCount = 0; - var cb = function() { -@@ -33,5 +40,5 @@ a.constructor[Symbol.species] = parseInt; - - assert.throws(TypeError, function() { - a.filter(cb); --}); -+}, 'a.filter(cb) throws a TypeError exception'); - assert.sameValue(callCount, 0); -diff --git a/JSTests/test262/test/built-ins/Array/prototype/map/create-species-non-ctor.js b/JSTests/test262/test/built-ins/Array/prototype/map/create-species-non-ctor.js -index d448b4ebb84a171efd7a40fc65f7a7316c0aeaf6..1f55d4522e1b26183fa0fe03e29275215680a8d8 100644 ---- a/JSTests/test262/test/built-ins/Array/prototype/map/create-species-non-ctor.js -+++ b/JSTests/test262/test/built-ins/Array/prototype/map/create-species-non-ctor.js -@@ -19,9 +19,16 @@ info: | - b. If C is null, let C be undefined. - [...] - 9. If IsConstructor(C) is false, throw a TypeError exception. --features: [Symbol.species] -+includes: [isConstructor.js] -+features: [Symbol.species, Reflect.construct] - ---*/ - -+assert.sameValue( -+ isConstructor(parseInt), -+ false, -+ 'precondition: isConstructor(parseInt) must return false' -+); -+ - var a = []; - var callCount = 0; - var cb = function() { -@@ -33,5 +40,5 @@ a.constructor[Symbol.species] = parseInt; - - assert.throws(TypeError, function() { - a.map(cb); --}); -+}, 'a.map(cb) throws a TypeError exception'); - assert.sameValue(callCount, 0); -diff --git a/JSTests/test262/test/built-ins/Array/prototype/slice/create-species-non-ctor.js b/JSTests/test262/test/built-ins/Array/prototype/slice/create-species-non-ctor.js -index 598368184a5eacef2ac71cf1a39955ede17742a6..4972bb8d1aaeeddf79727a552303d4ab09759061 100644 ---- a/JSTests/test262/test/built-ins/Array/prototype/slice/create-species-non-ctor.js -+++ b/JSTests/test262/test/built-ins/Array/prototype/slice/create-species-non-ctor.js -@@ -19,9 +19,16 @@ info: | - b. If C is null, let C be undefined. - [...] - 9. If IsConstructor(C) is false, throw a TypeError exception. --features: [Symbol.species] -+includes: [isConstructor.js] -+features: [Symbol.species, Reflect.construct] - ---*/ - -+assert.sameValue( -+ isConstructor(parseInt), -+ false, -+ 'precondition: isConstructor(parseInt) must return false' -+); -+ - var a = []; - - a.constructor = {}; -@@ -29,4 +36,4 @@ a.constructor[Symbol.species] = parseInt; - - assert.throws(TypeError, function() { - a.slice(); --}); -+}, 'a.slice() throws a TypeError exception'); -diff --git a/JSTests/test262/test/built-ins/Array/prototype/splice/create-species-non-ctor.js b/JSTests/test262/test/built-ins/Array/prototype/splice/create-species-non-ctor.js -index 0d5ff35bfedf03263222d05b14d2e3873e2b934b..dd949216e1983f8a12a88d76da76978ebb036aee 100644 ---- a/JSTests/test262/test/built-ins/Array/prototype/splice/create-species-non-ctor.js -+++ b/JSTests/test262/test/built-ins/Array/prototype/splice/create-species-non-ctor.js -@@ -19,9 +19,16 @@ info: | - b. If C is null, let C be undefined. - [...] - 9. If IsConstructor(C) is false, throw a TypeError exception. --features: [Symbol.species] -+includes: [isConstructor.js] -+features: [Symbol.species, Reflect.construct] - ---*/ - -+assert.sameValue( -+ isConstructor(parseInt), -+ false, -+ 'precondition: isConstructor(parseInt) must return false' -+); -+ - var a = []; - - a.constructor = {}; -@@ -29,4 +36,4 @@ a.constructor[Symbol.species] = parseInt; - - assert.throws(TypeError, function() { - a.splice(); --}); -+}, 'a.splice() throws a TypeError exception'); -diff --git a/JSTests/test262/test/built-ins/Date/parse/year-zero.js b/JSTests/test262/test/built-ins/Date/parse/year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9b0aea84c79f85c21af9baa8e8e924e36d40be73 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Date/parse/year-zero.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-expanded-years -+description: Negative zero, as an extended year, is rejected -+info: | -+ The year 0 is considered positive and must be prefixed with a + sign. The -+ representation of the year 0 as -000000 is invalid. -+---*/ -+ -+const invalidStrings = [ -+ "-000000-03-31T00:45Z", -+ "-000000-03-31T01:45", -+ "-000000-03-31T01:45:00+01:00" -+]; -+ -+for (const str of invalidStrings) { -+ assert.sameValue(Date.parse(str), NaN, "reject minus zero as extended year"); -+} -diff --git a/JSTests/test262/test/built-ins/Date/year-zero.js b/JSTests/test262/test/built-ins/Date/year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0d645cf6d2e49038c87c7217783e0bf92e5ad489 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Date/year-zero.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-expanded-years -+description: Negative zero, as an extended year, is rejected -+info: | -+ The year 0 is considered positive and must be prefixed with a + sign. The -+ representation of the year 0 as -000000 is invalid. -+---*/ -+ -+const invalidStrings = [ -+ "-000000-03-31T00:45Z", -+ "-000000-03-31T01:45", -+ "-000000-03-31T01:45:00+01:00" -+]; -+ -+for (const str of invalidStrings) { -+ assert.sameValue(+new Date(str), NaN, "reject minus zero as extended year"); -+} -diff --git a/JSTests/test262/test/built-ins/Error/constructor.js b/JSTests/test262/test/built-ins/Error/constructor.js -index 072eee66f9854e3897897abf4a9e1ccd028787fd..efccd74ba6582f9198becd49b91ce1979cd28e4b 100644 ---- a/JSTests/test262/test/built-ins/Error/constructor.js -+++ b/JSTests/test262/test/built-ins/Error/constructor.js -@@ -12,7 +12,7 @@ info: | - - esid: sec-error-message - features: [error-cause] --includes: [deepEqual.js] -+includes: [compareArray.js] - ---*/ - - var message = "my-message"; -@@ -34,4 +34,4 @@ new Error( - }, - ); - --assert.deepEqual(sequence, [ "toString", "cause" ], "accessing own properties on sequence"); -+assert.compareArray(sequence, [ "toString", "cause" ], "accessing own properties on sequence"); -diff --git a/JSTests/test262/test/built-ins/Function/prototype/bind/instance-length-tointeger.js b/JSTests/test262/test/built-ins/Function/prototype/bind/instance-length-tointeger.js -index 876ed47b516e2b474ec0e1778dc936257eae2cd6..92aaf1a3160b3919887359348bc3d678fec6a91b 100644 ---- a/JSTests/test262/test/built-ins/Function/prototype/bind/instance-length-tointeger.js -+++ b/JSTests/test262/test/built-ins/Function/prototype/bind/instance-length-tointeger.js -@@ -13,12 +13,15 @@ info: | - 5. Let targetHasLength be ? HasOwnProperty(Target, "length"). - 6. If targetHasLength is true, then - a. Let targetLen be ? Get(Target, "length"). -- b. If Type(targetLen) is not Number, let L be 0. -- c. Else, -- i. Set targetLen to ! ToInteger(targetLen). -- ii. Let L be the larger of 0 and the result of targetLen minus the number of elements of args. -- 7. Else, let L be 0. -- 8. Perform ! SetFunctionLength(F, L). -+ b. If Type(targetLen) is Number, then -+ i. If targetLen is +∞𝔽, set L to +∞. -+ ii. Else if targetLen is -∞𝔽, set L to 0. -+ iii. Else, -+ 1. Let targetLenAsInt be ! ToIntegerOrInfinity(targetLen). -+ 2. Assert: targetLenAsInt is finite. -+ 3. Let argCount be the number of elements in args. -+ 4. Set L to max(targetLenAsInt - argCount, 0). -+ 7. Perform ! SetFunctionLength(F, L). - [...] - - ToInteger ( argument ) -@@ -40,10 +43,12 @@ Object.defineProperty(fn, "length", {value: -0}); - assert.sameValue(fn.bind().length, 0); - - Object.defineProperty(fn, "length", {value: Infinity}); --assert.sameValue(fn.bind().length, Infinity); -+assert.sameValue(fn.bind().length, Infinity, "target length of infinity, zero bound arguments"); -+assert.sameValue(fn.bind(0, 0).length, Infinity, "target length of infinity, one bound argument"); - - Object.defineProperty(fn, "length", {value: -Infinity}); --assert.sameValue(fn.bind().length, 0); -+assert.sameValue(fn.bind().length, 0, "target length of negative infinity, zero bound arguments"); -+assert.sameValue(fn.bind(0, 0).length, 0, "target length of negative infinity, one bound argument"); - - Object.defineProperty(fn, "length", {value: 3.66}); - assert.sameValue(fn.bind().length, 3); -diff --git a/JSTests/test262/test/built-ins/Number/S15.7.1.1_A1.js b/JSTests/test262/test/built-ins/Number/S15.7.1.1_A1.js -index 3ccfaf32ae311c50f629f13e414062a16eaefd43..adf4f19515e1676142a5dcb82483b23d60486ec0 100644 ---- a/JSTests/test262/test/built-ins/Number/S15.7.1.1_A1.js -+++ b/JSTests/test262/test/built-ins/Number/S15.7.1.1_A1.js -@@ -24,3 +24,5 @@ assert.sameValue( - ); - - assert.sameValue(Number("abc"), NaN, 'Number("abc") returns NaN'); -+assert.sameValue(Number("INFINITY"), NaN, 'Number("INFINITY") returns NaN'); -+assert.sameValue(Number("infinity"), NaN, 'Number("infinity") returns NaN'); -diff --git a/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js b/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js -index 4cdfe4ca8224c2aa6c8119085aae3bd8955794d2..2dd4ef4018df067c7784c16cf61000c18222e65f 100644 ---- a/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js -+++ b/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js -@@ -5,9 +5,17 @@ - info: RegExp.prototype.toString has not prototype property - es5id: 15.10.6.4_A6 - description: Checking RegExp.prototype.toString.prototype -+includes: [isConstructor.js] -+features: [Reflect.construct] - ---*/ - assert.sameValue( - RegExp.prototype.toString.prototype, - undefined, - 'The value of RegExp.prototype.toString.prototype is expected to equal undefined' - ); -+ -+assert.sameValue( -+ isConstructor(RegExp.prototype.toString), -+ false, -+ 'isConstructor(RegExp.prototype.toString) must return false' -+); -diff --git a/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js b/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js -index faeddca853f3736b079e7155289d16490b20a5e3..ec818f615e16814664cf08432082a2e12bee593c 100644 ---- a/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js -+++ b/JSTests/test262/test/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js -@@ -5,6 +5,8 @@ - info: RegExp.prototype.toString can't be used as constructor - es5id: 15.10.6.4_A7 - description: Checking if creating the RegExp.prototype.toString object fails -+includes: [isConstructor.js] -+features: [Reflect.construct] - ---*/ - - var __FACTORY = RegExp.prototype.toString; -@@ -20,4 +22,10 @@ try { - ); - } - -+assert.sameValue( -+ isConstructor(RegExp.prototype.toString), -+ false, -+ 'isConstructor(RegExp.prototype.toString) must return false' -+); -+ - // TODO: Convert to assert.throws() format. -diff --git a/JSTests/test262/test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js b/JSTests/test262/test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ee964823a24b55176b84d402a12ada9dd949856f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Chengzhong Wu. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+/*--- -+esid: sec-wrapped-function-exotic-objects-call-thisargument-argumentslist -+description: > -+ WrappedFunctionCreate throws a TypeError the target is a revoked proxy. -+ -+info: | -+ WrappedFunctionCreate ( callerRealm: a Realm Record, Target: a function object, ) -+ 1. Let target be F.[[WrappedTargetFunction]]. -+ 2. Assert: IsCallable(target) is true. -+ 3. Let callerRealm be F.[[Realm]]. -+ 4. NOTE: Any exception objects produced after this point are associated with callerRealm. -+ 5. Let targetRealm be ? GetFunctionRealm(target). -+ ... -+ -+ GetFunctionRealm ( obj ) -+ ... -+ 3. If obj is a Proxy exotic object, then -+ a. If obj.[[ProxyHandler]] is null, throw a TypeError exception. -+ ... -+ -+features: [ShadowRealm] -+---*/ -+ -+assert.sameValue( -+ typeof ShadowRealm.prototype.evaluate, -+ 'function', -+ 'This test must fail if ShadowRealm.prototype.evaluate is not a function' -+); -+ -+const r = new ShadowRealm(); -+ -+const fn = r.evaluate(` -+globalThis.revocable = Proxy.revocable(() => {}, {}); -+ -+globalThis.revocable.proxy; -+`); -+r.evaluate('revocable.revoke()'); -+assert.throws(TypeError, () => fn()); -diff --git a/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-ordinary-object.js b/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-ordinary-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d59e77078d145e7da92a47aef6ff153d466bbc03 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-ordinary-object.js -@@ -0,0 +1,90 @@ -+// Copyright (C) 2021 Leo Balter. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+/*--- -+esid: sec-shadowrealm.prototype.evaluate -+description: > -+ The globalThis must be an ordinary object from OrdinaryObjectCreate -+info: | -+ ShadowRealm ( ) -+ -+ ... -+ 3. Let realmRec be CreateRealm(). -+ 4. Set O.[[ShadowRealm]] to realmRec. -+ ... -+ 10. Perform ? SetRealmGlobalObject(realmRec, undefined, undefined). -+ 11. Perform ? SetDefaultGlobalBindings(O.[[ShadowRealm]]). -+ 12. Perform ? HostInitializeShadowRealm(O.[[ShadowRealm]]). -+ -+ SetRealmGlobalObject ( realmRec, globalObj, thisValue ) -+ -+ 1. If globalObj is undefined, then -+ a. Let intrinsics be realmRec.[[Intrinsics]]. -+ b. Set globalObj to ! OrdinaryObjectCreate(intrinsics.[[%Object.prototype%]]). -+ 2. Assert: Type(globalObj) is Object. -+ 3. If thisValue is undefined, set thisValue to globalObj. -+ ... -+ -+ OrdinaryObjectCreate ( proto [ , additionalInternalSlotsList ] ) -+ -+ 1. Let internalSlotsList be « [[Prototype]], [[Extensible]] ». -+ 2. If additionalInternalSlotsList is present, append each of its elements to internalSlotsList. -+ 3. Let O be ! MakeBasicObject(internalSlotsList). -+ 4. Set O.[[Prototype]] to proto. -+ 5. Return O. -+ -+ MakeBasicObject ( internalSlotsList ) -+ -+ ... -+ 5. If internalSlotsList contains [[Extensible]], set obj.[[Extensible]] to true. -+features: [ShadowRealm] -+---*/ -+ -+assert.sameValue( -+ typeof ShadowRealm.prototype.evaluate, -+ 'function', -+ 'This test must fail if ShadowRealm.prototype.evaluate is not a function' -+); -+ -+const r = new ShadowRealm(); -+ -+assert.sameValue( -+ r.evaluate('Object.getPrototypeOf(globalThis) === Object.prototype'), -+ true, -+ 'The [[Prototype]] of globalThis is Object.prototype' -+); -+ -+assert.sameValue( -+ r.evaluate('Object.isExtensible(globalThis)'), -+ true, -+ 'globalThis is extensible' -+); -+ -+assert.sameValue( -+ r.evaluate('globalThis.constructor === Object'), -+ true, -+ 'globalThis.constructor is Object' -+); -+ -+assert.sameValue( -+ r.evaluate(` -+ let result; -+ try { -+ globalThis.__proto__ = {x: 2}; -+ result = true; -+ } catch (e) { -+ result = false; -+ } -+ result; -+ `), -+ true, -+ 'Can assign to globalThis.__proto__ directly' -+); -+ -+assert.sameValue( -+ r.evaluate(` -+ Reflect.set(globalThis, '__proto__', {x: 1}) && -+ Reflect.setPrototypeOf(globalThis.__proto__, {x: 2}); -+ `), -+ true, -+ 'Can set an ordinary globalThis.__proto__' -+); -diff --git a/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-orginary-object.js b/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-orginary-object.js -deleted file mode 100644 -index fd71e9102689c7ff18cdabf4f0f05f412bfafeea..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/globalthis-orginary-object.js -+++ /dev/null -@@ -1,66 +0,0 @@ --// Copyright (C) 2021 Leo Balter. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-shadowrealm.prototype.evaluate --description: > -- The globalThis must be an ordinary object from OrdinaryObjectCreate --info: | -- ShadowRealm ( ) -- -- ... -- 3. Let realmRec be CreateRealm(). -- 4. Set O.[[ShadowRealm]] to realmRec. -- ... -- 10. Perform ? SetRealmGlobalObject(realmRec, undefined, undefined). -- 11. Perform ? SetDefaultGlobalBindings(O.[[ShadowRealm]]). -- 12. Perform ? HostInitializeShadowRealm(O.[[ShadowRealm]]). -- -- SetRealmGlobalObject ( realmRec, globalObj, thisValue ) -- -- 1. If globalObj is undefined, then -- a. Let intrinsics be realmRec.[[Intrinsics]]. -- b. Set globalObj to ! OrdinaryObjectCreate(intrinsics.[[%Object.prototype%]]). -- 2. Assert: Type(globalObj) is Object. -- 3. If thisValue is undefined, set thisValue to globalObj. -- ... -- -- OrdinaryObjectCreate ( proto [ , additionalInternalSlotsList ] ) -- -- 1. Let internalSlotsList be « [[Prototype]], [[Extensible]] ». -- 2. If additionalInternalSlotsList is present, append each of its elements to internalSlotsList. -- 3. Let O be ! MakeBasicObject(internalSlotsList). -- 4. Set O.[[Prototype]] to proto. -- 5. Return O. -- -- MakeBasicObject ( internalSlotsList ) -- -- ... -- 5. If internalSlotsList contains [[Extensible]], set obj.[[Extensible]] to true. --features: [ShadowRealm] -----*/ -- --assert.sameValue( -- typeof ShadowRealm.prototype.evaluate, -- 'function', -- 'This test must fail if ShadowRealm.prototype.evaluate is not a function' --); -- --const r = new ShadowRealm(); -- --assert.sameValue( -- r.evaluate('Object.getPrototypeOf(globalThis) === Object.prototype'), -- true, -- 'The [[Prototype]] of globalThis is Object.prototype' --); -- --assert.sameValue( -- r.evaluate('Object.isExtensible(globalThis)'), -- true, -- 'globalThis is extensible' --); -- --assert.sameValue( -- r.evaluate('globalThis.constructor === Object'), -- true, -- 'globalThis.constructor is Object' --); -diff --git a/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js b/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b3cec5b115e010036ec92c35a347b9f0d16a244a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js -@@ -0,0 +1,70 @@ -+// Copyright (C) 2022 Chengzhong Wu. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+/*--- -+esid: sec-wrappedfunctioncreate -+description: > -+ WrappedFunctionCreate throws a TypeError if the accessing target's property may throw. -+ -+info: | -+ WrappedFunctionCreate ( callerRealm: a Realm Record, Target: a function object, ) -+ ... -+ 7. Let result be CopyNameAndLength(wrapped, Target). -+ ... -+ -+ CopyNameAndLength ( F: a function object, Target: a function object, optional prefix: a String, optional argCount: a Number, ) -+ ... -+ 3. Let targetHasLength be ? HasOwnProperty(Target, "length"). -+ 4. If targetHasLength is true, then -+ a. Let targetLen be ? Get(Target, "length"). -+ ... -+ 6. Let targetName be ? Get(Target, "name"). -+ -+features: [ShadowRealm] -+---*/ -+ -+assert.sameValue( -+ typeof ShadowRealm.prototype.evaluate, -+ 'function', -+ 'This test must fail if ShadowRealm.prototype.evaluate is not a function' -+); -+ -+const r = new ShadowRealm(); -+ -+assert.throws(TypeError, () => r.evaluate(` -+const revocable = Proxy.revocable(() => {}, {}); -+revocable.revoke(); -+ -+revocable.proxy; -+`), 'TypeError on wrapping a revoked callable proxy'); -+ -+assert.throws(TypeError, () => r.evaluate(` -+const fn = () => {}; -+Object.defineProperty(fn, 'name', { -+ get() { -+ throw new Error(); -+ }, -+}); -+ -+fn; -+`), 'TypeError on wrapping a fn with throwing name accessor'); -+ -+assert.throws(TypeError, () => r.evaluate(` -+const fn = () => {}; -+Object.defineProperty(fn, 'length', { -+ get() { -+ throw new Error(); -+ }, -+}); -+ -+fn; -+`), 'TypeError on wrapping a fn with throwing length accessor'); -+ -+assert.throws(TypeError, () => r.evaluate(` -+const proxy = new Proxy(() => {}, { -+ getOwnPropertyDescriptor(target, key) { -+ throw new Error(); -+ }, -+}); -+ -+proxy; -+`), 'TypeError on wrapping a callable proxy with throwing getOwnPropertyDescriptor trap'); -diff --git a/JSTests/test262/test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js b/JSTests/test262/test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js -index 06d9453fa109ef23b4f511ea61b64a1a4f16b73e..55fd38f54b0203ac9da782236265b37783e79567 100644 ---- a/JSTests/test262/test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js -+++ b/JSTests/test262/test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js -@@ -1,15 +1,21 @@ - // Copyright 2012 Norbert Lindenberg. All rights reserved. - // Copyright 2012 Mozilla Corporation. All rights reserved. - // Copyright 2013 Microsoft Corporation. All rights reserved. -+// Copyright (C) 2022 Richard Gibson. All rights reserved. - // This code is governed by the license found in the LICENSE file. - - /*--- --es5id: 15.5.4.9_CE - description: > -- Tests that String.prototype.localeCompare returns 0 when -- comparing Strings that are considered canonically equivalent by -- the Unicode standard. --author: Norbert Lindenberg -+ String.prototype.localeCompare must return 0 when -+ comparing Strings that are considered canonically equivalent by -+ the Unicode Standard. -+esid: sec-string.prototype.localecompare -+info: | -+ String.prototype.localeCompare ( _that_ [ , _reserved1_ [ , _reserved2_ ] ] ) -+ -+ This function must treat Strings that are canonically equivalent -+ according to the Unicode standard as identical and must return `0` -+ when comparing Strings that are considered canonically equivalent. - ---*/ - - // pairs with characters not in Unicode 3.0 are commented out -@@ -49,26 +55,12 @@ var pairs = [ - // ["\uD87E\uDC2B", "北"] - ]; - --// Detect whether we are using locale-sensitive comparisons or a bitwise comparison --if ("a".localeCompare("Z") < 0) { -- // We are using locale-sensitive comparison, so all pairs should be canonically equivalent -- var i; -- for (i = 0; i < pairs.length; i++) { -- var pair = pairs[i]; -- if (pair[0].localeCompare(pair[1]) !== 0) { -- throw new Test262Error("String.prototype.localeCompare considers " + pair[0] + " (" + toU(pair[0]) + -- ") ≠ " + pair[1] + " (" + toU(pair[1]) + ")."); -- } -- } --} else { -- // We are using bitwise comparison, so all pairs should not be equivalent -- var i; -- for (i = 0; i < pairs.length; i++) { -- var pair = pairs[i]; -- if (pair[0].localeCompare(pair[1]) === 0) { -- throw new Test262Error("String.prototype.localeCompare considers " + pair[0] + " (" + toU(pair[0]) + -- ") = " + pair[1] + " (" + toU(pair[1]) + ")."); -- } -+var i; -+for (i = 0; i < pairs.length; i++) { -+ var pair = pairs[i]; -+ if (pair[0].localeCompare(pair[1]) !== 0) { -+ throw new Test262Error("String.prototype.localeCompare considers " + pair[0] + " (" + toU(pair[0]) + -+ ") ≠ " + pair[1] + " (" + toU(pair[1]) + ")."); - } - } - -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b6977f2f5ac5bca53e3ffa5a9f651283345fccd0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.from -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = Temporal.Calendar.from(arg); -+assert.sameValue(result.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.Calendar.from(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..88ec4b5ac8d7c69c7f837481c5de644d603d3898 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-string-leap-second.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.from -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = Temporal.Calendar.from(arg); -+assert.sameValue( -+ result1.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = Temporal.Calendar.from(arg); -+assert.sameValue( -+ result2.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ce7a471809de0704be5342f5842f87d05e8eb029 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/from/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Calendar.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Calendar.from(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d1ff94276db090dc455581e74052ad0172f234a2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: A number is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate(result, 1976, 11, "M11", 18, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.dateAdd(arg, new Temporal.Duration()), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e310aaeac9f107871a26ec14d4393b68f055da9b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate( -+ result1, -+ 1976, 11, "M11", 18, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate( -+ result2, -+ 1976, 11, "M11", 18, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4d585142dcec4ef767e33176441739efa407d696 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate(result1, 1976, 11, "M11", 18, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate(result2, 1976, 11, "M11", 18, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.dateAdd(arg, new Temporal.Duration()), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.dateAdd(arg, new Temporal.Duration()), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a868f5578c65e70cd2383cfb6686265eec344122 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.dateAdd(arg, new Temporal.Duration()), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.dateAdd(arg, new Temporal.Duration()), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.dateAdd(arg, new Temporal.Duration()), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.dateAdd(arg, new Temporal.Duration()), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.dateAdd(arg, new Temporal.Duration()), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e5d004cb0b65d34b7dc5465d921e85e1e528b600 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.dateAdd(arg, new Temporal.Duration()), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..44c78a9ee5896023e90cc555371b5b36731ac05a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.dateAdd(arg, new Temporal.Duration()), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-with-utc-designator.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-with-utc-designator.js -index 6c60a8c4b8aa846bfd843f86a4e652f1b3141d71..3d8fdc484a1825175caa7f148635a2795ff0d965 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-with-utc-designator.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-string-with-utc-designator.js -@@ -15,7 +15,7 @@ const instance = new Temporal.Calendar("iso8601"); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => instance.dateAdd(arg), -+ () => instance.dateAdd(arg, new Temporal.Duration()), - "String with UTC designator should not be valid as a PlainDate" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..adde5eb0eafa20b9b34a055aa1cdecc6bf40a6eb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.dateAdd(arg, new Temporal.Duration()), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.dateAdd(arg, new Temporal.Duration()), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b76329860a7568f8626bba91dd23eef248b7a202 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.dateAdd({ year: 2000, month: 5, day: 2, calendar }, new Temporal.Duration(1)); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c1bf52aa358ef3484eb5f0d53036259a7d19a9fe ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate( -+ result1, -+ 2016, 12, "M12", 31, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.dateAdd(arg, new Temporal.Duration()); -+TemporalHelpers.assertPlainDate( -+ result2, -+ 2016, 12, "M12", 31, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8f135256c93ce9c9830993a6c07567e4057034e9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateadd -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Calendar("iso8601"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.dateAdd(new Temporal.PlainDate(1976, 11, 18), new Temporal.Duration(1), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js -index 3197c54007cd081ad88890d86ce0802694e3c5da..df173c933f7e51e3acceed4f0d9a29207dacc68a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js -@@ -17,6 +17,11 @@ features: [Temporal, arrow-function] - const calendar = new Temporal.Calendar("iso8601"); - const date = new Temporal.PlainDate(2000, 5, 2, calendar); - const duration = new Temporal.Duration(3, 3, 0, 3); --assert.throws(RangeError, -- () => calendar.dateAdd(date, duration, { overflow: "other string" }), -- "Value for overflow not one of the allowed string values"); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => calendar.dateAdd(date, duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js -index 91e4a0a1ddc491e2a3f09617d40062a4ec6ed10b..8e1513b841c33d1fbd768854d77504ebdda081c3 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateAdd/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.dateAdd(arg); }, -+ () => instance.dateAdd(arg, new Temporal.Duration()), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..011851c75508dd3309a5646c3634742b15bcd97c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.datefromfields -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Calendar("iso8601"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.dateFromFields({ year: 1976, month: 11, day: 18 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js -index 6cc0d01724dcaaf828b49933eae78f30554ff08d..28e81de7ceb47536a260a8d1c950ca63031a7d0d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js -@@ -17,6 +17,12 @@ features: [Temporal, arrow-function] - ---*/ - - const calendar = new Temporal.Calendar("iso8601"); --assert.throws(RangeError, () => calendar.dateFromFields({ year: 2000, month: 5, day: 2 }, -- { overflow: "other string" }), -- "Value for overflow not one of the allowed string values"); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => calendar.dateFromFields({ year: 2000, month: 5, day: 2 }, -+ { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..343b06553b439d4dd7bcf1e44d783d1403edd467 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-number.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: A number is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result1 = instance.dateUntil(arg, new Temporal.PlainDate(1976, 11, 19)); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDate (first argument)"); -+const result2 = instance.dateUntil(new Temporal.PlainDate(1976, 11, 19), arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDate (second argument)"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 18)), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 18), arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate (second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ba6e4372f1f5e21d00e90cda453c5ed214df86d8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dateUntil(arg, new Temporal.PlainDate(1976, 11, 19)); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "leap second is a valid ISO string for calendar (first argument)"); -+const result2 = instance.dateUntil(new Temporal.PlainDate(1976, 11, 19), arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "leap second is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result3 = instance.dateUntil(arg, new Temporal.PlainDate(1976, 11, 19)); -+TemporalHelpers.assertDuration(result3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "leap second is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = instance.dateUntil(new Temporal.PlainDate(1976, 11, 19), arg); -+TemporalHelpers.assertDuration(result4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "leap second is a valid ISO string for calendar (nested property, second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a9fd223616341add6142e7b63d6c2bdcf759ca42 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-number.js -@@ -0,0 +1,56 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dateUntil(arg, new Temporal.PlainDate(1976, 11, 19)); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (first argument)"); -+const result2 = instance.dateUntil(new Temporal.PlainDate(1976, 11, 19), arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result3 = instance.dateUntil(arg, new Temporal.PlainDate(1976, 11, 19)); -+TemporalHelpers.assertDuration(result3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = instance.dateUntil(new Temporal.PlainDate(1976, 11, 19), arg); -+TemporalHelpers.assertDuration(result4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property, second argument)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (second argument)` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f23d15c3e58c0f6d1a00a66cacfd2bbbb40b5d23 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,52 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `${description} does not convert to a valid ISO string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `${description} does not convert to a valid ISO string (nested property, first argument)`); -+ assert.throws(RangeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `${description} does not convert to a valid ISO string (nested property, second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `${description} is not a valid property bag and does not convert to a string (nested property, first argument)`); -+ assert.throws(TypeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `${description} is not a valid property bag and does not convert to a string (nested property, second argument)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `nested undefined calendar property is always a RangeError (first argument)`); -+assert.throws(RangeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `nested undefined calendar property is always a RangeError (second argument)`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..773fe54515fc21982d8f5c0e2488288d469d80ce ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), -+ "reject minus zero as extended year (first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), -+ "reject minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a3ecc5814d1e8a397fae2ba2063638933359ac08 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-string-invalid.js -@@ -0,0 +1,67 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a %%%conversion_target%%% -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+const other = new Temporal.PlainDate(2020, 1, 1, instance); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(arg, other), -+ `"${arg}" should not be a valid ISO string for a PlainDate (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.dateUntil(other, arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate (second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..425b3007f9f0715c81ffdf6749cd3c11e673814f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-wrong-type.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `${description} does not convert to a valid ISO string (first argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.dateUntil(arg, new Temporal.PlainDate(1977, 11, 19)), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+ assert.throws(TypeError, () => instance.dateUntil(new Temporal.PlainDate(1977, 11, 19), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..419334f252e27c5e5322f0ff58a4796b8b792149 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.dateUntil({ year: 2000, month: 5, day: 2, calendar }, { year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 2); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f28efbb20ab4c0b609741cabc6ea64199a906187 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/leap-second.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+let result = instance.dateUntil(arg, new Temporal.PlainDate(2017, 1, 1)); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "leap second is a valid ISO string for PlainDate (first argument)"); -+result = instance.dateUntil(new Temporal.PlainDate(2017, 1, 1), arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "leap second is a valid ISO string for PlainDate (second argument)"); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+result = instance.dateUntil(arg, new Temporal.PlainDate(2017, 1, 1)); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "second: 60 is ignored in property bag for PlainDate (first argument)"); -+result = instance.dateUntil(new Temporal.PlainDate(2017, 1, 1), arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, "second: 60 is ignored in property bag for PlainDate (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1191edf29fe4014df99967f029af07a720e3c25b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dateuntil -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Calendar("iso8601"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.dateUntil(new Temporal.PlainDate(1976, 11, 18), new Temporal.PlainDate(1984, 5, 31), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js -index effb46112b56e9d48bc44c5fd943c644d361d4cc..b6c4ea0415a369e0ab76dcb9ec2ce6ac1b607c5f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dateUntil/year-zero.js -@@ -9,16 +9,23 @@ features: [Temporal] - - const calendar = new Temporal.Calendar("iso8601"); - const date = new Temporal.PlainDate(2000, 5, 2); --const bad = "-000000-03-14"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - --assert.throws( -- RangeError, -- () => calendar.dateUntil(bad, date), -- "cannot use minus zero as extended date (first argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => calendar.dateUntil(arg, date), -+ "cannot use minus zero as extended date (first argument)" -+ ); - --assert.throws( -- RangeError, -- () => calendar.dateUntil(date, bad), -- "cannot use minus zero as extended date (second argument)" --); -+ assert.throws( -+ RangeError, -+ () => calendar.dateUntil(date, arg), -+ "cannot use minus zero as extended date (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..61562a4da60fdb25f274939f616ab2fdacf82a71 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.day(arg); -+assert.sameValue(result, 18, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.day(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2bf759b8a513c7c980783ce3413db384a73811d5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.day(arg); -+assert.sameValue( -+ result1, -+ 18, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.day(arg); -+assert.sameValue( -+ result2, -+ 18, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..403ca7f06d54b0f668be83787b9ee1dc626359a2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.day(arg); -+assert.sameValue(result1, 18, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.day(arg); -+assert.sameValue(result2, 18, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.day(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.day(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..57c21e0ad9a960c1d683b2d7d02f114e73fee90d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.day(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.day(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.day(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.day(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.day(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cf64d454b0e3b9c5774a985c903fa43692b960a8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.day(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..95a33903b797f277918e8f13e0e67040b5c8737e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.day(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..78e120896ee6751340713357847e46931f87eae2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.day(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.day(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..80cd4dae2e15c3d22d655e40569eaf21424b4646 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.day({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..38c3e724ea69e49161fae09bc0bace9bf860483f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.day -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.day(arg); -+assert.sameValue( -+ result1, -+ 31, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.day(arg); -+assert.sameValue( -+ result2, -+ 31, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/year-zero.js -index 555a3f62c0f8730500c1e39d245b66f7e5d59f82..91daa874762f7d93aa0cc12ee0c778401745b95f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/day/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.day(arg); }, -+ () => instance.day(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..026642fdee44c3b8a9f99c9c2d38ddec9b4f23a7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.dayOfWeek(arg); -+assert.sameValue(result, 4, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.dayOfWeek(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fcd0ca2d74d644553dda7a8afa8dfa30ab061b6b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dayOfWeek(arg); -+assert.sameValue( -+ result1, -+ 4, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.dayOfWeek(arg); -+assert.sameValue( -+ result2, -+ 4, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bc4d21ea1c3e58e58ab99fb8f4e08deaf720d9ee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dayOfWeek(arg); -+assert.sameValue(result1, 4, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.dayOfWeek(arg); -+assert.sameValue(result2, 4, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.dayOfWeek(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.dayOfWeek(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..03f9f143440fe0230f0144da5647d421fdc7c8e5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.dayOfWeek(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.dayOfWeek(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.dayOfWeek(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.dayOfWeek(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.dayOfWeek(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..871fd744633bfd90f8ac6ac937f676baa9c2099b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.dayOfWeek(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..77d600bffdeba429f60feaedb8a4d21d626ced42 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.dayOfWeek(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d44886ea32de3db4ea569faaf941d5c4a2e64fcb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.dayOfWeek(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.dayOfWeek(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e67d34fdcc09d555ca5fc41706c16fd6e07d4c10 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.dayOfWeek({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4d78c15bbc2b4d6da6544d363555a2ea131fa0ef ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofweek -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.dayOfWeek(arg); -+assert.sameValue( -+ result1, -+ 6, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.dayOfWeek(arg); -+assert.sameValue( -+ result2, -+ 6, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js -index 18ab7a6827b4eb1281d3f995fa60ac34c8a75902..0d887a397803b55dbdf0934415159f80d5949e79 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfWeek/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.dayOfWeek(arg); }, -+ () => instance.dayOfWeek(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0794df0f4c0a1f242c49412b9bc654fcc2a33af4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.dayOfYear(arg); -+assert.sameValue(result, 323, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.dayOfYear(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d51b2c0dcb5107bd8aa59ed393455eba297cb0b6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dayOfYear(arg); -+assert.sameValue( -+ result1, -+ 323, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.dayOfYear(arg); -+assert.sameValue( -+ result2, -+ 323, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f0447e0c1ce651133efbd4cfcd33b9910b83ab6b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.dayOfYear(arg); -+assert.sameValue(result1, 323, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.dayOfYear(arg); -+assert.sameValue(result2, 323, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.dayOfYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.dayOfYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f7ecf1684eb01b0b517b832d2ff81b2a4a7fb422 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.dayOfYear(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.dayOfYear(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.dayOfYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.dayOfYear(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.dayOfYear(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7335b890c4d19b68097e44539d3b5d487c22bc56 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.dayOfYear(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8768faa638164a09a92df4c421b99dadf2d55eab ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.dayOfYear(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e906d79bee0192ea2604a7767731afb432df7c52 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.dayOfYear(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.dayOfYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2ebc1c96f3044cfb6d3353a0b2bd465e67bafe29 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.dayOfYear({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f41dfb5f7361b0fb62ae898fdacf9759b284e08d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.dayofyear -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.dayOfYear(arg); -+assert.sameValue( -+ result1, -+ 366, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.dayOfYear(arg); -+assert.sameValue( -+ result2, -+ 366, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js -index e31b214116910cf98dd92ff7c71f56c57f179f24..6fec20e46916ea88d761be7f17d5032c0fac46bb 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/dayOfYear/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.dayOfYear(arg); }, -+ () => instance.dayOfYear(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5020046bf4ff6dc367770773bb04fef4f5a60283 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.daysInMonth(arg); -+assert.sameValue(result, 30, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.daysInMonth(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..763ae9c73ddf0ece8a8cc50e2e2e670a4f57f9f1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.daysInMonth(arg); -+assert.sameValue( -+ result1, -+ 30, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.daysInMonth(arg); -+assert.sameValue( -+ result2, -+ 30, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2987dc0b11de8d8d60700044667858693597e983 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.daysInMonth(arg); -+assert.sameValue(result1, 30, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.daysInMonth(arg); -+assert.sameValue(result2, 30, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.daysInMonth(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.daysInMonth(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9876bb18a9ccc259973869c6a809299aed5dc970 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.daysInMonth(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.daysInMonth(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.daysInMonth(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.daysInMonth(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.daysInMonth(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1f273d6d431f2c1cb812b4f1e84bbd4b122eccc8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.daysInMonth(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..97ecac0fa8f1456ca7547fb7f7194f3f9ce82495 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.daysInMonth(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..33ad7cc3b82c4f1c6927a87eac9623c6483d456f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.daysInMonth(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.daysInMonth(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..86e25eb109a33cd7f02e751ae17764809cfec2aa ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.daysInMonth({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3274f449169d566ff175d0a7a9b8dc4dfda665b9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinmonth -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.daysInMonth(arg); -+assert.sameValue( -+ result1, -+ 31, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.daysInMonth(arg); -+assert.sameValue( -+ result2, -+ 31, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js -index c2c6204ed693896a9cf3af2a084e19cec2424ee9..d4a5d70149b83eb646dfc3a8b2a3c1f6a64d2c77 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInMonth/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.daysInMonth(arg); }, -+ () => instance.daysInMonth(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..889f44f8ba9c7f2101b0f0129ea0f590c49196d0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.daysInWeek(arg); -+assert.sameValue(result, 7, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.daysInWeek(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4d6d407a78ada5b3eed5ed7c3f4451f0f48ec2c2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.daysInWeek(arg); -+assert.sameValue( -+ result1, -+ 7, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.daysInWeek(arg); -+assert.sameValue( -+ result2, -+ 7, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..473cd6a4333f375f16b0bf95085b290b0b92a4e8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.daysInWeek(arg); -+assert.sameValue(result1, 7, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.daysInWeek(arg); -+assert.sameValue(result2, 7, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.daysInWeek(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.daysInWeek(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a0179adc03915257ab362a21b04918902a315135 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.daysInWeek(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.daysInWeek(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.daysInWeek(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.daysInWeek(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.daysInWeek(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0c27c02bfaa119cd7a71b4e5650d33c98823c0ad ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.daysInWeek(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9c98bd32957214d3d61fad41564d8b8d28471259 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.daysInWeek(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c08d2bf1330c9bb3355447186376a4af04671c45 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.daysInWeek(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.daysInWeek(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..68e86ffc1e568221abcf2d92211b51435771a181 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.daysInWeek({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b88af835e500b05d993ed98264b2e9230e1e5e7f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinweek -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.daysInWeek(arg); -+assert.sameValue( -+ result1, -+ 7, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.daysInWeek(arg); -+assert.sameValue( -+ result2, -+ 7, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js -index b852ef7814074e422bb92f182106bfc01dbe6222..67caad3a5e654a75d4ae2ce2c4a6e0b2cea33df7 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInWeek/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.daysInWeek(arg); }, -+ () => instance.daysInWeek(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..84492ddf2bf7c1dbef4342e103ebb5950181a926 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.daysInYear(arg); -+assert.sameValue(result, 366, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.daysInYear(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..027cf9da24438e4d86187c0eaf2191504ce8d18e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.daysInYear(arg); -+assert.sameValue( -+ result1, -+ 366, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.daysInYear(arg); -+assert.sameValue( -+ result2, -+ 366, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..de1bdcfccd4cdae6d9e8f45a86d422da6bc28431 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.daysInYear(arg); -+assert.sameValue(result1, 366, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.daysInYear(arg); -+assert.sameValue(result2, 366, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.daysInYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.daysInYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..97283c0b3ffbc5e8dcbfe77bf634bd66561a58c5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.daysInYear(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.daysInYear(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.daysInYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.daysInYear(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.daysInYear(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..62a9e6d18e945798250936a67b1a864d3f30c8de ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.daysInYear(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8d92ef970d0d62c1eb9a329e23942144bf62f9a7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.daysInYear(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c57754bcbfeeb5c67c449a59d968e6a82e5cd86e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.daysInYear(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.daysInYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..20b64607d61e1d493445c488d2bc60f7b982f92e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.daysInYear({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ab2f0fb25b53e74317b3eda687bf889a48ca720a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.daysinyear -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.daysInYear(arg); -+assert.sameValue( -+ result1, -+ 366, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.daysInYear(arg); -+assert.sameValue( -+ result2, -+ 366, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js -index 4c226015b2203fcac0cbc116da12fd12855e3b6b..9bb94a19d3ceefbeb736403f24994195edbec8db 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/daysInYear/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.daysInYear(arg); }, -+ () => instance.daysInYear(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1b9f0dde66aa777edf0c1d400c3b39cf195e0b0f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.inLeapYear(arg); -+assert.sameValue(result, true, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.inLeapYear(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a776948093e4d8488a3724a5b14ab7f408144f2e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.inLeapYear(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.inLeapYear(arg); -+assert.sameValue( -+ result2, -+ true, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f3ba12a322c0313f4135c2b757226129c41779c3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.inLeapYear(arg); -+assert.sameValue(result1, true, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.inLeapYear(arg); -+assert.sameValue(result2, true, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.inLeapYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.inLeapYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7993e2e1bfa18316b05ab02ef851b7db5e98c41e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.inLeapYear(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.inLeapYear(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.inLeapYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.inLeapYear(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.inLeapYear(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4a5b92aea81b32a768f6bd5eeba913367cfde0b5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.inLeapYear(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6a1c1d5d6b70c0016fd0b1d28a1b9ffde9d3af95 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.inLeapYear(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1c4272fbd72f849fd4bc8e4b1388b9a546e86f98 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: An ISO 8601 date string should be converted as input -+info: | -+ 4. If Type(temporalDateLike) is not Object or temporalDateLike does not have an [[InitializedTemporalDate]] or [[InitializedTemporalYearMonth]] internal slot, then -+ a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike). -+ 5. Return ! IsISOLeapYear(temporalDateLike.[[ISOYear]]). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+assert.sameValue(cal.inLeapYear("2019-03-18"), false); -+assert.sameValue(cal.inLeapYear("2020-03-18"), true); -+ -+assert.sameValue(cal.inLeapYear("+002023-03-18"), false); -+assert.sameValue(cal.inLeapYear("+002024-03-18"), true); -+ -+assert.sameValue(cal.inLeapYear("2019-03-18T13:00:00+00:00[UTC]"), false); -+assert.sameValue(cal.inLeapYear("2020-12-31T23:59:59+00:00[UTC]"), true); -+ -+assert.sameValue(cal.inLeapYear("+002023-03-18T13:00:00+00:00[UTC]"), false); -+assert.sameValue(cal.inLeapYear("+002024-03-18T13:00:00+00:00[UTC]"), true); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..02c8477cbf185ec24f18316232e4b769925aa86e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.inLeapYear(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.inLeapYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/basic.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/basic.js -index 4359c4c8d44bc7714b3c9f08b91ccbf54259bdfb..7e8d3cf048be2cc4081c2df673328539d4b2fe4f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/basic.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/basic.js -@@ -8,10 +8,19 @@ features: [Temporal] - ---*/ - - const iso = Temporal.Calendar.from("iso8601"); --const res = false; --assert.sameValue(iso.inLeapYear(Temporal.PlainDate.from("1994-11-05")), res, "PlainDate"); --assert.sameValue(iso.inLeapYear(Temporal.PlainDateTime.from("1994-11-05T08:15:30")), res, "PlainDateTime"); --assert.sameValue(iso.inLeapYear(Temporal.PlainYearMonth.from("1994-11")), res, "PlainYearMonth"); -+let res = false; -+ -+assert.sameValue(iso.inLeapYear(new Temporal.PlainDate(1994, 11, 5)), res, "PlainDate"); -+assert.sameValue(iso.inLeapYear(new Temporal.PlainDateTime(1994, 11, 5, 8, 15, 30)), res, "PlainDateTime"); -+assert.sameValue(iso.inLeapYear(new Temporal.PlainYearMonth(1994, 11)), res, "PlainYearMonth"); - assert.sameValue(iso.inLeapYear({ year: 1994, month: 11, day: 5 }), res, "property bag"); - assert.sameValue(iso.inLeapYear("1994-11-05"), res, "string"); -+ -+res = true; -+assert.sameValue(iso.inLeapYear(new Temporal.PlainDate(1996, 7, 15)), res, "PlainDate in leap year"); -+assert.sameValue(iso.inLeapYear(new Temporal.PlainDateTime(1996, 7, 15, 5, 30, 13)), res, "PlainDateTime in leap year"); -+assert.sameValue(iso.inLeapYear(new Temporal.PlainYearMonth(1996, 7)), res, "PlainYearMonth in leap year"); -+assert.sameValue(iso.inLeapYear({ year: 1996, month: 7, day: 15 }), res, "property bag in leap year"); -+assert.sameValue(iso.inLeapYear("1996-07-15"), res, "string in leap year"); -+ - assert.throws(TypeError, () => iso.inLeapYear({ year: 2000 }), "property bag with missing properties"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/branding.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/branding.js -index 8b3e5de8a2f51beb0c45316d0973d84c350424d4..003cf490ab024bec9e2f1a6dfc97d2e31803707d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/branding.js -@@ -11,12 +11,14 @@ const inLeapYear = Temporal.Calendar.prototype.inLeapYear; - - assert.sameValue(typeof inLeapYear, "function"); - --assert.throws(TypeError, () => inLeapYear.call(undefined), "undefined"); --assert.throws(TypeError, () => inLeapYear.call(null), "null"); --assert.throws(TypeError, () => inLeapYear.call(true), "true"); --assert.throws(TypeError, () => inLeapYear.call(""), "empty string"); --assert.throws(TypeError, () => inLeapYear.call(Symbol()), "symbol"); --assert.throws(TypeError, () => inLeapYear.call(1), "1"); --assert.throws(TypeError, () => inLeapYear.call({}), "plain object"); --assert.throws(TypeError, () => inLeapYear.call(Temporal.Calendar), "Temporal.Calendar"); --assert.throws(TypeError, () => inLeapYear.call(Temporal.Calendar.prototype), "Temporal.Calendar.prototype"); -+const arg = new Temporal.PlainDate(2021, 3, 4); -+ -+assert.throws(TypeError, () => inLeapYear.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => inLeapYear.call(null, arg), "null"); -+assert.throws(TypeError, () => inLeapYear.call(true, arg), "true"); -+assert.throws(TypeError, () => inLeapYear.call("", arg), "empty string"); -+assert.throws(TypeError, () => inLeapYear.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => inLeapYear.call(1, arg), "1"); -+assert.throws(TypeError, () => inLeapYear.call({}, arg), "plain object"); -+assert.throws(TypeError, () => inLeapYear.call(Temporal.Calendar, arg), "Temporal.Calendar"); -+assert.throws(TypeError, () => inLeapYear.call(Temporal.Calendar.prototype, arg), "Temporal.Calendar.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2b89a6b531aff8aba93e5c87735c0ba264066470 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.inLeapYear({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e64bef3048b9088fe538ca39828ff9644d1de94c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.inleapyear -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.inLeapYear(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.inLeapYear(arg); -+assert.sameValue( -+ result2, -+ true, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js -index 8aeb7c2a7618e6d5f5402c9ebde413f443d38c23..f96bac46a4b6b9e1b7df4d360d716279623b4e5e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/inLeapYear/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.inLeapYear(arg); }, -+ () => instance.inLeapYear(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/basic.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..72483362e8b8fa040a45d9b21f329247cef73ba3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/basic.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.mergefields -+description: > -+ Temporal.Calendar.prototype.mergeFields will merge own data properties on its -+ arguments -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. Set fields to ? ToObject(fields). -+ 5. Set additionalFields to ? ToObject(additionalFields). -+ 6. Return ? DefaultMergeFields(fields, additionalFields). -+features: [Temporal] -+includes: [deepEqual.js] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2 }, { c: 3, d: 4 }), -+ { a: 1, b: 2, c: 3, d: 4 }, -+ "properties are merged" -+); -+ -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2 }, { b: 3, c: 4 }), -+ { a: 1, b: 3, c: 4 }, -+ "property in additionalFields should overwrite one in fields" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/iso8601-calendar-month-monthCode.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/iso8601-calendar-month-monthCode.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e322a791e13d2ef5375b2cd91eb6ae95e34fb6bc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/iso8601-calendar-month-monthCode.js -@@ -0,0 +1,99 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.mergefields -+description: > -+ The default mergeFields algorithm from the ISO 8601 calendar should correctly -+ merge the month and monthCode properties -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. Set fields to ? ToObject(fields). -+ 5. Set additionalFields to ? ToObject(additionalFields). -+ 6. Return ? DefaultMergeFields(fields, additionalFields). -+features: [Temporal] -+includes: [deepEqual.js] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7 }, { b: 3, c: 4 }), -+ { a: 1, b: 3, c: 4, month: 7 }, -+ "month is copied from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, monthCode: "M08" }, { b: 3, c: 4 }), -+ { a: 1, b: 3, c: 4, monthCode: "M08" }, -+ "monthCode is copied from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7, monthCode: "M08" }, { b: 3, c: 4 }), -+ { a: 1, b: 3, c: 4, month: 7, monthCode: "M08" }, -+ "both month and monthCode are copied from fields, no validation is performed" -+); -+ -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2 }, { b: 3, c: 4, month: 5 }), -+ { a: 1, b: 3, c: 4, month: 5 }, -+ "month is copied from additionalFields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2 }, { b: 3, c: 4, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, monthCode: "M06" }, -+ "monthCode is copied from additionalFields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2 }, { b: 3, c: 4, month: 5, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, month: 5, monthCode: "M06" }, -+ "both month and monthCode are copied from additionalFields, no validation is performed" -+); -+ -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7 }, { b: 3, c: 4, month: 5 }), -+ { a: 1, b: 3, c: 4, month: 5 }, -+ "month from additionalFields overrides month from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, monthCode: "M07" }, { b: 3, c: 4, monthCode: "M05" }), -+ { a: 1, b: 3, c: 4, monthCode: "M05" }, -+ "monthCode from additionalFields overrides monthCode from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, monthCode: "M07" }, { b: 3, c: 4, month: 6 }), -+ { a: 1, b: 3, c: 4, month: 6 }, -+ "month's presence on additionalFields blocks monthCode from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7 }, { b: 3, c: 4, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, monthCode: "M06"}, -+ "monthCode's presence on additionalFields blocks month from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7, monthCode: "M08" },{ b: 3, c: 4, month: 5 }), -+ { a: 1, b: 3, c: 4, month: 5 }, -+ "month's presence on additionalFields blocks both month and monthCode from fields" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7, monthCode: "M08" }, { b: 3, c: 4, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, monthCode: "M06" }, -+ "monthCode's presence on additionalFields blocks both month and monthCode from fields" -+); -+ -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7 }, { b: 3, c: 4, month: 5, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, month: 5, monthCode: "M06" }, -+ "both month and monthCode are copied from additionalFields even when fields has month" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, monthCode: "M07" }, { b: 3, c: 4, month: 5, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, month: 5, monthCode: "M06" }, -+ "both month and monthCode are copied from additionalFields even when fields has monthCode" -+); -+assert.deepEqual( -+ cal.mergeFields({ a: 1, b: 2, month: 7, monthCode: "M08" }, { b: 3, c: 4, month: 5, monthCode: "M06" }), -+ { a: 1, b: 3, c: 4, month: 5, monthCode: "M06" }, -+ "both month and monthCode are copied from additionalFields even when fields has both month and monthCode" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/non-string-properties.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/non-string-properties.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2908be90ba81c443ceeda5823ae96813d994540c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/mergeFields/non-string-properties.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.mergefields -+description: Only string keys from the arguments are merged -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. Set fields to ? ToObject(fields). -+ 5. Set additionalFields to ? ToObject(additionalFields). -+ 6. Return ? DefaultMergeFields(fields, additionalFields). -+features: [Temporal] -+includes: [deepEqual.js] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+assert.deepEqual( -+ cal.mergeFields({ 1: 2 }, { 3: 4 }), -+ { "1": 2, "3": 4 }, -+ "number keys are actually string keys and are merged as such" -+); -+assert.deepEqual( -+ cal.mergeFields({ 1n: 2 }, { 2n: 4 }), -+ { "1": 2, "2": 4 }, -+ "bigint keys are actually string keys and are merged as such" -+); -+ -+const foo = Symbol("foo"); -+const bar = Symbol("bar"); -+assert.deepEqual(cal.mergeFields({ [foo]: 1 }, { [bar]: 2 }), {}, "symbol keys are not merged"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f63c215e3d25d0b73ef15f7ddffbd233f72689c7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.month(arg); -+assert.sameValue(result, 11, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.month(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..313b31f512fde0c16758e418771e448de41b2659 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.month(arg); -+assert.sameValue( -+ result1, -+ 11, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.month(arg); -+assert.sameValue( -+ result2, -+ 11, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1d8351bc8d33e0cda22cd9899e7c4f86611b4a86 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.month(arg); -+assert.sameValue(result1, 11, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.month(arg); -+assert.sameValue(result2, 11, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.month(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.month(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1d5ac9c40f124cf4af68d15752519e874798f331 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.month(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.month(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.month(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.month(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.month(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1d41054f50a6bfdd1b2887be485e19b373cebb72 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.month(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e314a1d01e3b899c52e3d46d3da21c912c588dfd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.month(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..deede47c06b1ec86aebbfc288765e6c5c22bc8ff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.month(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.month(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..77c6e75f82942daf6ac47b35ec0ac43e4bc8a2eb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.month({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..61198fe9f4f14ba2e2b825f080086295bb7c17c9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.month -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.month(arg); -+assert.sameValue( -+ result1, -+ 12, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.month(arg); -+assert.sameValue( -+ result2, -+ 12, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/year-zero.js -index f42751175addb13f466b22566c79f55d9b71c676..b54957b1c106febd5ff3783abb3e125958e4af37 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/month/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.month(arg); }, -+ () => instance.month(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..dfd779c38bc47aa2a0da8d66635b57e0227e952b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.monthCode(arg); -+assert.sameValue(result, "M11", "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.monthCode(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7c8eb3e6cfb17145ce8a43c5e80a599315a14a29 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.monthCode(arg); -+assert.sameValue( -+ result1, -+ "M11", -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.monthCode(arg); -+assert.sameValue( -+ result2, -+ "M11", -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d7ac6bebdc880757e98d949589932065c251d45b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.monthCode(arg); -+assert.sameValue(result1, "M11", "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.monthCode(arg); -+assert.sameValue(result2, "M11", "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.monthCode(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.monthCode(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ffdeeb4269ff60f8c544e76ef5dd4966f8cc3bba ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.monthCode(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.monthCode(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.monthCode(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.monthCode(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.monthCode(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1f385c2203e00aad6e89a5659260948210d0f584 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.monthCode(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3994dee3bc9341488cc62d9c7a440ab6915be735 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.monthCode(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..939933db94412df0f74aa10e2fb3cccbed8e6584 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.monthCode(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.monthCode(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..18111f2f165f586390e8ac201eca3b315fd3be77 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.monthCode({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..69c34c942be330398a672705f9df414613543be6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthcode -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.monthCode(arg); -+assert.sameValue( -+ result1, -+ "M12", -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.monthCode(arg); -+assert.sameValue( -+ result2, -+ "M12", -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js -index fc81c5348e26d8021722741d17cbbdad79398d16..5ad4d0dde748616b3ba6651bcfd9d96b31978ed9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthCode/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.monthCode(arg); }, -+ () => instance.monthCode(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/basic.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e79389fe36e011a64457581148dbd760c75f75cf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/basic.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: Temporal.Calendar.prototype.monthDayFromFields will return correctly with valid data. -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOMonthDayFromFields(fields, options). -+ 7. Return ? CreateTemporalMonthDay(result.[[Month]], result.[[Day]], calendar, result.[[ReferenceISOYear]]). -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+let result = cal.monthDayFromFields({ year: 2021, month: 7, day: 3 }); -+TemporalHelpers.assertPlainMonthDay(result, "M07", 3, "month 7, day 3, with year"); -+result = cal.monthDayFromFields({ year: 2021, month: 12, day: 31 }); -+TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "month 12, day 31, with year"); -+result = cal.monthDayFromFields({ monthCode: "M07", day: 3 }); -+TemporalHelpers.assertPlainMonthDay(result, "M07", 3, "monthCode M07, day 3"); -+result = cal.monthDayFromFields({ monthCode: "M12", day: 31 }); -+TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "monthCode M12, day 31"); -+ -+["constrain", "reject"].forEach(function (overflow) { -+ const opt = { overflow }; -+ result = cal.monthDayFromFields({ year: 2021, month: 7, day: 3 }, opt); -+ TemporalHelpers.assertPlainMonthDay(result, "M07", 3, "month 7, day 3, with year"); -+ result = cal.monthDayFromFields({ year: 2021, month: 12, day: 31 }, opt); -+ TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "month 12, day 31, with year"); -+ result = cal.monthDayFromFields({ monthCode: "M07", day: 3 }, opt); -+ TemporalHelpers.assertPlainMonthDay(result, "M07", 3, "monthCode M07, day 3"); -+ result = cal.monthDayFromFields({ monthCode: "M12", day: 31 }, opt); -+ TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "monthCode M12, day 31"); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-missing-properties.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-missing-properties.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d642ab4302e2a2400425c58b7f951a1919d0f022 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-missing-properties.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: Temporal.Calendar.prototype.monthDayFromFields will throw TypeError with incorrect input data type. -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOMonthDayFromFields(fields, options). -+ 7. Return ? CreateTemporalMonthDay(result.[[Month]], result.[[Day]], calendar, result.[[ReferenceISOYear]]). -+features: [Temporal] -+---*/ -+ -+let cal = new Temporal.Calendar("iso8601") -+ -+assert.throws(TypeError, () => cal.monthDayFromFields({}), "at least one correctly spelled property is required"); -+assert.throws(TypeError, () => cal.monthDayFromFields({ monthCode: "M12" }), "day is required with monthCode"); -+assert.throws(TypeError, () => cal.monthDayFromFields({ year: 2021, month: 12 }), "day is required with year and month"); -+assert.throws(TypeError, () => cal.monthDayFromFields({ month: 1, day: 17 }), "year is required if month is present"); -+assert.throws(TypeError, () => cal.monthDayFromFields({ year: 2021, day: 17 }), "either month or monthCode is required"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-not-object.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-not-object.js -index f8400f718544e72263951b8e53e254114ac53d23..88c229f074c9c7e8a3b89b20ecb74037199adbf6 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-not-object.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/fields-not-object.js -@@ -7,7 +7,7 @@ description: Throw a TypeError if the fields is not an object - features: [Symbol, Temporal] - ---*/ - --const tests = [undefined, null, false, "string", Symbol("sym"), Math.PI, 42n]; -+const tests = [undefined, null, true, false, "string", Symbol("sym"), Math.PI, Infinity, NaN, 42n]; - const iso = Temporal.Calendar.from("iso8601"); - for (const fields of tests) { - assert.throws(TypeError, () => iso.monthDayFromFields(fields, {})); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/monthcode-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/monthcode-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..29e5c4f0984d78d362fa0993780becb57d4e0b81 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/monthcode-invalid.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: Throw RangeError for an out-of-range, conflicting, or ill-formed monthCode -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOMonthDayFromFields(fields, options). -+ 7. Return ? CreateTemporalMonthDay(result.[[Month]], result.[[Day]], calendar, result.[[ReferenceISOYear]]). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+["m1", "M1", "m01"].forEach((monthCode) => { -+ assert.throws(RangeError, () => cal.monthDayFromFields({ monthCode, day: 17 }), -+ `monthCode '${monthCode}' is not well-formed`); -+}); -+ -+assert.throws(RangeError, () => cal.monthDayFromFields({ year: 2021, month: 12, monthCode: "M11", day: 17 }), -+ "monthCode and month conflict"); -+ -+["M00", "M19", "M99", "M13"].forEach((monthCode) => { -+ assert.throws(RangeError, () => cal.monthDayFromFields({ monthCode, day: 17 }), -+ `monthCode '${monthCode}' is not valid for ISO 8601 calendar`); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f19f381f5d0b3a861788d98ef9e1bb6024e12108 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Calendar("iso8601"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.monthDayFromFields({ monthCode: "M12", day: 15 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-constrain.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-constrain.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0ad71fe6d07af2b0097fe23762bfecde4efeec1e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-constrain.js -@@ -0,0 +1,91 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: Temporal.Calendar.prototype.monthDayFromFields will return correctly with data and overflow set to 'constrain'. -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOMonthDayFromFields(fields, options). -+ 7. Return ? CreateTemporalMonthDay(result.[[Month]], result.[[Day]], calendar, result.[[ReferenceISOYear]]). -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+const opt = { overflow: "constrain" }; -+ -+let result = cal.monthDayFromFields({ year: 2021, month: 1, day: 133 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M01", 31, "day is constrained to 31 in month 1"); -+result = cal.monthDayFromFields({ year: 2021, month: 2, day: 133 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M02", 28, "day is constrained to 28 in month 2 (year 2021)"); -+result = cal.monthDayFromFields({ year: 2021, month: 3, day: 9033 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M03", 31, "day is constrained to 31 in month 3"); -+result = cal.monthDayFromFields({ year: 2021, month: 4, day: 50 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M04", 30, "day is constrained to 30 in month 4"); -+result = cal.monthDayFromFields({ year: 2021, month: 5, day: 77 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M05", 31, "day is constrained to 31 in month 5"); -+result = cal.monthDayFromFields({ year: 2021, month: 6, day: 33 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M06", 30, "day is constrained to 30 in month 6"); -+result = cal.monthDayFromFields({ year: 2021, month: 7, day: 33 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M07", 31, "day is constrained to 31 in month 7"); -+result = cal.monthDayFromFields({ year: 2021, month: 8, day: 300 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M08", 31, "day is constrained to 31 in month 8"); -+result = cal.monthDayFromFields({ year: 2021, month: 9, day: 400 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M09", 30, "day is constrained to 30 in month 9"); -+result = cal.monthDayFromFields({ year: 2021, month: 10, day: 400 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M10", 31, "day is constrained to 31 in month 10"); -+result = cal.monthDayFromFields({ year: 2021, month: 11, day: 400 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M11", 30, "day is constrained to 30 in month 11"); -+result = cal.monthDayFromFields({ year: 2021, month: 12, day: 500 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "day is constrained to 31 in month 12"); -+ -+assert.throws( -+ RangeError, -+ () => cal.monthDayFromFields({ year: 2021, month: -99999, day: 1 }, opt), -+ "negative month -99999 is out of range even with overflow constrain" -+) -+assert.throws( -+ RangeError, -+ () => cal.monthDayFromFields({ year: 2021, month: -1, day: 1 }, opt), -+ "negative month -1 is out of range even with overflow constrain" -+) -+assert.throws( -+ RangeError, -+ () => cal.monthDayFromFields({ year: 2021, month: 0, day: 1 }, opt), -+ "month zero is out of range even with overflow constrain" -+) -+ -+result = cal.monthDayFromFields({ year: 2021, month: 13, day: 1 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M12", 1, "month 13 is constrained to 12"); -+result = cal.monthDayFromFields({ year: 2021, month: 999999, day: 500 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "month 999999 is constrained to 12 and day constrained to 31"); -+ -+result = cal.monthDayFromFields({ monthCode: "M01", day: 133 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M01", 31, "day is constrained to 31 in monthCode M01"); -+result = cal.monthDayFromFields({ monthCode: "M02", day: 133 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M02", 29, "day is constrained to 29 in monthCode M02"); -+result = cal.monthDayFromFields({ monthCode: "M03", day: 9033 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M03", 31, "day is constrained to 31 in monthCode M03"); -+result = cal.monthDayFromFields({ monthCode: "M04", day: 50 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M04", 30, "day is constrained to 30 in monthCode M04"); -+result = cal.monthDayFromFields({ monthCode: "M05", day: 77 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M05", 31, "day is constrained to 31 in monthCode M05"); -+result = cal.monthDayFromFields({ monthCode: "M06", day: 33 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M06", 30, "day is constrained to 30 in monthCode M06"); -+result = cal.monthDayFromFields({ monthCode: "M07", day: 33 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M07", 31, "day is constrained to 31 in monthCode M07"); -+result = cal.monthDayFromFields({ monthCode: "M08", day: 300 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M08", 31, "day is constrained to 31 in monthCode M08"); -+result = cal.monthDayFromFields({ monthCode: "M09", day: 400 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M09", 30, "day is constrained to 30 in monthCode M09"); -+result = cal.monthDayFromFields({ monthCode: "M10", day: 400 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M10", 31, "day is constrained to 31 in monthCode M10"); -+result = cal.monthDayFromFields({ monthCode: "M11", day: 400 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M11", 30, "day is constrained to 30 in monthCode M11"); -+result = cal.monthDayFromFields({ monthCode: "M12", day: 500 }, opt); -+TemporalHelpers.assertPlainMonthDay(result, "M12", 31, "day is constrained to 31 in monthCode M12"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-invalid-string.js -index 2e87dc1a67aa942c3ddc8758e26bd8e326bcfb8b..6844c7e3d2bbbd40a5c0bddb6763dfc69b101726 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-invalid-string.js -@@ -17,4 +17,11 @@ features: [Temporal] - ---*/ - - const calendar = new Temporal.Calendar("iso8601"); --assert.throws(RangeError, () => calendar.monthDayFromFields({ year: 2000, month: 5, day: 2 }, { overflow: "other string" })); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => calendar.monthDayFromFields({ year: 2000, month: 5, day: 2 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-reject.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-reject.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5db608b3359bab403ded023022d9d5ce3116ee91 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/overflow-reject.js -@@ -0,0 +1,64 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: Throw RangeError for input data out of range with overflow reject -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOMonthDayFromFields(fields, options). -+ 7. Return ? CreateTemporalMonthDay(result.[[Month]], result.[[Day]], calendar, result.[[ReferenceISOYear]]). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+[-1, 0, 13, 9995].forEach((month) => { -+ assert.throws( -+ RangeError, -+ () => cal.monthDayFromFields({year: 2021, month, day: 5}, { overflow: "reject" }), -+ `Month ${month} is out of range for 2021 with overflow: reject` -+ ); -+}); -+ -+[-1, 0, 32, 999].forEach((day) => { -+ assert.throws( -+ RangeError, -+ () => cal.monthDayFromFields({ year: 2021, month: 12, day }, { overflow: "reject" }), -+ `Day ${day} is out of range for 2021-12 with overflow: reject` -+ ); -+ assert.throws( -+ RangeError, -+ () => cal.monthDayFromFields({ monthCode: "M12", day }, { overflow: "reject" }), -+ `Day ${day} is out of range for 2021-M12 with overflow: reject` -+ ); -+}); -+ -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M01", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M01"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M02", day: 30 }, { overflow: "reject" }), "Day 30 is out of range for monthCode M02"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M03", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M03"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M04", day: 31 }, { overflow: "reject" }), "Day 31 is out of range for monthCode M04"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M05", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M05"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M06", day: 31 }, { overflow: "reject" }), "Day 31 is out of range for monthCode M06"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M07", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M07"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M08", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M08"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M09", day: 31 }, { overflow: "reject" }), "Day 31 is out of range for monthCode M09"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M10", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M10"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M11", day: 31 }, { overflow: "reject" }), "Day 31 is out of range for monthCode M11"); -+assert.throws(RangeError, () => cal.monthDayFromFields( -+ { monthCode: "M12", day: 32 }, { overflow: "reject" }), "Day 32 is out of range for monthCode M12"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/reference-year-1972.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/reference-year-1972.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e0b942007d6efd2896fefb3b546f46b628441ac4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthDayFromFields/reference-year-1972.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthdayfromfields -+description: Use a leap year as the reference year if monthCode is given -+info: | -+ sec-temporal-isomonthdayfromfields: -+ 12. If _monthCode_ is *undefined*, then -+ a. Let _result_ be ? RegulateISODate(_year_, _month_, _day_, _overflow_). -+ 13. Else, -+ a. Let _result_ be ? RegulateISODate(_referenceISOYear_, _month_, _day_, _overflow_). -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+let result = cal.monthDayFromFields({ year: 2021, monthCode: "M02", day: 29 }); -+TemporalHelpers.assertPlainMonthDay(result, "M02", 29, "year is ignored and reference year should be a leap year if monthCode is given"); -+ -+result = cal.monthDayFromFields({ year: 2021, month: 2, day: 29 }, { overflow: "constrain" }); -+TemporalHelpers.assertPlainMonthDay(result, "M02", 28, "year should not be ignored if monthCode is not given"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9e2513cc767316378df15ebc473171065214ae11 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.monthsInYear(arg); -+assert.sameValue(result, 12, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.monthsInYear(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..001b3cde215adedf5265f4b79eac9ec38aa1208b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.monthsInYear(arg); -+assert.sameValue( -+ result1, -+ 12, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.monthsInYear(arg); -+assert.sameValue( -+ result2, -+ 12, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b2ce9cd8d5604750977f3e9e687457b695b9ae04 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.monthsInYear(arg); -+assert.sameValue(result1, 12, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.monthsInYear(arg); -+assert.sameValue(result2, 12, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.monthsInYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.monthsInYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..00d73115d29d823b53c00adcdf9ac93ca016f431 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.monthsInYear(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.monthsInYear(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.monthsInYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.monthsInYear(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.monthsInYear(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1d4af99f7ba72b6c5a7b652334ed30bcabe0c35e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.monthsInYear(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..811a6e00cb30deadd50277426f5c9767268c3f0c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.monthsInYear(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9a8748d8771030167f4c3fa9c7f45605c814bb68 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-string.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: An ISO 8601 date string should be converted as input -+info: | -+ a. Perform ? ToTemporalDate(temporalDateLike). -+ 5. Return 12𝔽. -+features: [Temporal] -+---*/ -+ -+let cal = new Temporal.Calendar("iso8601"); -+ -+assert.sameValue(cal.monthsInYear("3456-12-20"), 12); -+assert.sameValue(cal.monthsInYear("+000998-01-28"), 12); -+assert.sameValue(cal.monthsInYear("3456-12-20T03:04:05+00:00[UTC]"), 12); -+assert.sameValue(cal.monthsInYear("+000998-01-28T03:04:05+00:00[UTC]"), 12); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..827b460413bc5935a28dc6f6ef7cd921383531f1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.monthsInYear(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.monthsInYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/basic.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/basic.js -index fcf4e35084ad90d83734bd6708188b357a230faf..9edcee174571b4e54af32ea4e1a94354eeaab987 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/basic.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/basic.js -@@ -9,9 +9,9 @@ features: [Temporal] - - const iso = Temporal.Calendar.from("iso8601"); - const res = 12; --assert.sameValue(iso.monthsInYear(Temporal.PlainDate.from("1994-11-05")), res, "PlainDate"); --assert.sameValue(iso.monthsInYear(Temporal.PlainDateTime.from("1994-11-05T08:15:30")), res, "PlainDateTime"); --assert.sameValue(iso.monthsInYear(Temporal.PlainYearMonth.from("1994-11")), res, "PlainYearMonth"); -+assert.sameValue(iso.monthsInYear(new Temporal.PlainDate(1994, 11, 5)), res, "PlainDate"); -+assert.sameValue(iso.monthsInYear(new Temporal.PlainDateTime(1994, 11, 5, 8, 15, 30)), res, "PlainDateTime"); -+assert.sameValue(iso.monthsInYear(new Temporal.PlainYearMonth(1994, 11)), res, "PlainYearMonth"); - assert.sameValue(iso.monthsInYear({ year: 1994, month: 11, day: 5 }), res, "property bag"); - assert.sameValue(iso.monthsInYear("1994-11-05"), res, "string"); - assert.throws(TypeError, () => iso.monthsInYear({ year: 2000 }), "property bag with missing properties"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/branding.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/branding.js -index e86c5f50e222e21ac18c0958342b2d036d2ffaf8..4d16a00078628d1cbd0e7463d5628f4adc8f0422 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/branding.js -@@ -11,12 +11,14 @@ const monthsInYear = Temporal.Calendar.prototype.monthsInYear; - - assert.sameValue(typeof monthsInYear, "function"); - --assert.throws(TypeError, () => monthsInYear.call(undefined), "undefined"); --assert.throws(TypeError, () => monthsInYear.call(null), "null"); --assert.throws(TypeError, () => monthsInYear.call(true), "true"); --assert.throws(TypeError, () => monthsInYear.call(""), "empty string"); --assert.throws(TypeError, () => monthsInYear.call(Symbol()), "symbol"); --assert.throws(TypeError, () => monthsInYear.call(1), "1"); --assert.throws(TypeError, () => monthsInYear.call({}), "plain object"); --assert.throws(TypeError, () => monthsInYear.call(Temporal.Calendar), "Temporal.Calendar"); --assert.throws(TypeError, () => monthsInYear.call(Temporal.Calendar.prototype), "Temporal.Calendar.prototype"); -+const arg = new Temporal.PlainDate(2021, 3, 4); -+ -+assert.throws(TypeError, () => monthsInYear.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => monthsInYear.call(null, arg), "null"); -+assert.throws(TypeError, () => monthsInYear.call(true, arg), "true"); -+assert.throws(TypeError, () => monthsInYear.call("", arg), "empty string"); -+assert.throws(TypeError, () => monthsInYear.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => monthsInYear.call(1, arg), "1"); -+assert.throws(TypeError, () => monthsInYear.call({}, arg), "plain object"); -+assert.throws(TypeError, () => monthsInYear.call(Temporal.Calendar, arg), "Temporal.Calendar"); -+assert.throws(TypeError, () => monthsInYear.call(Temporal.Calendar.prototype, arg), "Temporal.Calendar.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..838aff96f6fac3156597630816f3b8fe62bb6854 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.monthsInYear({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7a80b2990e80469699c0c01278f8e7ce3fd1bf25 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.monthsinyear -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.monthsInYear(arg); -+assert.sameValue( -+ result1, -+ 12, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.monthsInYear(arg); -+assert.sameValue( -+ result2, -+ 12, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js -index 0451a6655996c1fc87752b189123fe2653884faa..6e3e0b960e5a300de356056bb66e96a98138d379 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/monthsInYear/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.monthsInYear(arg); }, -+ () => instance.monthsInYear(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d0259e9038c2645fd813f49d77ce80cb04ecd77a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.weekOfYear(arg); -+assert.sameValue(result, 47, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.weekOfYear(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindate.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindate.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5f9f4da0d499d9963b4ffe718c054468a478deab ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindate.js -@@ -0,0 +1,76 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ Temporal.Calendar.prototype.weekOfYear will take Temporal.PlainDate object -+ and return the week of year of that date. -+info: | -+ 4. Let temporalDate be ? ToTemporalDate(temporalDateLike). -+ 5. Return 𝔽(! ToISOWeekOfYear(temporalDate.[[ISOYear]], temporalDate.[[ISOMonth]], temporalDate.[[ISODay]])). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+// The following week numbers are taken from the table "Examples of contemporary -+// dates around New Year's Day" from -+// https://en.wikipedia.org/wiki/ISO_week_date#Relation_with_the_Gregorian_calendar -+ -+let d = new Temporal.PlainDate(1977, 1, 1); -+assert.sameValue(cal.weekOfYear(d), 53, "1977-01-01 is in w53"); -+ -+d = new Temporal.PlainDate(1977, 1, 2); -+assert.sameValue(cal.weekOfYear(d), 53, "1977-01-02 is in w53"); -+ -+d = new Temporal.PlainDate(1977, 12, 31); -+assert.sameValue(cal.weekOfYear(d), 52, "1977-12-31 is in w52"); -+ -+d = new Temporal.PlainDate(1978, 1, 1); -+assert.sameValue(cal.weekOfYear(d), 52, "1978-01-01 is in w52"); -+ -+d = new Temporal.PlainDate(1978, 1, 2); -+assert.sameValue(cal.weekOfYear(d), 1, "1978-01-02 is in w01"); -+ -+d = new Temporal.PlainDate(1978, 12, 31); -+assert.sameValue(cal.weekOfYear(d), 52, "1978-12-31 is in w52"); -+ -+d = new Temporal.PlainDate(1979, 1, 1); -+assert.sameValue(cal.weekOfYear(d), 1, "1979-01-01 is in w01"); -+ -+d = new Temporal.PlainDate(1979, 12, 30); -+assert.sameValue(cal.weekOfYear(d), 52, "1979-12-30 is in w52"); -+ -+d = new Temporal.PlainDate(1979, 12, 31); -+assert.sameValue(cal.weekOfYear(d), 1, "1979-12-31 is in w01"); -+ -+d = new Temporal.PlainDate(1980, 1, 1); -+assert.sameValue(cal.weekOfYear(d), 1, "1980-01-01 is in w01"); -+ -+d = new Temporal.PlainDate(1980, 12, 28); -+assert.sameValue(cal.weekOfYear(d), 52, "1980-12-28 is in w52"); -+ -+d = new Temporal.PlainDate(1980, 12, 29); -+assert.sameValue(cal.weekOfYear(d), 1, "1980-12-29 is in w01"); -+ -+d = new Temporal.PlainDate(1980, 12, 30); -+assert.sameValue(cal.weekOfYear(d), 1, "1980-12-30 is in w01"); -+ -+d = new Temporal.PlainDate(1980, 12, 31); -+assert.sameValue(cal.weekOfYear(d), 1, "1980-12-31 is in w01"); -+ -+d = new Temporal.PlainDate(1981, 1, 1); -+assert.sameValue(cal.weekOfYear(d), 1, "1981-01-01 is in w01"); -+ -+d = new Temporal.PlainDate(1981, 12, 31); -+assert.sameValue(cal.weekOfYear(d), 53, "1981-12-31 is in w53"); -+ -+d = new Temporal.PlainDate(1982, 1, 1); -+assert.sameValue(cal.weekOfYear(d), 53, "1982-01-01 is in w53"); -+ -+d = new Temporal.PlainDate(1982, 1, 2); -+assert.sameValue(cal.weekOfYear(d), 53, "1982-01-02 is in w53"); -+ -+d = new Temporal.PlainDate(1982, 1, 3); -+assert.sameValue(cal.weekOfYear(d), 53, "1982-01-03 is in w53"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindatetime.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindatetime.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e7546bb71195159e41ed5dd3239251625afc4f3d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-plaindatetime.js -@@ -0,0 +1,76 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ Temporal.Calendar.prototype.weekOfYear will take Temporal.PlainDateTime object -+ and return the week of year of that date. -+info: | -+ 4. Let temporalDate be ? ToTemporalDate(temporalDateLike). -+ 5. Return 𝔽(! ToISOWeekOfYear(temporalDate.[[ISOYear]], temporalDate.[[ISOMonth]], temporalDate.[[ISODay]])). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+// The following week numbers are taken from the table "Examples of contemporary -+// dates around New Year's Day" from -+// https://en.wikipedia.org/wiki/ISO_week_date#Relation_with_the_Gregorian_calendar -+ -+let dt = new Temporal.PlainDateTime(1977, 1, 1, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 53, "1977-01-01 is in w53"); -+ -+dt = new Temporal.PlainDateTime(1977, 1, 2, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 53, "1977-01-02 is in w53"); -+ -+dt = new Temporal.PlainDateTime(1977, 12, 31, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 52, "1977-12-31 is in w52"); -+ -+dt = new Temporal.PlainDateTime(1978, 1, 1, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 52, "1978-01-01 is in w52"); -+ -+dt = new Temporal.PlainDateTime(1978, 1, 2, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1978-01-02 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1978, 12, 31, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 52, "1978-12-31 is in w52"); -+ -+dt = new Temporal.PlainDateTime(1979, 1, 1, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1979-01-01 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1979, 12, 30, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 52, "1979-12-30 is in w52"); -+ -+dt = new Temporal.PlainDateTime(1979, 12, 31, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1979-12-31 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1980, 1, 1, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1980-01-01 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1980, 12, 28, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 52, "1980-12-28 is in w52"); -+ -+dt = new Temporal.PlainDateTime(1980, 12, 29, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1980-12-29 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1980, 12, 30, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1980-12-30 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1980, 12, 31, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1980-12-31 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1981, 1, 1, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 1, "1981-01-01 is in w01"); -+ -+dt = new Temporal.PlainDateTime(1981, 12, 31, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 53, "1981-12-31 is in w53"); -+ -+dt = new Temporal.PlainDateTime(1982, 1, 1, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 53, "1982-01-01 is in w53"); -+ -+dt = new Temporal.PlainDateTime(1982, 1, 2, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 53, "1982-01-02 is in w53"); -+ -+dt = new Temporal.PlainDateTime(1982, 1, 3, 9, 8); -+assert.sameValue(cal.weekOfYear(dt), 53, "1982-01-03 is in w53"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ba100b2b8c59afbe43bf505787e392b1bad4c173 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.weekOfYear(arg); -+assert.sameValue( -+ result1, -+ 47, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.weekOfYear(arg); -+assert.sameValue( -+ result2, -+ 47, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cd5069188c7282c3130d54230e0baec8316c8d29 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.weekOfYear(arg); -+assert.sameValue(result1, 47, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.weekOfYear(arg); -+assert.sameValue(result2, 47, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.weekOfYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.weekOfYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7dbc1319376898535bfcc489984574a5ea0c1d18 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.weekOfYear(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.weekOfYear(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.weekOfYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.weekOfYear(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.weekOfYear(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5f8dcccc9867315ee6469aad187e0e2e0cda5686 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.weekOfYear(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7b8e721b7e366e3c1c4198057b195dcd289d71d9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.weekOfYear(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f031d0469001b36d893c4e6d0c44f0bdf8de3f25 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-string.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ Temporal.Calendar.prototype.weekOfYear will take an ISO 8601 date string and -+ return the week of year of that date. -+info: | -+ 4. Let temporalDate be ? ToTemporalDate(temporalDateLike). -+ 5. Return 𝔽(! ToISOWeekOfYear(temporalDate.[[ISOYear]], temporalDate.[[ISOMonth]], temporalDate.[[ISODay]])). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+// The following week numbers are taken from the table "Examples of contemporary -+// dates around New Year's Day" from -+// https://en.wikipedia.org/wiki/ISO_week_date#Relation_with_the_Gregorian_calendar -+ -+assert.sameValue(cal.weekOfYear("1977-01-01"), 53, "1977-01-01 is in w53"); -+assert.sameValue(cal.weekOfYear("1977-01-02"), 53, "1977-01-02 is in w53"); -+assert.sameValue(cal.weekOfYear("1977-12-31"), 52, "1977-12-31 is in w52"); -+assert.sameValue(cal.weekOfYear("1978-01-01"), 52, "1978-01-01 is in w52"); -+assert.sameValue(cal.weekOfYear("1978-01-02"), 1, "1978-01-02 is in w01"); -+assert.sameValue(cal.weekOfYear("1978-12-31"), 52, "1978-12-31 is in w52"); -+assert.sameValue(cal.weekOfYear("1979-01-01"), 1, "1979-01-01 is in w01"); -+assert.sameValue(cal.weekOfYear("1979-12-30"), 52, "1979-12-30 is in w52"); -+assert.sameValue(cal.weekOfYear("1979-12-31"), 1, "1979-12-31 is in w01"); -+assert.sameValue(cal.weekOfYear("1980-01-01"), 1, "1980-01-01 is in w01"); -+assert.sameValue(cal.weekOfYear("1980-12-28"), 52, "1980-12-28 is in w52"); -+assert.sameValue(cal.weekOfYear("1980-12-29"), 1, "1980-12-29 is in w01"); -+assert.sameValue(cal.weekOfYear("1980-12-30"), 1, "1980-12-30 is in w01"); -+assert.sameValue(cal.weekOfYear("1980-12-31"), 1, "1980-12-31 is in w01"); -+assert.sameValue(cal.weekOfYear("1981-01-01"), 1, "1981-01-01 is in w01"); -+assert.sameValue(cal.weekOfYear("1981-12-31"), 53, "1981-12-31 is in w53"); -+assert.sameValue(cal.weekOfYear("1982-01-01"), 53, "1982-01-01 is in w53"); -+assert.sameValue(cal.weekOfYear("1982-01-02"), 53, "1982-01-02 is in w53"); -+assert.sameValue(cal.weekOfYear("1982-01-03"), 53, "1982-01-03 is in w53"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a801e6aec598809f8e0aa813886c5c278bc8e6c9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.weekOfYear(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.weekOfYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/branding.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/branding.js -index 82f80e27c74b1beda8dd0c3b63a93438c689cc66..d6b5a0f0cf12ff530e95ae51a924d7d931e07679 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/branding.js -@@ -11,12 +11,14 @@ const weekOfYear = Temporal.Calendar.prototype.weekOfYear; - - assert.sameValue(typeof weekOfYear, "function"); - --assert.throws(TypeError, () => weekOfYear.call(undefined), "undefined"); --assert.throws(TypeError, () => weekOfYear.call(null), "null"); --assert.throws(TypeError, () => weekOfYear.call(true), "true"); --assert.throws(TypeError, () => weekOfYear.call(""), "empty string"); --assert.throws(TypeError, () => weekOfYear.call(Symbol()), "symbol"); --assert.throws(TypeError, () => weekOfYear.call(1), "1"); --assert.throws(TypeError, () => weekOfYear.call({}), "plain object"); --assert.throws(TypeError, () => weekOfYear.call(Temporal.Calendar), "Temporal.Calendar"); --assert.throws(TypeError, () => weekOfYear.call(Temporal.Calendar.prototype), "Temporal.Calendar.prototype"); -+const arg = new Temporal.PlainDate(2021, 7, 20); -+ -+assert.throws(TypeError, () => weekOfYear.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => weekOfYear.call(null, arg), "null"); -+assert.throws(TypeError, () => weekOfYear.call(true, arg), "true"); -+assert.throws(TypeError, () => weekOfYear.call("", arg), "empty string"); -+assert.throws(TypeError, () => weekOfYear.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => weekOfYear.call(1, arg), "1"); -+assert.throws(TypeError, () => weekOfYear.call({}, arg), "plain object"); -+assert.throws(TypeError, () => weekOfYear.call(Temporal.Calendar, arg), "Temporal.Calendar"); -+assert.throws(TypeError, () => weekOfYear.call(Temporal.Calendar.prototype, arg), "Temporal.Calendar.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c75c1d52145411548b0e07a598f22cda77e2f60d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.weekOfYear({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6d9e9695245f5f6a7c80bbb69d2dfcdb44d1ef76 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.weekofyear -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.weekOfYear(arg); -+assert.sameValue( -+ result1, -+ 52, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.weekOfYear(arg); -+assert.sameValue( -+ result2, -+ 52, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js -index 44eeabb321835c65787bd3cb313c17df2c917bd7..0a2cdc66e2787a70e1479b135cce4e6654548672 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.weekOfYear(arg); }, -+ () => instance.weekOfYear(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..212c2ac82e56155c9ebcb9dd5e3274e6c27c86a2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.year(arg); -+assert.sameValue(result, 1976, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.year(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d821211c537d2f3890ff61c72a574c853fc2d3b3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.year(arg); -+assert.sameValue( -+ result1, -+ 1976, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.year(arg); -+assert.sameValue( -+ result2, -+ 1976, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3030c5ed268c520040c65794115fa66d947bdba1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.year(arg); -+assert.sameValue(result1, 1976, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.year(arg); -+assert.sameValue(result2, 1976, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.year(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.year(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b3cec2bd4da35bdb93ce43ec29432ccafa603ba7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.year(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.year(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.year(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.year(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.year(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6f68cf3e847aca14528c4df7028cee88bb7f8780 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.year(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e186a2321f8cb2e241e20460ee7cc7d4ab66d27c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.year(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3ffcb6becc3745adfec4f3fa80a08b07d7d493d2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.year(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.year(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..31549636a4459ce9d94a3b17410c9ce4a2514025 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.year({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7520460dedb610193188070e990115f2ac3ccb1e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.year -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.year(arg); -+assert.sameValue( -+ result1, -+ 2016, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.year(arg); -+assert.sameValue( -+ result2, -+ 2016, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/year-zero.js -index 6221b7db9258da9f2c59966e849dde232a8b9b72..dc7f72566aede65498ea18b44202270728ca8f54 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/year/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.year(arg); }, -+ () => instance.year(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/basic.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2624bc7b651cf2b31a17aa33dda738fd614cb151 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/basic.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: Temporal.Calendar.prototype.yearMonthFromFields return correctly with valid data. -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOYearMonthFromFields(fields, options). -+ 7. Return ? CreateTemporalYearMonth(result.[[Year]], result.[[Month]], calendar, result.[[ReferenceISODay]]). -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601") -+ -+let result = cal.yearMonthFromFields({ year: 2021, month: 7 }); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 7, "M07", "year 2021, month 7"); -+result = cal.yearMonthFromFields({ year: 2021, month: 12 }); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", "year 2021, month 12"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M07" }); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 7, "M07", "year 2021, monthCode M07"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M12" }); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", "year 2021, monthCode M12"); -+ -+["constrain", "reject"].forEach((overflow) => { -+ const opt = { overflow }; -+ result = cal.yearMonthFromFields({ year: 2021, month: 7 }, opt); -+ TemporalHelpers.assertPlainYearMonth(result, 2021, 7, "M07", `year 2021, month 7, overflow ${overflow}`); -+ result = cal.yearMonthFromFields({ year: 2021, month: 12 }, opt); -+ TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", `year 2021, month 12, overflow ${overflow}`); -+ result = cal.yearMonthFromFields({ year: 2021, monthCode: "M07" }, opt); -+ TemporalHelpers.assertPlainYearMonth(result, 2021, 7, "M07", `year 2021, monthCode M07, overflow ${overflow}`); -+ result = cal.yearMonthFromFields({ year: 2021, monthCode: "M12" }, opt); -+ TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", `year 2021, monthCode M12, overflow ${overflow}`); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/branding.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/branding.js -index 0839394ca968abefa2b61adcab981d1b6ae330b6..7212b7f1d6cdd4addc2ba1eac348d8496a57dd99 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/branding.js -@@ -11,12 +11,14 @@ const yearMonthFromFields = Temporal.Calendar.prototype.yearMonthFromFields; - - assert.sameValue(typeof yearMonthFromFields, "function"); - --assert.throws(TypeError, () => yearMonthFromFields.call(undefined), "undefined"); --assert.throws(TypeError, () => yearMonthFromFields.call(null), "null"); --assert.throws(TypeError, () => yearMonthFromFields.call(true), "true"); --assert.throws(TypeError, () => yearMonthFromFields.call(""), "empty string"); --assert.throws(TypeError, () => yearMonthFromFields.call(Symbol()), "symbol"); --assert.throws(TypeError, () => yearMonthFromFields.call(1), "1"); --assert.throws(TypeError, () => yearMonthFromFields.call({}), "plain object"); --assert.throws(TypeError, () => yearMonthFromFields.call(Temporal.Calendar), "Temporal.Calendar"); --assert.throws(TypeError, () => yearMonthFromFields.call(Temporal.Calendar.prototype), "Temporal.Calendar.prototype"); -+const arg = { year: 2021, month: 1 }; -+ -+assert.throws(TypeError, () => yearMonthFromFields.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => yearMonthFromFields.call(null, arg), "null"); -+assert.throws(TypeError, () => yearMonthFromFields.call(true, arg), "true"); -+assert.throws(TypeError, () => yearMonthFromFields.call("", arg), "empty string"); -+assert.throws(TypeError, () => yearMonthFromFields.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => yearMonthFromFields.call(1, arg), "1"); -+assert.throws(TypeError, () => yearMonthFromFields.call({}, arg), "plain object"); -+assert.throws(TypeError, () => yearMonthFromFields.call(Temporal.Calendar, arg), "Temporal.Calendar"); -+assert.throws(TypeError, () => yearMonthFromFields.call(Temporal.Calendar.prototype, arg), "Temporal.Calendar.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-missing-properties.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-missing-properties.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c63d8f39e6c2245e1032a79ab7d3b8e49f05046d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-missing-properties.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: Temporal.Calendar.prototype.yearMonthFromFields will throw TypeError with incorrect input data type. -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOYearMonthFromFields(fields, options). -+ 7. Return ? CreateTemporalYearMonth(result.[[Year]], result.[[Month]], calendar, result.[[ReferenceISODay]]). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601") -+ -+assert.throws(TypeError, () => cal.yearMonthFromFields({}), "at least one correctly spelled property is required"); -+assert.throws(TypeError, () => cal.yearMonthFromFields({ month: 1 }), "year is required"); -+assert.throws(TypeError, () => cal.yearMonthFromFields({ year: 2021 }), "month or monthCode is required"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-not-object.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-not-object.js -index 7969ba6e441a4ee5de2b038891b4bdcb3d061109..e04972b2dde939977df9e05ec215e7068cb6b1d6 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-not-object.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/fields-not-object.js -@@ -7,7 +7,7 @@ description: Throw a TypeError if the fields is not an object - features: [Symbol, Temporal] - ---*/ - --const tests = [undefined, null, false, "string", Symbol("sym"), Math.PI, 42n]; -+const tests = [undefined, null, true, false, "string", Symbol("sym"), Math.PI, Infinity, NaN, 42n]; - const iso = Temporal.Calendar.from("iso8601"); - for (const fields of tests) { - assert.throws(TypeError, () => iso.yearMonthFromFields(fields, {})); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/monthcode-invalid.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/monthcode-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0b01bf85a751e09460154b9292fd169a6293f53a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/monthcode-invalid.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: Throw RangeError for an out-of-range, conflicting, or ill-formed monthCode -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOYearMonthFromFields(fields, options). -+ 7. Return ? CreateTemporalYearMonth(result.[[Year]], result.[[Month]], calendar, result.[[ReferenceISODay]]). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+["m1", "M1", "m01"].forEach((monthCode) => { -+ assert.throws(RangeError, () => cal.yearMonthFromFields({ year: 2021, monthCode }), -+ `monthCode '${monthCode}' is not well-formed`); -+}); -+ -+assert.throws(RangeError, () => cal.yearMonthFromFields({ year: 2021, month: 12, monthCode: "M11" }), -+ "monthCode and month conflict"); -+ -+["M00", "M19", "M99", "M13"].forEach((monthCode) => { -+ assert.throws(RangeError, () => cal.yearMonthFromFields({ year: 2021, monthCode }), -+ `monthCode '${monthCode}' is not valid for year 2021`); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-not-object.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-not-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0246e70bbcc5627dae60df92d0f0ca0c8e7679f7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-not-object.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: Throw a TypeError if options is not an object or undefined -+info: | -+ 5. Set options to ? GetOptionsObject(options). -+features: [Symbol, Temporal] -+---*/ -+ -+const tests = [null, true, false, "string", Symbol("sym"), Math.PI, Infinity, NaN, 42n]; -+const iso = new Temporal.Calendar("iso8601"); -+for (const options of tests) { -+ assert.throws(TypeError, () => iso.yearMonthFromFields({ year: 2021, month: 7 }, options), -+ "options is not object"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..625fcec62a5ec29cdb922bcea4c795dfaa6a45eb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Calendar("iso8601"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.yearMonthFromFields({ year: 2000, monthCode: "M05" }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-constrain.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-constrain.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6384d42a2851eba0ac4509154aef8fedcdf0df37 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-constrain.js -@@ -0,0 +1,91 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: Temporal.Calendar.prototype.yearMonthFromFields will return correctly with data and overflow set to 'constrain'. -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOYearMonthFromFields(fields, options). -+ 7. Return ? CreateTemporalYearMonth(result.[[Year]], result.[[Month]], calendar, result.[[ReferenceISODay]]). -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601") -+const opt = { overflow: "constrain" }; -+ -+let result = cal.yearMonthFromFields({ year: 2021, month: 1 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 1, "M01", "month 1 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 2 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 2, "M02", "month 2 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 3 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 3, "M03", "month 3 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 4 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 4, "M04", "month 4 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 5 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 5, "M05", "month 5 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 6 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 6, "M06", "month 6 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 7 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 7, "M07", "month 7 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 8 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 8, "M08", "month 8 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 9 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 9, "M09", "month 9 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 10 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 10, "M10", "month 10 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 11 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 11, "M11", "month 11 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, month: 12 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", "month 12 with overflow constrain"); -+ -+assert.throws( -+ RangeError, -+ () => cal.yearMonthFromFields({ year: 2021, month: -99999 }, opt), -+ "negative month -99999 is out of range even with overflow constrain" -+) -+assert.throws( -+ RangeError, -+ () => cal.yearMonthFromFields({ year: 2021, month: -1 }, opt), -+ "negative month -1 is out of range even with overflow constrain" -+) -+assert.throws( -+ RangeError, -+ () => cal.yearMonthFromFields({ year: 2021, month: 0 }, opt), -+ "month zero is out of range even with overflow constrain" -+) -+ -+result = cal.yearMonthFromFields({ year: 2021, month: 13 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", "month 13 is constrained to 12"); -+result = cal.yearMonthFromFields({ year: 2021, month: 99999 }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", "month 99999 is constrained to 12"); -+ -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M01" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 1, "M01", "monthCode M01 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M02" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 2, "M02", "monthCode M02 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M03" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 3, "M03", "monthCode M03 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M04" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 4, "M04", "monthCode M04 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M05" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 5, "M05", "monthCode M05 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M06" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 6, "M06", "monthCode M06 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M07" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 7, "M07", "monthCode M07 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M08" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 8, "M08", "monthCode M08 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M09" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 9, "M09", "monthCode M09 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M10" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 10, "M10", "monthCode M10 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M11" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 11, "M11", "monthCode M11 with overflow constrain"); -+result = cal.yearMonthFromFields({ year: 2021, monthCode: "M12" }, opt); -+TemporalHelpers.assertPlainYearMonth(result, 2021, 12, "M12", "monthCode M12 with overflow constrain"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-invalid-string.js -index 99ffe6af27760a798bc1903e5288c5008611304a..77c1414109779cef6c0d6cabf5c695b2a4bd444c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-invalid-string.js -@@ -17,4 +17,11 @@ features: [Temporal] - ---*/ - - const calendar = new Temporal.Calendar("iso8601"); --assert.throws(RangeError, () => calendar.yearMonthFromFields({ year: 2000, month: 5 }, { overflow: "other string" })); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => calendar.yearMonthFromFields({ year: 2000, month: 5 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-reject.js b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-reject.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d0d475d9e7b0decdd6e4629943a70f3e71e2c78b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Calendar/prototype/yearMonthFromFields/overflow-reject.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.yearmonthfromfields -+description: Throw RangeError for input data out of range with overflow reject -+info: | -+ 1. Let calendar be the this value. -+ 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). -+ 3. Assert: calendar.[[Identifier]] is "iso8601". -+ 4. If Type(fields) is not Object, throw a TypeError exception. -+ 5. Set options to ? GetOptionsObject(options). -+ 6. Let result be ? ISOYearMonthFromFields(fields, options). -+ 7. Return ? CreateTemporalYearMonth(result.[[Year]], result.[[Month]], calendar, result.[[ReferenceISODay]]). -+features: [Temporal] -+---*/ -+ -+const cal = new Temporal.Calendar("iso8601"); -+ -+[-1, 0, 13, 9995].forEach((month) => { -+ assert.throws( -+ RangeError, -+ () => cal.yearMonthFromFields({year: 2021, month, day: 5}, { overflow: "reject" }), -+ `Month ${month} is out of range for 2021 with overflow: reject` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..69cea7447c232652c037bc61e8d1c027199f59d9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/basic.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration -+description: Basic constructor tests. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+TemporalHelpers.assertDuration(new Temporal.Duration(5, 5, 5, 5, 5, 5, 5, 5, 5, 0), -+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, "positive"); -+TemporalHelpers.assertDuration(new Temporal.Duration(-5, -5, -5, -5, -5, -5, -5, -5, -5, 0), -+ -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, "negative"); -+TemporalHelpers.assertDuration(new Temporal.Duration(-0, -0, -0, -0, -0, -0, -0, -0, -0, -0), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "negative zero"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/call-builtin.js b/JSTests/test262/test/built-ins/Temporal/Duration/call-builtin.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1050ec967292afebf4adfce0dceae2af90c5459d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/call-builtin.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration -+description: Constructor should not call built-in functions. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+Number.isFinite = () => { throw new Test262Error("should not call Number.isFinite") }; -+Math.sign = () => { throw new Test262Error("should not call Math.sign") }; -+ -+const duration = new Temporal.Duration(1, 1); -+TemporalHelpers.assertDuration(duration, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/argument-cast.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/argument-cast.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5d2262bf0ee3fc8b2e018c218610319992eb830e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/argument-cast.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: Strings and objects are supported arguments. -+features: [Temporal] -+---*/ -+ -+assert.sameValue(Temporal.Duration.compare("PT12H", new Temporal.Duration()), 1, -+ "first argument string"); -+assert.sameValue(Temporal.Duration.compare({ hours: 12 }, new Temporal.Duration()), 1, -+ "first argument object"); -+assert.throws(TypeError, () => Temporal.Duration.compare({ hour: 12 }, new Temporal.Duration()), -+ "first argument missing property"); -+ -+assert.sameValue(Temporal.Duration.compare(new Temporal.Duration(), "PT12H"), -1, -+ "second argument string"); -+assert.sameValue(Temporal.Duration.compare(new Temporal.Duration(), { hours: 12 }), -1, -+ "second argument object"); -+assert.throws(TypeError, () => Temporal.Duration.compare(new Temporal.Duration(), { hour: 12 }), -+ "second argument missing property"); -+ -+assert.sameValue(Temporal.Duration.compare({ hours: 12, minute: 5 }, { hours: 12, day: 5 }), 0, -+ "ignores incorrect properties"); -+ -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bcc7fadfdd1d7c34c3387c517f56b8e5e9015e46 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/basic.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: Basic comparisons. -+features: [Temporal] -+---*/ -+ -+const td1pos = new Temporal.Duration(0, 0, 0, 0, 5, 5, 5, 5, 5, 5); -+const td2pos = new Temporal.Duration(0, 0, 0, 0, 5, 4, 5, 5, 5, 5); -+const td1neg = new Temporal.Duration(0, 0, 0, 0, -5, -5, -5, -5, -5, -5); -+const td2neg = new Temporal.Duration(0, 0, 0, 0, -5, -4, -5, -5, -5, -5); -+assert.sameValue(Temporal.Duration.compare(td1pos, td1pos), 0, -+ "time units: equal"); -+assert.sameValue(Temporal.Duration.compare(td2pos, td1pos), -1, -+ "time units: smaller/larger"); -+assert.sameValue(Temporal.Duration.compare(td1pos, td2pos), 1, -+ "time units: larger/smaller"); -+assert.sameValue(Temporal.Duration.compare(td1neg, td1neg), 0, -+ "time units: negative/negative equal"); -+assert.sameValue(Temporal.Duration.compare(td2neg, td1neg), 1, -+ "time units: negative/negative smaller/larger"); -+assert.sameValue(Temporal.Duration.compare(td1neg, td2neg), -1, -+ "time units: negative/negative larger/smaller"); -+assert.sameValue(Temporal.Duration.compare(td1neg, td2pos), -1, -+ "time units: negative/positive"); -+assert.sameValue(Temporal.Duration.compare(td1pos, td2neg), 1, -+ "time units: positive/negative"); -+ -+const dd1pos = new Temporal.Duration(5, 5, 5, 5, 5, 5, 5, 5, 5, 5); -+const dd2pos = new Temporal.Duration(5, 5, 5, 5, 5, 4, 5, 5, 5, 5); -+const dd1neg = new Temporal.Duration(-5, -5, -5, -5, -5, -5, -5, -5, -5, -5); -+const dd2neg = new Temporal.Duration(-5, -5, -5, -5, -5, -4, -5, -5, -5, -5); -+const relativeTo = Temporal.PlainDate.from("2017-01-01"); -+assert.throws(RangeError, () => Temporal.Duration.compare(dd1pos, dd2pos), -+ "date units: relativeTo is required"); -+assert.sameValue(Temporal.Duration.compare(dd1pos, dd1pos, { relativeTo }), 0, -+ "date units: equal"); -+assert.sameValue(Temporal.Duration.compare(dd2pos, dd1pos, { relativeTo }), -1, -+ "date units: smaller/larger"); -+assert.sameValue(Temporal.Duration.compare(dd1pos, dd2pos, { relativeTo }), 1, -+ "date units: larger/smaller"); -+assert.sameValue(Temporal.Duration.compare(dd1neg, dd1neg, { relativeTo }), 0, -+ "date units: negative/negative equal"); -+assert.sameValue(Temporal.Duration.compare(dd2neg, dd1neg, { relativeTo }), 1, -+ "date units: negative/negative smaller/larger"); -+assert.sameValue(Temporal.Duration.compare(dd1neg, dd2neg, { relativeTo }), -1, -+ "date units: negative/negative larger/smaller"); -+assert.sameValue(Temporal.Duration.compare(dd1neg, dd2pos, { relativeTo }), -1, -+ "date units: negative/positive"); -+assert.sameValue(Temporal.Duration.compare(dd1pos, dd2neg, { relativeTo }), 1, -+ "date units: positive/negative"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c2169e338a3fa941e205e94f08a259cd0b38fe6e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/calendar-dateadd-called-with-options-undefined.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: > -+ BuiltinTimeZoneGetInstantFor calls Calendar.dateAdd with undefined as the -+ options value -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarDateAddUndefinedOptions(); -+const timeZone = TemporalHelpers.oneShiftTimeZone(new Temporal.Instant(0n), 3600e9); -+const relativeTo = new Temporal.ZonedDateTime(0n, timeZone, calendar); -+ -+const duration1 = new Temporal.Duration(0, 0, 1); -+const duration2 = new Temporal.Duration(0, 0, 1); -+Temporal.Duration.compare(duration1, duration2, { relativeTo }); -+assert.sameValue(calendar.dateAddCallCount, 4); -+// one call in CalculateOffsetShift for each duration argument, plus one in -+// UnbalanceDurationRelative for each duration argument -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..427dd9fee8c5a70f91977e794a4e5275b4476140 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.Duration.compare({ hours: 1 }, { minutes: 60 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-hour.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-hour.js -new file mode 100644 -index 0000000000000000000000000000000000000000..876d865cdf56d5d103da6780a29341a501f47ea4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-hour.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: relativeTo with hours. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const oneDay = new Temporal.Duration(0, 0, 0, 1); -+const hours24 = new Temporal.Duration(0, 0, 0, 0, 24); -+assert.sameValue(Temporal.Duration.compare(oneDay, hours24), -+ 0, -+ "relativeTo not required for days"); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { relativeTo: Temporal.PlainDate.from("2017-01-01") }), -+ 0, -+ "relativeTo does not affect days if PlainDate"); -+assert.sameValue(Temporal.Duration.compare(oneDay, hours24, { relativeTo: "2019-11-03" }), -+ 0, -+ "casts relativeTo to PlainDate from string"); -+assert.sameValue(Temporal.Duration.compare(oneDay, hours24, { relativeTo: { year: 2019, month: 11, day: 3 } }), -+ 0, -+ "casts relativeTo to PlainDate from object"); -+ -+const timeZone = TemporalHelpers.springForwardFallBackTimeZone(); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { relativeTo: new Temporal.ZonedDateTime(0n, timeZone) }), -+ 0, -+ 'relativeTo does not affect days if ZonedDateTime, and duration encompasses no DST change'); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { relativeTo: new Temporal.ZonedDateTime(972802800_000_000_000n, timeZone) }), -+ 1, -+ 'relativeTo does affect days if ZonedDateTime, and duration encompasses DST change'); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { -+ relativeTo: { year: 2000, month: 10, day: 29, timeZone } -+ }), -+ 1, -+ 'casts relativeTo to ZonedDateTime from object'); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-month.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-month.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cb0df5606d2332685bd489312d25efafe3fee422 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-month.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: relativeTo with months. -+features: [Temporal] -+---*/ -+ -+const oneMonth = new Temporal.Duration(0, 1); -+const days30 = new Temporal.Duration(0, 0, 0, 30); -+assert.sameValue( -+ Temporal.Duration.compare(oneMonth, days30, { relativeTo: Temporal.PlainDate.from("2018-04-01") }), 0); -+assert.sameValue( -+ Temporal.Duration.compare(oneMonth, days30, { relativeTo: Temporal.PlainDate.from("2018-03-01") }), 1); -+assert.sameValue( -+ Temporal.Duration.compare(oneMonth, days30, { relativeTo: Temporal.PlainDate.from("2018-02-01") }), -1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-invalid.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0e940ade567b59807ab6c38a0a7c6882788da538 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-invalid.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: Throws if a value in the relativeTo property bag is missing. -+features: [Temporal] -+---*/ -+ -+const oneDay = new Temporal.Duration(0, 0, 0, 1); -+const hours24 = new Temporal.Duration(0, 0, 0, 0, 24); -+assert.throws(TypeError, () => Temporal.Duration.compare(oneDay, hours24, { relativeTo: { month: 11, day: 3 } }), "missing year"); -+assert.throws(TypeError, () => Temporal.Duration.compare(oneDay, hours24, { relativeTo: { year: 2019, month: 11 } }), "missing day"); -+assert.throws(TypeError, () => Temporal.Duration.compare(oneDay, hours24, { relativeTo: { year: 2019, day: 3 } }), "missing month"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-year.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-year.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7700d0f3dbdb7a1cfb4ec8b32f230753ae85fbff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/relativeto-year.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: relativeTo with years. -+features: [Temporal] -+---*/ -+ -+const oneYear = new Temporal.Duration(1); -+const days365 = new Temporal.Duration(0, 0, 0, 365); -+assert.sameValue( -+ Temporal.Duration.compare(oneYear, days365, { relativeTo: Temporal.PlainDate.from("2017-01-01") }), 0); -+assert.sameValue( -+ Temporal.Duration.compare(oneYear, days365, { relativeTo: Temporal.PlainDate.from("2016-01-01") }), 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..02368982a38c3e1690f15fed8de3e7f04bb94d45 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }); -+Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0c8d50f0e26e3e00fc56bf979706e05525e77d36 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..78d245fe4807fec68e8344d5f2595aba28811488 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Duration.compare(new Temporal.Duration(), new Temporal.Duration(), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/compare/twenty-five-hour-day.js b/JSTests/test262/test/built-ins/Temporal/Duration/compare/twenty-five-hour-day.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9aeee2d44b522cc7988fa5f940f268baf03ec6fd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/compare/twenty-five-hour-day.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: Unbalancing handles DST days with more than 24 hours -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const tz = TemporalHelpers.springForwardFallBackTimeZone(); -+ -+// 2000-10-29 is a 25-hour day according to this time zone... -+ -+const relativeTo = new Temporal.ZonedDateTime(941187600_000_000_000n, tz); -+ -+// confirm that we have rewound one year and one day: -+assert.sameValue('1999-10-29T01:00:00-08:00[Custom/Spring_Fall]', relativeTo.toString()); -+ -+const d1 = new Temporal.Duration(1, 0, 0, 1); -+const d2 = new Temporal.Duration(1, 0, 0, 0, 25); -+ -+// ...so the durations should be equal relative to relativeTo: -+ -+assert.sameValue(0, -+ Temporal.Duration.compare(d1, d2, { relativeTo }), -+ "2000-10-29 is a 25-hour day" -+); -+ -+assert.sameValue(1, -+ Temporal.Duration.compare(d1, { years: 1, hours: 24 }, { relativeTo }), -+ "2020-10-29 has more than 24 hours" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/days-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/days-undefined.js -index 716ad626f5a6e36ce9947414e8f8bcdd55208db2..f4072e0470b23871b5077eeb4f4dccff333a9424 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/days-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/days-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.days, 0, "days default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.days, 0, "days default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-duration.js b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b55a43a08554920070c9044c84a795d933e7d68a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-duration.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.from -+description: A Duration object is copied, not returned directly -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const orig = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 654, 321); -+const result = Temporal.Duration.from(orig); -+ -+TemporalHelpers.assertDuration( -+ result, -+ 1, 2, 3, 4, 5, 6, 7, 987, 654, 321, -+ "Duration is copied" -+); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a Duration is given, the returned value is not the original Duration" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-existing-object.js b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-existing-object.js -index 8173f7c96cd49648f1fc13a0c9ee6d220ec4524a..7d0cb175023237dc29f108c38dc1773c46950062 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-existing-object.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-existing-object.js -@@ -4,16 +4,14 @@ - /*--- - esid: sec-temporal.duration.from - description: Property bag is converted to Duration; Duration is copied -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const d1 = Temporal.Duration.from({ milliseconds: 1000 }); --assert.sameValue(d1.seconds, 0); --assert.sameValue(d1.milliseconds, 1000); -+const d1 = Temporal.Duration.from({ milliseconds: 1000, month: 1 }); -+TemporalHelpers.assertDuration(d1, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0); - - const d2 = Temporal.Duration.from(d1); - assert.notSameValue(d1, d2); --assert.sameValue(d1.seconds, 0); --assert.sameValue(d1.milliseconds, 1000); --assert.sameValue(d2.seconds, 0); --assert.sameValue(d2.milliseconds, 1000); -+TemporalHelpers.assertDuration(d1, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0); -+TemporalHelpers.assertDuration(d2, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-object-invalid.js b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-object-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..31818010fc91ddd8fabe950baf8a99031db9f822 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-object-invalid.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.from -+description: Invalid object arguments. -+features: [Temporal] -+---*/ -+ -+const tests = [ -+ { years: 0.5 }, -+ { months: 0.5 }, -+ { weeks: 0.5 }, -+ { days: 0.5 }, -+ { hours: 0.5, minutes: 20 }, -+ { hours: 0.5, seconds: 15 }, -+ { minutes: 10.7, nanoseconds: 400 }, -+ { hours: 1, minutes: -30 }, -+]; -+ -+for (const input of tests) { -+ assert.throws(RangeError, () => Temporal.Duration.from(input)); -+} -+ -+assert.throws(TypeError, () => Temporal.Duration.from({})); -+assert.throws(TypeError, () => Temporal.Duration.from({ month: 12 })); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..62708e2939b2dde084dbd8e78fba379d418a2331 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-string-invalid.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.from -+description: Invalid string arguments. -+features: [Temporal] -+---*/ -+ -+const tests = [ -+ "P1Y1M1W1DT1H1M1.123456789123S", -+ "P0.5Y", -+ "P1Y0,5M", -+ "P1Y1M0.5W", -+ "P1Y1M1W0,5D", -+ "P1Y1M1W1DT0.5H5S", -+ "P1Y1M1W1DT1.5H0,5M", -+ "P1Y1M1W1DT1H0.5M0.5S", -+ "P", -+ "PT", -+ "-P", -+ "-PT", -+ "+P", -+ "+PT", -+ "P1Y1M1W1DT1H1M1.01Sjunk", -+ "P-1Y1M", -+ "P1Y-1M" -+]; -+ -+for (const input of tests) { -+ assert.throws(RangeError, () => Temporal.Duration.from(input)); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e41100b3d69f0988243b077a32bcb9bf4d81a0be ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/from/argument-string.js -@@ -0,0 +1,48 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.from -+description: Basic string arguments. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1D"), -+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("p1y1m1dt1h1m1s"), -+ 1, 1, 0, 1, 1, 1, 1, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.1S"), -+ 1, 1, 1, 1, 1, 1, 1, 100, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.12S"), -+ 1, 1, 1, 1, 1, 1, 1, 120, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.123S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.1234S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 400, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.12345S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 450, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.123456S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 456, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.1234567S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 456, 700); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.12345678S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 456, 780); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1.123456789S"), -+ 1, 1, 1, 1, 1, 1, 1, 123, 456, 789); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1Y1M1W1DT1H1M1,12S"), -+ 1, 1, 1, 1, 1, 1, 1, 120, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1DT0.5M"), -+ 0, 0, 0, 1, 0, 0, 30, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1DT0,5H"), -+ 0, 0, 0, 1, 0, 30, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("+P1D"), -+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("-P1D"), -+ 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("\u2212P1D"), -+ 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from("-P1Y1M1W1DT1H1M1.123456789S"), -+ -1, -1, -1, -1, -1, -1, -1, -123, -456, -789); -+TemporalHelpers.assertDuration(Temporal.Duration.from("PT100M"), -+ 0, 0, 0, 0, 0, 100, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/hours-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/hours-undefined.js -index 266965693824dd217bc0cc2c99cf10b209afc2d6..e068dee12c31f4616eede7cdb8c808c154533887 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/hours-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/hours-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.hours, 0, "hours default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.hours, 0, "hours default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/microseconds-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/microseconds-undefined.js -index e0f92cb967c5c9de921620db8e9aefe1cd74c0e4..1537ff7545891811f1ddf94cdaeb56c33042bc25 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/microseconds-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/microseconds-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1, 1, 1, 1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.microseconds, 0, "microseconds default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.microseconds, 0, "microseconds default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/milliseconds-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/milliseconds-undefined.js -index c460c6a06ee61b99b3e1f3ef4d4327552cf23e0c..cee28885684fd5e4b288a99e8272104556b5ed8c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/milliseconds-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/milliseconds-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1, 1, 1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.milliseconds, 0, "milliseconds default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.milliseconds, 0, "milliseconds default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/minutes-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/minutes-undefined.js -index 265bd4fbc6bb3250305e31846887382fd4b0a86c..562622ef7aad175dffed482ee559f10ab3e3c1e0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/minutes-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/minutes-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.minutes, 0, "minutes default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.minutes, 0, "minutes default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/mixed.js b/JSTests/test262/test/built-ins/Temporal/Duration/mixed.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5ba8517cf6f2828f947608ca6fb7b92c7ee38eae ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/mixed.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration -+description: Constructor with mixed signs. -+features: [Temporal] -+---*/ -+ -+assert.throws(RangeError, () => new Temporal.Duration(-1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, -1, 1, 1, 1, 1, 1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, -1, 1, 1, 1, 1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, -1, 1, 1, 1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, 1, -1, 1, 1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, 1, 1, -1, 1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, 1, 1, 1, -1, 1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, 1, 1, 1, 1, -1, 1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, 1, 1, 1, 1, 1, -1, 1)); -+assert.throws(RangeError, () => new Temporal.Duration(1, 1, 1, 1, 1, 1, 1, 1, 1, -1)); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/months-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/months-undefined.js -index f9cad3f216cf83a90ecd6ec43e513c6211f5c62a..8ad0734831da91ad41485cffc66c18f20120037c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/months-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/months-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const years = 1; -+const args = [1]; - --const explicit = new Temporal.Duration(years, undefined); --assert.sameValue(explicit.months, 0, "months default argument"); -+const explicit = new Temporal.Duration(...args, undefined); -+TemporalHelpers.assertDuration(explicit, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit"); - --const implicit = new Temporal.Duration(years); --assert.sameValue(implicit.months, 0, "months default argument"); -+const implicit = new Temporal.Duration(...args); -+TemporalHelpers.assertDuration(implicit, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/nanoseconds-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/nanoseconds-undefined.js -index 2d4de39199c8c809df5ce0e77176be46e035de08..ec1d1518bbaad5e20be6764e32d5ee0fd876a5ef 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/nanoseconds-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/nanoseconds-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1, 1, 1, 1, 1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.nanoseconds, 0, "nanoseconds default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.nanoseconds, 0, "nanoseconds default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/abs/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/abs/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ecc2ecf18a206248c83421dd57849aa449e0e413 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/abs/basic.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.abs -+description: Temporal.Duration.prototype.abs will return absolute value of the input duration. -+info: | -+ 1. Let duration be the this value. -+ 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). -+ 3. Return ? CreateTemporalDuration(abs(duration.[[Years]]), abs(duration.[[Months]]), abs(duration.[[Weeks]]), abs(duration.[[Days]]), abs(duration.[[Hours]]), abs(duration.[[Minutes]]), abs(duration.[[Seconds]]), abs(duration.[[Milliseconds]]), abs(duration.[[Microseconds]]), abs(duration.[[Nanoseconds]])). -+ -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+let d1 = new Temporal.Duration(); -+TemporalHelpers.assertDuration( -+ d1.abs(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "empty"); -+ -+let d2 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+TemporalHelpers.assertDuration( -+ d2.abs(), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "positive"); -+ -+let d3 = new Temporal.Duration(1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5); -+TemporalHelpers.assertDuration( -+ d3.abs(), 1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5, "large positive"); -+ -+let d4 = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10); -+TemporalHelpers.assertDuration( -+ d4.abs(), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "negative"); -+ -+// Test with some zeros -+let d5 = new Temporal.Duration(1, 0, 3, 0, 5, 0, 7, 0, 9, 0); -+TemporalHelpers.assertDuration( -+ d5.abs(), 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, "some zeros"); -+ -+let d6 = new Temporal.Duration(0, 2, 0, 4, 0, 6, 0, 8, 0, 10); -+TemporalHelpers.assertDuration( -+ d6.abs(), 0, 2, 0, 4, 0, 6, 0, 8, 0, 10, "other zeros"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/abs/new-object.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/abs/new-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6f10880b7caf918c8e586e8039fb9d5f3a7b0a98 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/abs/new-object.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.abs -+description: Temporal.Duration.prototype.abs returns a new object. -+features: [Temporal] -+---*/ -+ -+let d1 = new Temporal.Duration(); -+assert.notSameValue(d1.abs(), d1); -+ -+let d2 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+assert.notSameValue(d2.abs(), d2); -+ -+let d3 = new Temporal.Duration(1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5); -+assert.notSameValue(d3.abs(), d3); -+ -+let d4 = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10); -+assert.notSameValue(d4.abs(), d4); -+ -+// Test with some zeros -+let d5 = new Temporal.Duration(1, 0, 3, 0, 5, 0, 7, 0, 9, 0); -+assert.notSameValue(d5.abs(), d5); -+ -+let d6 = new Temporal.Duration(0, 2, 0, 4, 0, 6, 0, 8, 0, 10); -+assert.notSameValue(d6.abs(), d6); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/argument-object-invalid.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/argument-object-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ed5b5873a34479ce43e5bb73261cf0a949626c18 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/argument-object-invalid.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: Mixed positive and negative values or missing properties always throw -+features: [Temporal] -+---*/ -+ -+const duration = Temporal.Duration.from({ days: 1, minutes: 5 }); -+assert.throws(RangeError, () => duration.add({ hours: 1, minutes: -30 }), "mixed signs"); -+assert.throws(TypeError, () => duration.add({}), "no properties"); -+assert.throws(TypeError, () => duration.add({ month: 12 }), "only singular 'month' property"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/argument-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6e129e842e90ee1ce90c6bd6b697375efce38ca0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/argument-string.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: String arguments are supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const duration = Temporal.Duration.from({ days: 1, minutes: 5 }); -+const result = duration.add("P2DT5M"); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 3, 0, 10, 0, 0, 0, 0, "String argument should be supported"); -+assert.throws(RangeError, () => duration.add("2DT5M"), "Invalid string argument should throw"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bcbea9aa422e6fdb603147036a55223799bdcaa3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/basic.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: Basic behavior -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const duration1 = Temporal.Duration.from({ days: 1, minutes: 5 }); -+TemporalHelpers.assertDuration(duration1.add({ days: 2, minutes: 5 }), -+ 0, 0, 0, 3, 0, 10, 0, 0, 0, 0, "positive same units"); -+TemporalHelpers.assertDuration(duration1.add({ hours: 12, seconds: 30 }), -+ 0, 0, 0, 1, 12, 5, 30, 0, 0, 0, "positive different units"); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P3DT10M").add({ days: -2, minutes: -5 }), -+ 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, "negative same units"); -+TemporalHelpers.assertDuration(Temporal.Duration.from("P1DT12H5M30S").add({ hours: -12, seconds: -30 }), -+ 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, "negative different units"); -+const duration2 = Temporal.Duration.from("P50DT50H50M50.500500500S"); -+TemporalHelpers.assertDuration(duration2.add(duration2), -+ 0, 0, 0, 104, 5, 41, 41, 1, 1, 0, "balancing positive"); -+const duration3 = Temporal.Duration.from({ hours: -1, seconds: -60 }); -+TemporalHelpers.assertDuration(duration3.add({ minutes: 122 }), -+ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, "balancing flipped sign 1"); -+const duration4 = Temporal.Duration.from({ hours: -1, seconds: -3721 }); -+TemporalHelpers.assertDuration(duration4.add({ minutes: 61, nanoseconds: 3722000000001 }), -+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, "balancing flipped sign 2"); -+TemporalHelpers.assertDuration(duration1.add({ month: 1, days: 1 }), -+ 0, 0, 0, 2, 0, 5, 0, 0, 0, 0, -+ "incorrectly-spelled properties are ignored"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-undefined.js -index ef9717d9ac28072f9b829ff683729371ae550f84..1b58ed054c53a177c07e473c8d0250dc38513253 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-undefined.js -@@ -4,10 +4,29 @@ - /*--- - esid: sec-temporal.duration.prototype.add - description: Verify that undefined options are handled correctly. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const duration1 = new Temporal.Duration(1); - const duration2 = new Temporal.Duration(0, 12); --assert.throws(RangeError, () => duration1.add(duration2), "default relativeTo is undefined"); --assert.throws(RangeError, () => duration1.add(duration2, undefined), "default relativeTo is undefined"); -+const duration3 = new Temporal.Duration(0, 0, 0, 1); -+const duration4 = new Temporal.Duration(0, 0, 0, 0, 24); -+ -+assert.throws(RangeError, () => duration1.add(duration2), "no options with years"); -+TemporalHelpers.assertDuration(duration3.add(duration4), -+ 0, 0, 0, /* days = */ 2, 0, 0, 0, 0, 0, 0, -+ "no options with days"); -+ -+const optionValues = [ -+ [undefined, "undefined"], -+ [{}, "plain object"], -+ [() => {}, "lambda"], -+]; -+for (const [options, description] of optionValues) { -+ assert.throws(RangeError, () => duration1.add(duration2, options), -+ `options ${description} with years`); -+ TemporalHelpers.assertDuration(duration3.add(duration4, options), -+ 0, 0, 0, /* days = */ 2, 0, 0, 0, 0, 0, 0, -+ `options ${description} with days`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..37500a0214baba41fd4a66bdf5af5741b5f1bd1d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Duration(0, 0, 0, 0, 1); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.add({ hours: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8e392f0e9caa2f602ba24b553a54875dfee78309 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-leap-second.js -@@ -0,0 +1,43 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: Leap second is constrained in both an ISO string and a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+let relativeTo = "2016-12-31T23:59:60"; -+const result1 = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result1, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDate relativeTo" -+); -+ -+relativeTo = "2016-12-31T23:59:60+00:00[UTC]"; -+const result2 = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result2, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for ZonedDateTime relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result3 = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result3, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is valid in a property bag for PlainDate relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60, timeZone: "UTC" }; -+const result4 = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result4, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is valid in a property bag for ZonedDateTime relativeTo" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5523adcf709ebc536bd28d47f657a91c7e0064a1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: relativeTo with months. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const oneMonth = new Temporal.Duration(0, 1); -+const days30 = new Temporal.Duration(0, 0, 0, 30); -+TemporalHelpers.assertDuration(oneMonth.add(days30, { relativeTo: Temporal.PlainDate.from('2018-01-01') }), -+ 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, "January"); -+TemporalHelpers.assertDuration(oneMonth.add(days30, { relativeTo: Temporal.PlainDate.from('2018-02-01') }), -+ 0, 1, 0, 30, 0, 0, 0, 0, 0, 0, "February"); -+TemporalHelpers.assertDuration(oneMonth.add(days30, { relativeTo: Temporal.PlainDate.from('2018-03-01') }), -+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, "March"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ecdce2d3eb63cab57661935486edc33f819e5529 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: A number as relativeTo option is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const relativeTo = 20191101; -+ -+const result = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration(result, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "20191101 is a valid ISO string for relativeTo"); -+ -+const numbers = [ -+ 1, -+ -20191101, -+ 1234567890, -+]; -+ -+for (const relativeTo of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), -+ `Number ${relativeTo} does not convert to a valid ISO string for relativeTo` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3a00bd00e9a0c42f048982c0138147991c40d638 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: relativeTo with years. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d1 = new Temporal.Duration(0, 1, 0, 0); -+const d2 = new Temporal.Duration(0, 0, 0, 30); -+const relativeTo = new Temporal.PlainDate(2000, 1, 1); -+TemporalHelpers.assertDuration(d1.add(d2, { relativeTo }), -+ 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, -+ "first this is resolved against relativeTo, then the argument against relativeTo + this"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b2ff180cb5872618500807462f0fd74a9cd0b6f7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: A number as calendar in relativeTo property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const calendar = 19970327; -+ -+let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+const result1 = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration(result1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for relativeTo.calendar"); -+ -+relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+const result2 = instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }); -+TemporalHelpers.assertDuration(result2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for relativeTo.calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar` -+ ); -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ca4b0dd243c6f8efde92d15338d6d5e67f31be1a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: > -+ Appropriate error thrown when relativeTo.calendar cannot be converted to a -+ calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `${description} does not convert to a valid ISO string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-required.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-required.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ae171e0f144cefd31334822161eb1f4a2c42ee81 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-required.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: relativeTo is required if the largest unit is at least weeks. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d = Temporal.Duration.from({ hours: 1 }); -+const dy = Temporal.Duration.from({ years: 1 }); -+const dm = Temporal.Duration.from({ months: 1 }); -+const dw = Temporal.Duration.from({ weeks: 1 }); -+assert.throws(RangeError, () => d.add(dy)); -+assert.throws(RangeError, () => d.add(dm)); -+assert.throws(RangeError, () => d.add(dw)); -+assert.throws(RangeError, () => dy.add(d)); -+assert.throws(RangeError, () => dm.add(d)); -+assert.throws(RangeError, () => dw.add(d)); -+const relativeTo = Temporal.PlainDate.from("2000-01-01"); -+TemporalHelpers.assertDuration(d.add(dy, { relativeTo }), -+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(d.add(dm, { relativeTo }), -+ 0, 1, 0, 0, 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(d.add(dw, { relativeTo }), -+ 0, 0, 1, 0, 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(dy.add(d, { relativeTo }), -+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(dm.add(d, { relativeTo }), -+ 0, 1, 0, 0, 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(dw.add(d, { relativeTo }), -+ 0, 0, 1, 0, 1, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bead251d02d3ad94d94b971d85facc0ff38d9072 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-wrong-type.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: > -+ Appropriate error thrown when relativeTo cannot be converted to a valid -+ relativeTo string or property bag -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [relativeTo, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [relativeTo, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.add(new Temporal.Duration(0, 0, 0, 0, -24), { relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1c59f3dff7d0de806913316f1826b39d639c7f32 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: relativeTo with years. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const oneYear = new Temporal.Duration(1); -+const days365 = new Temporal.Duration(0, 0, 0, 365); -+TemporalHelpers.assertDuration(oneYear.add(days365, { relativeTo: Temporal.PlainDate.from("2016-01-01") }), -+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, "non-leap year"); -+TemporalHelpers.assertDuration(oneYear.add(days365, { relativeTo: Temporal.PlainDate.from("2015-01-01") }), -+ 1, 11, 0, 30, 0, 0, 0, 0, 0, 0, "leap year"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a08b0dc14f2a3b2a5df65242fd4df52acdb0f30b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-leap-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }); -+instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2f09d730ba6992d83e17dc85511f8eda51e7cb3a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Duration(1); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6ff8c9fb2f10799b977a1cc22d9fae9224de07d6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/add/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.add -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.add(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/blank/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/blank/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..10a594cb246864332fe97c9517ac5882d0c3df26 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/blank/basic.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.duration.prototype.blank -+description: Basic tests for blank. -+features: [Temporal] -+---*/ -+ -+assert.sameValue(Temporal.Duration.from("P3DT1H").blank, false); -+assert.sameValue(Temporal.Duration.from("-PT2H20M30S").blank, false); -+assert.sameValue(Temporal.Duration.from("PT0S").blank, true); -+const zero = Temporal.Duration.from({ -+ years: 0, -+ months: 0, -+ weeks: 0, -+ days: 0, -+ hours: 0, -+ minutes: 0, -+ seconds: 0, -+ milliseconds: 0, -+ microseconds: 0, -+ nanoseconds: 0 -+}); -+assert.sameValue(zero.blank, true); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/negated/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/negated/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f2bae4848a7d51b05ba031e42d788f81aa7763f8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/negated/basic.js -@@ -0,0 +1,51 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.negated -+description: Temporal.Duration.prototype.negated will return negated value of the input duration. -+info: | -+ 3. Return ? CreateTemporalDuration(abs(duration.[[Years]]), abs(duration.[[Months]]), abs(duration.[[Weeks]]), abs(duration.[[Days]]), abs(duration.[[Hours]]), abs(duration.[[Minutes]]), abs(duration.[[Seconds]]), abs(duration.[[Milliseconds]]), abs(duration.[[Microseconds]]), abs(duration.[[Nanoseconds]])). -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+let d1 = new Temporal.Duration(); -+TemporalHelpers.assertDuration( -+ d1.negated(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "zeros"); -+ -+let d2 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+TemporalHelpers.assertDuration( -+ d2.negated(), -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -+ "positive values"); -+ -+let d3 = new Temporal.Duration(1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5); -+TemporalHelpers.assertDuration( -+ d3.negated(), -1e5, -2e5, -3e5, -4e5, -5e5, -6e5, -7e5, -8e5, -9e5, -10e5, -+ "large positive values"); -+ -+let d4 = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10); -+TemporalHelpers.assertDuration( -+ d4.negated(), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -+ "negative values"); -+ -+let d5 = new Temporal.Duration(-1e5, -2e5, -3e5, -4e5, -5e5, -6e5, -7e5, -8e5, -9e5, -10e5); -+TemporalHelpers.assertDuration( -+ d5.negated(), 1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5, -+ "large negative values"); -+ -+let d6 = new Temporal.Duration(1, 0, 3, 0, 5, 0, 7, 0, 9, 0); -+TemporalHelpers.assertDuration( -+ d6.negated(), -1, 0, -3, 0, -5, 0, -7, 0, -9, 0, -+ "some zeros with positive values"); -+ -+let d7 = new Temporal.Duration(-1, 0, -3, 0, -5, 0, -7, 0, -9, 0); -+TemporalHelpers.assertDuration( -+ d7.negated(), 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, -+ "some zeros with negative values"); -+ -+let d8 = new Temporal.Duration(0, -2, 0, -4, 0, -6, 0, -8, 0, -10); -+TemporalHelpers.assertDuration( -+ d8.negated(), 0, 2, 0, 4, 0, 6, 0, 8, 0, 10, -+ "other zeros with negative values"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2c81eabfa02a882006c35eec797d75107720a3bd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/calendar-dateadd-called-with-options-undefined.js -@@ -0,0 +1,73 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: > -+ BuiltinTimeZoneGetInstantFor calls Calendar.dateAdd with undefined as the -+ options value -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarDateAddUndefinedOptions(); -+const timeZone = TemporalHelpers.oneShiftTimeZone(new Temporal.Instant(0n), 3600e9); -+const relativeTo = new Temporal.ZonedDateTime(0n, timeZone, calendar); -+ -+// Rounding with smallestUnit a calendar unit. -+// The calls come from these paths: -+// Duration.round() -> -+// RoundDuration -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// BalanceDurationRelative -> -+// MoveRelativeDate -> calendar.dateAdd() (2x) -+// calendar.dateAdd() -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// BalanceDuration -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+ -+const instance1 = new Temporal.Duration(1, 1, 1, 1, 1); -+instance1.round({ smallestUnit: "days", relativeTo }); -+assert.sameValue(calendar.dateAddCallCount, 9, "rounding with calendar smallestUnit"); -+ -+// Rounding with a non-default largestUnit to cover the path in -+// UnbalanceDurationRelative where larger units are converted into smaller -+// units; and with a smallestUnit larger than days to cover the path in -+// RoundDuration where days are converted into larger units. -+// The calls come from these paths: -+// Duration.round() -> -+// UnbalanceDurationRelative -> MoveRelativeDate -> calendar.dateAdd() -+// RoundDuration -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// MoveRelativeDate -> calendar.dateAdd() (5x) -+// BalanceDurationRelative -+// MoveRelativeDate -> calendar.dateAdd() -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+ -+calendar.dateAddCallCount = 0; -+ -+const instance2 = new Temporal.Duration(0, 1, 1, 1); -+instance2.round({ largestUnit: "weeks", smallestUnit: "weeks", relativeTo }); -+assert.sameValue(calendar.dateAddCallCount, 9, "rounding with non-default largestUnit and calendar smallestUnit"); -+ -+// Rounding with smallestUnit a non-calendar unit, and having the resulting time -+// difference be longer than a calendar day, covering the paths that go through -+// AdjustRoundedDurationDays. -+// The calls come from these paths: -+// Duration.round() -> -+// AdjustRoundedDurationDays -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// AddDuration -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+// BalanceDuration -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+ -+calendar.dateAddCallCount = 0; -+ -+const instance3 = new Temporal.Duration(0, 0, 0, 0, 23, 59, 59, 999, 999, 999); -+instance3.round({ largestUnit: "days", smallestUnit: "hours", roundingMode: "ceil", relativeTo }); -+assert.sameValue(calendar.dateAddCallCount, 7, "rounding with time difference exceeding calendar day"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-default.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-default.js -new file mode 100644 -index 0000000000000000000000000000000000000000..efef710a0886e4525c872aec080036e813056bd0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-default.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: assumes a different default for largestUnit if smallestUnit is larger than the default -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const relativeTo = Temporal.PlainDate.from("2020-01-01"); -+const almostYear = Temporal.Duration.from({ days: 364 }); -+TemporalHelpers.assertDuration(almostYear.round({ smallestUnit: "years", relativeTo }), -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "years"); -+const almostMonth = Temporal.Duration.from({ days: 27 }); -+TemporalHelpers.assertDuration(almostMonth.round({ smallestUnit: "months", relativeTo }), -+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "months"); -+const almostWeek = Temporal.Duration.from({ days: 6 }); -+TemporalHelpers.assertDuration(almostWeek.round({ smallestUnit: "weeks", relativeTo }), -+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "weeks"); -+const almostDay = Temporal.Duration.from({ seconds: 86399 }); -+TemporalHelpers.assertDuration(almostDay.round({ smallestUnit: "days" }), -+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "days"); -+const almostHour = Temporal.Duration.from({ seconds: 3599 }); -+TemporalHelpers.assertDuration(almostHour.round({ smallestUnit: "hours" }), -+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "hours"); -+const almostMinute = Temporal.Duration.from({ seconds: 59 }); -+TemporalHelpers.assertDuration(almostMinute.round({ smallestUnit: "minutes" }), -+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "minutes"); -+const almostSecond = Temporal.Duration.from({ nanoseconds: 999999999 }); -+TemporalHelpers.assertDuration(almostSecond.round({ smallestUnit: "seconds" }), -+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "seconds"); -+const almostMillisecond = Temporal.Duration.from({ nanoseconds: 999999 }); -+TemporalHelpers.assertDuration(almostMillisecond.round({ smallestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "milliseconds"); -+const almostMicrosecond = Temporal.Duration.from({ nanoseconds: 999 }); -+TemporalHelpers.assertDuration(almostMicrosecond.round({ smallestUnit: "microseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "microseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-mismatch.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-mismatch.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7517cb336b91aac4e0d37ccd14efec0dacfc1cd8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/largestunit-smallestunit-mismatch.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: RangeError thrown when smallestUnit is larger than largestUnit -+features: [Temporal] -+---*/ -+ -+const d = new Temporal.Duration(5, 5, 5, 5, 5, 5, 5, 5, 5, 5); -+const relativeTo = Temporal.PlainDate.from('2020-01-01'); -+const units = ["years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds"]; -+for (let largestIdx = 1; largestIdx < units.length; largestIdx++) { -+ for (let smallestIdx = 0; smallestIdx < largestIdx; smallestIdx++) { -+ const largestUnit = units[largestIdx]; -+ const smallestUnit = units[smallestIdx]; -+ assert.throws(RangeError, () => d.round({ largestUnit, smallestUnit, relativeTo }), -+ `${smallestUnit} > ${largestUnit}`); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a224a6e737ae4d665158ef2f69b90061e106f5ad ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/options-wrong-type.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: TypeError thrown when options argument is missing or a non-string primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ undefined, -+ null, -+ true, -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Duration(0, 0, 0, 0, 1); -+assert.throws(TypeError, () => instance.round(), "TypeError on missing options argument"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.round(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7516624cc3e3c9ba015a5aca1c732c5ebaf15e26 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-leap-second.js -@@ -0,0 +1,43 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: Leap second is constrained in both an ISO string and a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+let relativeTo = "2016-12-31T23:59:60"; -+const result1 = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration( -+ result1, -+ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDate relativeTo" -+); -+ -+relativeTo = "2016-12-31T23:59:60+00:00[UTC]"; -+const result2 = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration( -+ result2, -+ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for ZonedDateTime relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result3 = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration( -+ result3, -+ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -+ "second: 60 is valid in a property bag for PlainDate relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60, timeZone: "UTC" }; -+const result4 = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration( -+ result4, -+ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -+ "second: 60 is valid in a property bag for ZonedDateTime relativeTo" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9ec36f6775f374f4588767df263c8b87c3a03076 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: A number as relativeTo option is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const relativeTo = 20191101; -+ -+const result = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration(result, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, "20191101 is a valid ISO string for relativeTo"); -+ -+const numbers = [ -+ 1, -+ -20191101, -+ 1234567890, -+]; -+ -+for (const relativeTo of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.round({ largestUnit: "years", relativeTo }), -+ `Number ${relativeTo} does not convert to a valid ISO string for relativeTo` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6aee637fc195deca3aa20db57062c360e0712568 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: A number as calendar in relativeTo property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const calendar = 19970327; -+ -+let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+const result1 = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration(result1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for relativeTo.calendar"); -+ -+relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+const result2 = instance.round({ largestUnit: "years", relativeTo }); -+TemporalHelpers.assertDuration(result2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for relativeTo.calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.round({ largestUnit: "years", relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar` -+ ); -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.round({ largestUnit: "years", relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2d449a74498d0e70d0754c5ebbfe452c0a2c0b8c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: > -+ Appropriate error thrown when relativeTo.calendar cannot be converted to a -+ calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.round({ largestUnit: "years", relativeTo }), `${description} does not convert to a valid ISO string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.round({ largestUnit: "years", relativeTo }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.round({ largestUnit: "years", relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.round({ largestUnit: "years", relativeTo }), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.round({ largestUnit: "years", relativeTo }), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..32fba37a5a03c5073398b8023b16ec45522503c4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: > -+ Appropriate error thrown when relativeTo cannot be converted to a valid -+ relativeTo string or property bag -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [relativeTo, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.round({ largestUnit: "years", relativeTo }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [relativeTo, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.round({ largestUnit: "years", relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundingmode-invalid-string.js -index 35a9df280769de45f6c806135ba64c7356a1241e..e895dd70f02873cbebd15f815dbae5ce628f05a6 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const duration = new Temporal.Duration(0, 0, 0, 0, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => duration.round({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => duration.round({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundto-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundto-invalid-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3e5a43386b130ee3658db77d417a60c4b4fd2b0f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/roundto-invalid-string.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: RangeError thrown when smallestUnit option not one of the allowed string values -+features: [Temporal] -+---*/ -+ -+const duration = new Temporal.Duration(0, 0, 0, 0, 12, 34, 56, 123, 987, 500); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => duration.round(smallestUnit), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-disallowed-units-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-disallowed-units-string.js -deleted file mode 100644 -index f2cf0b0f016dbbf7141fd9b6a24a230d0bf23178..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-disallowed-units-string.js -+++ /dev/null -@@ -1,26 +0,0 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-temporal.duration.prototype.round --description: Specifically disallowed units for the smallestUnit option --features: [Temporal, arrow-function] -----*/ -- --const instance = new Temporal.Duration(0, 0, 0, 4, 5, 6, 7, 987, 654, 321); --const invalidUnits = [ -- "era", -- "eras", --]; --invalidUnits.forEach((smallestUnit) => { -- assert.throws( -- RangeError, -- () => instance.round({ smallestUnit }), -- `{ smallestUnit: "${smallestUnit}" } should not be allowed as an argument to round` -- ); -- assert.throws( -- RangeError, -- () => instance.round(smallestUnit), -- `"${smallestUnit}" should not be allowed as an argument to round` -- ); --}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-invalid-string.js -index 3d5d884b5272959cc7755aa5b2751096d83370a7..0904c0ccc849785d980f415c7177df4725f9acfa 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit-invalid-string.js -@@ -8,4 +8,20 @@ features: [Temporal] - ---*/ - - const duration = new Temporal.Duration(0, 0, 0, 0, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => duration.round({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => duration.round({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8f62f8928aa92d89046b260b322c43f067309814 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/smallestunit.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: smallestUnit should be taken into account -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d = Temporal.Duration.from({ -+ days: 1, -+ hours: 2, -+ minutes: 3, -+ seconds: 4, -+ milliseconds: 5, -+ microseconds: 6, -+ nanoseconds: 7 -+}); -+const tests = { -+ 'day': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], -+ 'hour': [0, 0, 0, 1, 2, 0, 0, 0, 0, 0], -+ 'minute': [0, 0, 0, 1, 2, 3, 0, 0, 0, 0], -+ 'second': [0, 0, 0, 1, 2, 3, 4, 0, 0, 0], -+ 'millisecond': [0, 0, 0, 1, 2, 3, 4, 5, 0, 0], -+ 'microsecond': [0, 0, 0, 1, 2, 3, 4, 5, 6, 0], -+ 'nanosecond': [0, 0, 0, 1, 2, 3, 4, 5, 6, 7], -+}; -+for (const [smallestUnit, expected] of Object.entries(tests)) { -+ TemporalHelpers.assertDuration(d.round(smallestUnit), ...expected, -+ `"${smallestUnit}" should work as argument`); -+ TemporalHelpers.assertDuration(d.round({ smallestUnit }), ...expected, -+ `"${smallestUnit}" should work in option bag`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..73e01540e2c61d601ca83b3b3e9a29b43534f493 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-leap-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }); -+instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..290099ebed967c66eea3bb173260f211030a975a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Duration(1); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9ac21ea9af663550d6cb7e3017d4faced7067405 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/round/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.round -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.round({ largestUnit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-object-invalid.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-object-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8d823237faaf7fb01d51167c097a098ac25ce32a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-object-invalid.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: Mixed positive and negative values or missing properties always throw -+features: [Temporal] -+---*/ -+ -+const duration = Temporal.Duration.from({ days: 1, minutes: 5 }); -+assert.throws(RangeError, () => duration.subtract({ hours: 1, minutes: -30 }), "mixed signs"); -+assert.throws(TypeError, () => duration.subtract({}), "no properties"); -+assert.throws(TypeError, () => duration.subtract({ month: 12 }), "only singular 'month' property"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1cfa7b4a65804ce45dc69bd340263cb70deca1bb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: String arguments are supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const duration = Temporal.Duration.from({ days: 3, hours: 1, minutes: 10 }); -+const result = duration.subtract('P1DT5M'); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 2, 1, 5, 0, 0, 0, 0, "String argument should be supported"); -+assert.throws(RangeError, () => duration.subtract("2DT5M"), "Invalid string argument should throw"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e63c53b1c9896f4cd4cf8488f8197a3973e4bea6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/basic.js -@@ -0,0 +1,66 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: Basic behavior -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const duration = Temporal.Duration.from({ days: 3, hours: 1, minutes: 10 }); -+TemporalHelpers.assertDuration(duration.subtract({ days: 1, minutes: 5 }), -+ 0, 0, 0, 2, 1, 5, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(duration.subtract(duration), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(duration.subtract({ days: 3 }), -+ 0, 0, 0, 0, 1, 10, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(duration.subtract({ minutes: 10 }), -+ 0, 0, 0, 3, 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(duration.subtract({ minutes: 15 }), -+ 0, 0, 0, 3, 0, 55, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(duration.subtract({ seconds: 30 }), -+ 0, 0, 0, 3, 1, 9, 30, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from('P2DT1H5M').subtract({ days: -1, minutes: -5 }), -+ 0, 0, 0, 3, 1, 10, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(new Temporal.Duration().subtract({ days: -3, hours: -1, minutes: -10 }), -+ 0, 0, 0, 3, 1, 10, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from('PT1H10M').subtract({ days: -3 }), -+ 0, 0, 0, 3, 1, 10, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from('P3DT1H').subtract({ minutes: -10 }), -+ 0, 0, 0, 3, 1, 10, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from('P3DT55M').subtract({ minutes: -15 }), -+ 0, 0, 0, 3, 1, 10, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(Temporal.Duration.from('P3DT1H9M30S').subtract({ seconds: -30 }), -+ 0, 0, 0, 3, 1, 10, 0, 0, 0, 0); -+const d = Temporal.Duration.from({ -+ minutes: 100, -+ seconds: 100, -+ milliseconds: 2000, -+ microseconds: 2000, -+ nanoseconds: 2000 -+}); -+const less = Temporal.Duration.from({ -+ minutes: 10, -+ seconds: 10, -+ milliseconds: 500, -+ microseconds: 500, -+ nanoseconds: 500 -+}); -+TemporalHelpers.assertDuration(d.subtract(less), -+ 0, 0, 0, 0, 0, 91, 31, 501, 501, 500); -+const tenDays = Temporal.Duration.from('P10D'); -+const tenMinutes = Temporal.Duration.from('PT10M'); -+TemporalHelpers.assertDuration(tenDays.subtract({ days: 15 }), -+ 0, 0, 0, -5, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(tenMinutes.subtract({ minutes: 15 }), -+ 0, 0, 0, 0, 0, -5, 0, 0, 0, 0); -+const d1 = Temporal.Duration.from({ hours: 1, seconds: 60 }); -+TemporalHelpers.assertDuration(d1.subtract({ minutes: 122 }), -+ 0, 0, 0, 0, -1, -1, 0, 0, 0, 0); -+const d2 = Temporal.Duration.from({ hours: 1, seconds: 3721 }); -+TemporalHelpers.assertDuration(d2.subtract({ minutes: 61, nanoseconds: 3722000000001 }), -+ 0, 0, 0, 0, 0, -1, -1, 0, 0, -1); -+TemporalHelpers.assertDuration(duration.subtract({ month: 1, days: 1 }), -+ 0, 0, 0, 2, 1, 10, 0, 0, 0, 0, -+ "incorrectly-spelled properties are ignored"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-undefined.js -index 959fb77c613a317e44adc93187a22be7d28cf275..0f6e4ac0e49754d119fa67818060bc60766f23ca 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-undefined.js -@@ -4,10 +4,29 @@ - /*--- - esid: sec-temporal.duration.prototype.subtract - description: Verify that undefined options are handled correctly. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const duration1 = new Temporal.Duration(1); --const duration2 = new Temporal.Duration(0, 12); --assert.throws(RangeError, () => duration1.subtract(duration2), "default relativeTo is undefined"); --assert.throws(RangeError, () => duration1.subtract(duration2, undefined), "default relativeTo is undefined"); -+const duration2 = new Temporal.Duration(0, 24); -+const duration3 = new Temporal.Duration(0, 0, 0, 1); -+const duration4 = new Temporal.Duration(0, 0, 0, 0, 48); -+ -+assert.throws(RangeError, () => duration1.subtract(duration2), "no options with years"); -+TemporalHelpers.assertDuration(duration3.subtract(duration4), -+ 0, 0, 0, /* days = */ -1, 0, 0, 0, 0, 0, 0, -+ "no options with days"); -+ -+const optionValues = [ -+ [undefined, "undefined"], -+ [{}, "plain object"], -+ [() => {}, "lambda"], -+]; -+for (const [options, description] of optionValues) { -+ assert.throws(RangeError, () => duration1.subtract(duration2, options), -+ `options ${description} with years`); -+ TemporalHelpers.assertDuration(duration3.subtract(duration4, options), -+ 0, 0, 0, /* days = */ -1, 0, 0, 0, 0, 0, 0, -+ `options ${description} with days`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4bb257b88b268d6108d8b0385621dc687557265f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Duration(0, 0, 0, 0, 1); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.subtract({ hours: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c9af63b33b1e8266d48c17de660f4e1c7969f000 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-leap-second.js -@@ -0,0 +1,43 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: Leap second is constrained in both an ISO string and a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+let relativeTo = "2016-12-31T23:59:60"; -+const result1 = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result1, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDate relativeTo" -+); -+ -+relativeTo = "2016-12-31T23:59:60+00:00[UTC]"; -+const result2 = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result2, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for ZonedDateTime relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result3 = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result3, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is valid in a property bag for PlainDate relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60, timeZone: "UTC" }; -+const result4 = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration( -+ result4, -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is valid in a property bag for ZonedDateTime relativeTo" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e54edd86495c8cc4a68ce5277130b3afa52c92e1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: relativeTo with months. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const oneMonth = new Temporal.Duration(0, 1); -+const days30 = new Temporal.Duration(0, 0, 0, 30); -+TemporalHelpers.assertDuration(oneMonth.subtract(days30, { relativeTo: Temporal.PlainDate.from('2018-02-01') }), -+ 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, "February"); -+TemporalHelpers.assertDuration(oneMonth.subtract(days30, { relativeTo: Temporal.PlainDate.from('2018-03-01') }), -+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "March"); -+TemporalHelpers.assertDuration(oneMonth.subtract(days30, { relativeTo: Temporal.PlainDate.from('2018-04-01') }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "April"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..40d11706650f99c6eff7eb20ece49959c6b50737 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: A number as relativeTo option is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const relativeTo = 20191101; -+ -+const result = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration(result, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "20191101 is a valid ISO string for relativeTo"); -+ -+const numbers = [ -+ 1, -+ -20191101, -+ 1234567890, -+]; -+ -+for (const relativeTo of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), -+ `Number ${relativeTo} does not convert to a valid ISO string for relativeTo` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cbb51076bc2ed1b15e83f9204ed8db7ef287219d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: relativeTo with years. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d1 = new Temporal.Duration(0, 2, 1, 4); -+const d2 = new Temporal.Duration(0, 1, 1, 1); -+const relativeTo = new Temporal.PlainDate(2000, 1, 1); -+TemporalHelpers.assertDuration(d1.subtract(d2, { relativeTo }), -+ 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, -+ "first this is resolved against relativeTo, then the argument against relativeTo + this"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d00e30568fce1a7ef9884348b409b5336312bc6a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: A number as calendar in relativeTo property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const calendar = 19970327; -+ -+let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+const result1 = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration(result1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for relativeTo.calendar"); -+ -+relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+const result2 = instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }); -+TemporalHelpers.assertDuration(result2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for relativeTo.calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar` -+ ); -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5f65a27695e296ec0ecdd87608e6edd818b3ade4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: > -+ Appropriate error thrown when relativeTo.calendar cannot be converted to a -+ calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `${description} does not convert to a valid ISO string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-required.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-required.js -new file mode 100644 -index 0000000000000000000000000000000000000000..893a9e11f521b48730884e644201805f8f38bbf4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-required.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: relativeTo is required if the largest unit is at least weeks. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d = Temporal.Duration.from({ hours: 1 }); -+const dy = Temporal.Duration.from({ years: 1, hours: 1 }); -+const dm = Temporal.Duration.from({ months: 1, hours: 1 }); -+const dw = Temporal.Duration.from({ weeks: 1, hours: 1 }); -+assert.throws(RangeError, () => d.subtract(dy)); -+assert.throws(RangeError, () => d.subtract(dm)); -+assert.throws(RangeError, () => d.subtract(dw)); -+assert.throws(RangeError, () => dy.subtract(d)); -+assert.throws(RangeError, () => dm.subtract(d)); -+assert.throws(RangeError, () => dw.subtract(d)); -+const relativeTo = Temporal.PlainDate.from("2000-01-01"); -+TemporalHelpers.assertDuration(d.subtract(dy, { relativeTo }), -+ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(d.subtract(dm, { relativeTo }), -+ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(d.subtract(dw, { relativeTo }), -+ 0, 0, -1, 0, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(dy.subtract(d, { relativeTo }), -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(dm.subtract(d, { relativeTo }), -+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(dw.subtract(d, { relativeTo }), -+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..45118c033d9b9c17e307d4e51827b0d274d1c548 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-wrong-type.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: > -+ Appropriate error thrown when relativeTo cannot be converted to a valid -+ relativeTo string or property bag -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 1); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [relativeTo, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [relativeTo, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.subtract(new Temporal.Duration(0, 0, 0, 0, 24), { relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js -new file mode 100644 -index 0000000000000000000000000000000000000000..86a4090f9324736b88ccb314d007878fe7360c08 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: relativeTo with years. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const oneYear = new Temporal.Duration(1); -+const days365 = new Temporal.Duration(0, 0, 0, 365); -+TemporalHelpers.assertDuration(oneYear.subtract(days365, { relativeTo: Temporal.PlainDate.from("2017-01-01") }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "non-leap year"); -+TemporalHelpers.assertDuration(oneYear.subtract(days365, { relativeTo: Temporal.PlainDate.from("2016-01-01") }), -+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "leap year"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5cd39edc248c0e254f862cd31582d1fb11701121 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-leap-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }); -+instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..251016b4322060b4df609d7cea7f33df0496f738 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Duration(1); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3f6d1f020d4465ee2741434b5b81a4c6725ff1ea ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/subtract/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.subtract -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.subtract(new Temporal.Duration(1), { relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toJSON/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toJSON/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8cadc51661c8de2daebe0dcacefd21063cc7e20b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toJSON/basic.js -@@ -0,0 +1,240 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tojson -+description: Temporal.Duration.prototype.toJSON will return correct iso8601 string for the given duration. -+info: | -+ 1. Let duration be the this value. -+ 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). -+ 3. Return ! TemporalDurationToString(duration.[[Years]], duration.[[Months]], duration.[[Weeks]], duration.[[Days]], duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]], "auto"). -+features: [Temporal] -+---*/ -+ -+let d = new Temporal.Duration(); -+assert.sameValue(d.toJSON(), "PT0S", "zero duration"); -+ -+d = new Temporal.Duration(1); -+assert.sameValue(d.toJSON(), "P1Y", "positive small years"); -+d = new Temporal.Duration(-1); -+assert.sameValue(d.toJSON(), "-P1Y", "negative small years"); -+d = new Temporal.Duration(1234567890); -+assert.sameValue(d.toJSON(), "P1234567890Y", "positive large years"); -+d = new Temporal.Duration(-1234567890); -+assert.sameValue(d.toJSON(), "-P1234567890Y", "negative large years"); -+ -+d = new Temporal.Duration(1, 2); -+assert.sameValue(d.toJSON(), "P1Y2M", "positive years and months"); -+d = new Temporal.Duration(-1, -2); -+assert.sameValue(d.toJSON(), "-P1Y2M", "negative years and months"); -+d = new Temporal.Duration(0, 2); -+assert.sameValue(d.toJSON(), "P2M", "positive small months"); -+d = new Temporal.Duration(0,-2); -+assert.sameValue(d.toJSON(), "-P2M", "negative small months"); -+d = new Temporal.Duration(0, 1234567890); -+assert.sameValue(d.toJSON(), "P1234567890M", "positive large months"); -+d = new Temporal.Duration(0,-1234567890); -+assert.sameValue(d.toJSON(), "-P1234567890M", "negative large months"); -+ -+d = new Temporal.Duration(1, 2, 3); -+assert.sameValue(d.toJSON(), "P1Y2M3W", "positive years, months, weeks"); -+d = new Temporal.Duration(-1, -2, -3); -+assert.sameValue(d.toJSON(), "-P1Y2M3W", "negative years, months, weeks"); -+d = new Temporal.Duration(0, 0, 3); -+assert.sameValue(d.toJSON(), "P3W", "positive small weeks"); -+d = new Temporal.Duration(0, 0, -3); -+assert.sameValue(d.toJSON(), "-P3W", "negative small weeks"); -+d = new Temporal.Duration(1, 0, 3); -+assert.sameValue(d.toJSON(), "P1Y3W", "positive years and weeks"); -+d = new Temporal.Duration(-1, 0, -3); -+assert.sameValue(d.toJSON(), "-P1Y3W", "negative years and weeks"); -+d = new Temporal.Duration(0, 2, 3); -+assert.sameValue(d.toJSON(), "P2M3W", "positive months and weeks"); -+d = new Temporal.Duration(0, -2, -3); -+assert.sameValue(d.toJSON(), "-P2M3W", "negative months and weeks"); -+d = new Temporal.Duration(0, 0, 1234567890); -+assert.sameValue(d.toJSON(), "P1234567890W", "positive large weeks"); -+d = new Temporal.Duration(0, 0, -1234567890); -+assert.sameValue(d.toJSON(), "-P1234567890W", "negative large weeks"); -+ -+d = new Temporal.Duration(1, 2, 3, 4); -+assert.sameValue(d.toJSON(), "P1Y2M3W4D", "positive years, months, weeks, days"); -+d = new Temporal.Duration(-1, -2, -3, -4); -+assert.sameValue(d.toJSON(), "-P1Y2M3W4D", "negative years, months, weeks, days"); -+d = new Temporal.Duration(0, 0, 0, 1234567890); -+assert.sameValue(d.toJSON(), "P1234567890D", "positive large days"); -+d = new Temporal.Duration(0, 0, 0, -1234567890); -+assert.sameValue(d.toJSON(), "-P1234567890D", "negative large days"); -+d = new Temporal.Duration(0, 0, 0, 4); -+assert.sameValue(d.toJSON(), "P4D", "positive small days"); -+d = new Temporal.Duration(0, 0, 0, -4); -+assert.sameValue(d.toJSON(), "-P4D", "negative small days"); -+d = new Temporal.Duration(1, 0, 0, 4); -+assert.sameValue(d.toJSON(), "P1Y4D", "positive years and days"); -+d = new Temporal.Duration(-1, 0, 0, -4); -+assert.sameValue(d.toJSON(), "-P1Y4D", "negative years and days"); -+d = new Temporal.Duration(0, 2, 0, 4); -+assert.sameValue(d.toJSON(), "P2M4D", "positive months and days"); -+d = new Temporal.Duration(0, -2, 0, -4); -+assert.sameValue(d.toJSON(), "-P2M4D", "negative months and days"); -+d = new Temporal.Duration(0, 0, 3, 4); -+assert.sameValue(d.toJSON(), "P3W4D", "positive weeks and days"); -+d = new Temporal.Duration(0, 0, -3, -4); -+assert.sameValue(d.toJSON(), "-P3W4D", "negative weeks and days"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 5); -+assert.sameValue(d.toJSON(), "PT5H", "positive hours"); -+d = new Temporal.Duration(0, 0, 0, 0, -5); -+assert.sameValue(d.toJSON(), "-PT5H", "negative hours"); -+d = new Temporal.Duration(1, 0, 0, 0, 5); -+assert.sameValue(d.toJSON(), "P1YT5H", "positive years and hours"); -+d = new Temporal.Duration(-1, 0, 0, 0, -5); -+assert.sameValue(d.toJSON(), "-P1YT5H", "negative years and hours"); -+d = new Temporal.Duration(0, 2, 0, 0, 5); -+assert.sameValue(d.toJSON(), "P2MT5H", "positive months and hours"); -+d = new Temporal.Duration(0, -2, 0, 0, -5); -+assert.sameValue(d.toJSON(), "-P2MT5H", "negative months and hours"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 0, 6); -+assert.sameValue(d.toJSON(), "PT6M", "positive minutes"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, -6); -+assert.sameValue(d.toJSON(), "-PT6M", "negative minutes"); -+d = new Temporal.Duration(0, 0, 0, 0, 5, 6); -+assert.sameValue(d.toJSON(), "PT5H6M", "positive hours and minutes"); -+d = new Temporal.Duration(0, 0, 0, 0, -5, -6); -+assert.sameValue(d.toJSON(), "-PT5H6M", "negative hours and minutes"); -+d = new Temporal.Duration(0, 0, 3, 0, 0, 6); -+assert.sameValue(d.toJSON(), "P3WT6M", "positive weeks and minutes"); -+d = new Temporal.Duration(0, 0, -3, 0, 0, -6); -+assert.sameValue(d.toJSON(), "-P3WT6M", "negative weeks and minutes"); -+d = new Temporal.Duration(0, 0, 0, 4, 0, 6); -+assert.sameValue(d.toJSON(), "P4DT6M", "positive days and minutes"); -+d = new Temporal.Duration(0, 0, 0, -4, 0, -6); -+assert.sameValue(d.toJSON(), "-P4DT6M", "negative days and minutes"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 7); -+assert.sameValue(d.toJSON(), "PT7S", "positive seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, -7); -+assert.sameValue(d.toJSON(), "-PT7S", "negative seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 5, 0, 7); -+assert.sameValue(d.toJSON(), "PT5H7S", "positive hours and seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, -5, 0, -7); -+assert.sameValue(d.toJSON(), "-PT5H7S", "negative hours and seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 6, 7); -+assert.sameValue(d.toJSON(), "PT6M7S", "positive minutes and seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, -6, -7); -+assert.sameValue(d.toJSON(), "-PT6M7S", "negative minutes and seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 5, 6, 7); -+assert.sameValue(d.toJSON(), "PT5H6M7S", "positive hours, minutes, seconds"); -+d = new Temporal.Duration(0, 0, 0, 0, -5, -6, -7); -+assert.sameValue(d.toJSON(), "-PT5H6M7S", "negative hours, minutes, seconds"); -+d = new Temporal.Duration(1, 0, 0, 0, 5, 6, 7); -+assert.sameValue(d.toJSON(), "P1YT5H6M7S", "positive years, hours, minutes, seconds"); -+d = new Temporal.Duration(-1, 0, 0, 0, -5, -6, -7); -+assert.sameValue(d.toJSON(), "-P1YT5H6M7S", "negative years, hours, minutes, seconds"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 8); -+assert.sameValue(d.toJSON(), "PT0.008S", "positive milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -8); -+assert.sameValue(d.toJSON(), "-PT0.008S", "negative milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 80); -+assert.sameValue(d.toJSON(), "PT0.08S", "positive milliseconds multiple of 10"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -80); -+assert.sameValue(d.toJSON(), "-PT0.08S", "negative milliseconds multiple of 10"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 87); -+assert.sameValue(d.toJSON(), "PT0.087S", "positive two-digit milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -87); -+assert.sameValue(d.toJSON(), "-PT0.087S", "negative two-digit milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 876); -+assert.sameValue(d.toJSON(), "PT0.876S", "positive three-digit milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -876); -+assert.sameValue(d.toJSON(), "-PT0.876S", "negative three-digit milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 876543); -+assert.sameValue(d.toJSON(), "PT876.543S", "positive large milliseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -876543); -+assert.sameValue(d.toJSON(), "-PT876.543S", "negative large milliseconds"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 9); -+assert.sameValue(d.toJSON(), "PT0.000009S", "positive microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -9); -+assert.sameValue(d.toJSON(), "-PT0.000009S", "negative microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 90); -+assert.sameValue(d.toJSON(), "PT0.00009S", "positive microseconds multiple of 10"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -90); -+assert.sameValue(d.toJSON(), "-PT0.00009S", "negative microseconds multiple of 10"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 98); -+assert.sameValue(d.toJSON(), "PT0.000098S", "positive two-digit microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -98); -+assert.sameValue(d.toJSON(), "-PT0.000098S", "negative two-digit microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 900); -+assert.sameValue(d.toJSON(), "PT0.0009S", "positive microseconds multiple of 100"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -900); -+assert.sameValue(d.toJSON(), "-PT0.0009S", "negative microseconds multiple of 100"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 987); -+assert.sameValue(d.toJSON(), "PT0.000987S", "positive three-digit microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -987); -+assert.sameValue(d.toJSON(), "-PT0.000987S", "negative three-digit microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 987654); -+assert.sameValue(d.toJSON(), "PT0.987654S", "positive large microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -987654); -+assert.sameValue(d.toJSON(), "-PT0.987654S", "negative large microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 987654321); -+assert.sameValue(d.toJSON(), "PT987.654321S", "positive larger microseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, -987654321); -+assert.sameValue(d.toJSON(), "-PT987.654321S", "negative larger microseconds"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 1); -+assert.sameValue(d.toJSON(), "PT0.000000001S", "positive nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -1); -+assert.sameValue(d.toJSON(), "-PT0.000000001S", "negative nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 10); -+assert.sameValue(d.toJSON(), "PT0.00000001S", "positive nanoseconds multiple of 10"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -10); -+assert.sameValue(d.toJSON(), "-PT0.00000001S", "negative nanoseconds multiple of 10"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 12); -+assert.sameValue(d.toJSON(), "PT0.000000012S", "positive two-digit nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -12); -+assert.sameValue(d.toJSON(), "-PT0.000000012S", "negative two-digit nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 100); -+assert.sameValue(d.toJSON(), "PT0.0000001S", "positive nanoseconds multiple of 100"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -100); -+assert.sameValue(d.toJSON(), "-PT0.0000001S", "negative nanoseconds multiple of 100"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 123); -+assert.sameValue(d.toJSON(), "PT0.000000123S", "positive three-digit nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -123); -+assert.sameValue(d.toJSON(), "-PT0.000000123S", "negative three-digit nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 123456); -+assert.sameValue(d.toJSON(), "PT0.000123456S", "positive large nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -123456); -+assert.sameValue(d.toJSON(), "-PT0.000123456S", "negative large nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 123456789); -+assert.sameValue(d.toJSON(), "PT0.123456789S", "positive larger nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -123456789); -+assert.sameValue(d.toJSON(), "-PT0.123456789S", "negative larger nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, 1234567891); -+assert.sameValue(d.toJSON(), "PT1.234567891S", "positive even larger nanoseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 0, 0, -1234567891); -+assert.sameValue(d.toJSON(), "-PT1.234567891S", "negative even larger nanoseconds"); -+ -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 4, 3, 2, 1); -+assert.sameValue(d.toJSON(), "PT4.003002001S", "positive seconds and subseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, -4, -3, -2, -1); -+assert.sameValue(d.toJSON(), "-PT4.003002001S", "negative seconds and subseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 4, 3, 2, 90001); -+assert.sameValue(d.toJSON(), "PT4.003092001S", "positive seconds and large subseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, -4, -3, -2, -90001); -+assert.sameValue(d.toJSON(), "-PT4.003092001S", "negative seconds and large subseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, 4, 3, 2, 90080001); -+assert.sameValue(d.toJSON(), "PT4.093082001S", "positive seconds and larger subseconds"); -+d = new Temporal.Duration(0, 0, 0, 0, 0, 0, -4, -3, -2, -90080001); -+assert.sameValue(d.toJSON(), "-PT4.093082001S", "negative seconds and larger subseconds"); -+ -+d = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 1); -+assert.sameValue(d.toJSON(), "P1Y2M3W4DT5H6M7.008009001S", "all fields positive"); -+d = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -1); -+assert.sameValue(d.toJSON(), "-P1Y2M3W4DT5H6M7.008009001S", "all fields negative"); -+ -+d = new Temporal.Duration(1234, 2345, 3456, 4567, 5678, 6789, 7890, 890, 901, 123); -+assert.sameValue(d.toJSON(), "P1234Y2345M3456W4567DT5678H6789M7890.890901123S", "all fields large and positive"); -+d = new Temporal.Duration(-1234, -2345, -3456, -4567, -5678, -6789, -7890, -890, -901, -123); -+assert.sameValue(d.toJSON(), "-P1234Y2345M3456W4567DT5678H6789M7890.890901123S", "all fields large and negative"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toJSON/options.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toJSON/options.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7728dcc2e2e596d6203d44a54efaeeb3a0809112 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toJSON/options.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tojson -+description: Temporal.Duration.prototype.toJSON does not support options, unlike toString. -+features: [Temporal] -+---*/ -+ -+let called = 0; -+const options = new Proxy({}, { -+ get() { -+ ++called; -+ } -+}); -+const d = new Temporal.Duration(1, 2); -+assert.sameValue(d.toJSON(options), "P1Y2M"); -+assert.sameValue(called, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/balance.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/balance.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f66832a0c957d8795c93d70bd910416d8abb28b6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/balance.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: Verify that values are balanced correctly. -+features: [Temporal] -+---*/ -+ -+assert.sameValue( -+ Temporal.Duration.from({ milliseconds: 3500 }).toString(), -+ "PT3.5S"); -+assert.sameValue( -+ Temporal.Duration.from({ microseconds: 3500 }).toString(), -+ "PT0.0035S"); -+assert.sameValue( -+ Temporal.Duration.from({ nanoseconds: 3500 }).toString(), -+ "PT0.0000035S"); -+assert.sameValue( -+ new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 1111, 1111, 1111).toString(), -+ "PT1.112112111S"); -+assert.sameValue( -+ Temporal.Duration.from({ seconds: 120, milliseconds: 3500 }).toString(), -+ "PT123.5S"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-auto.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-auto.js -new file mode 100644 -index 0000000000000000000000000000000000000000..941b9dce931f2303e42ff57e5fb3d11cf8b1628d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-auto.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: auto value for fractionalSecondDigits option -+features: [Temporal] -+---*/ -+ -+const wholeSeconds = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7); -+const subSeconds = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650); -+ -+const tests = [ -+ [wholeSeconds, "P1Y2M3W4DT5H6M7S"], -+ [subSeconds, "P1Y2M3W4DT5H6M7.98765S"], -+]; -+ -+for (const [duration, expected] of tests) { -+ assert.sameValue(duration.toString(), expected, "default is to emit seconds and drop trailing zeroes"); -+ assert.sameValue(duration.toString({ fractionalSecondDigits: "auto" }), expected, "auto is the default"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-invalid-string.js -index 1cb51f820eb1e58c59bd66cf7c413f6fb56ff5d8..5af9938e232d9d8a34961ab83caf3f8c7d76b49b 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-invalid-string.js -@@ -16,4 +16,7 @@ features: [Temporal] - - const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650, 0); - --assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: "other string" })); -+for (const fractionalSecondDigits of ["other string", "AUTO", "not-auto", "autos", "auto\0"]) { -+ assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits }), -+ `"${fractionalSecondDigits}" is not a valid value for fractionalSecondDigits`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..764986cb2e45fb4148061adf43996350186c4dfa ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-number.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: Number for fractionalSecondDigits option -+features: [Temporal] -+---*/ -+ -+const wholeSeconds = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7); -+const subSeconds = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650); -+ -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 0 }), "P1Y2M3W4DT5H6M7S", -+ "truncates 4 decimal places to 0"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 2 }), "P1Y2M3W4DT5H6M7.00S", -+ "pads whole seconds to 2 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 2 }), "P1Y2M3W4DT5H6M7.98S", -+ "truncates 4 decimal places to 2"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 3 }), "P1Y2M3W4DT5H6M7.987S", -+ "truncates 4 decimal places to 3"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 6 }), "P1Y2M3W4DT5H6M7.987650S", -+ "pads 4 decimal places to 6"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 7 }), "P1Y2M3W4DT5H6M7.0000000S", -+ "pads whole seconds to 7 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 7 }), "P1Y2M3W4DT5H6M7.9876500S", -+ "pads 4 decimal places to 7"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 9 }), "P1Y2M3W4DT5H6M7.987650000S", -+ "pads 4 decimal places to 9"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-out-of-range.js -index d9f4837d3cbc58383fa1dcfdc896a8cac6763e92..ab73ad69bd1c6c63dc2a04d2e0327618769f6178 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-out-of-range.js -@@ -16,5 +16,11 @@ features: [Temporal] - - const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650, 0); - --assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: -1 })); --assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: 10 })); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: -Infinity }), -+ "−∞ is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: -1 }), -+ "−1 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: 10 }), -+ "10 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: Infinity }), -+ "∞ is out of range for fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-undefined.js -index 2c3af23ae926fa68270726ce22d0187927c8cf7b..292b8df300abf3a83b470b1f14e49cd41438406e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-undefined.js -@@ -16,10 +16,21 @@ info: | - features: [Temporal] - ---*/ - --const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650, 0); -+const wholeSeconds = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7); -+const subSeconds = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650); - --const explicit = duration.toString({ fractionalSecondDigits: undefined }); --assert.sameValue(explicit, "P1Y2M3W4DT5H6M7.98765S", "default fractionalSecondDigits is auto"); -+const tests = [ -+ [wholeSeconds, "P1Y2M3W4DT5H6M7S"], -+ [subSeconds, "P1Y2M3W4DT5H6M7.98765S"], -+]; - --const implicit = duration.toString({}); --assert.sameValue(implicit, "P1Y2M3W4DT5H6M7.98765S", "default fractionalSecondDigits is auto"); -+for (const [duration, expected] of tests) { -+ const explicit = duration.toString({ fractionalSecondDigits: undefined }); -+ assert.sameValue(explicit, expected, "default fractionalSecondDigits is auto (property present but undefined)"); -+ -+ const implicit = duration.toString({}); -+ assert.sameValue(implicit, expected, "default fractionalSecondDigits is auto (property not present)"); -+ -+ const lambda = duration.toString(() => {}); -+ assert.sameValue(lambda, expected, "default fractionalSecondDigits is auto (property not present, function object)"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-wrong-type.js -index 143de7c3440c194dd145dc16b93f9f4596388179..625daaff1da98ab27eb6248d2ff4deeb7706b9e9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/fractionalseconddigits-wrong-type.js -@@ -22,4 +22,26 @@ features: [Temporal] - ---*/ - - const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 650, 0); --TemporalHelpers.checkFractionalSecondDigitsOptionWrongType(duration); -+ -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: null }), -+ "null is not a number and converts to the string 'null' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: true }), -+ "true is not a number and converts to the string 'true' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: false }), -+ "false is not a number and converts to the string 'false' which is not valid for fractionalSecondDigits"); -+assert.throws(TypeError, () => duration.toString({ fractionalSecondDigits: Symbol() }), -+ "symbols are not numbers and cannot convert to strings"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: 2n }), -+ "bigints are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => duration.toString({ fractionalSecondDigits: {} }), -+ "plain objects are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+ -+const expected = [ -+ "get fractionalSecondDigits.toString", -+ "call fractionalSecondDigits.toString", -+]; -+const actual = []; -+const observer = TemporalHelpers.toPrimitiveObserver(actual, "auto", "fractionalSecondDigits"); -+const result = duration.toString({ fractionalSecondDigits: observer }); -+assert.sameValue(result, "P1Y2M3W4DT5H6M7.98765S", "object with toString uses toString return value"); -+assert.compareArray(actual, expected, "object with toString calls toString and not valueOf"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/negative-components.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/negative-components.js -index 7bfc8232a52c6c9157ae4749309eddf6efdb66f1..2022f4bd4f44cbde57cf712cbeedfda635bc9871 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/negative-components.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/negative-components.js -@@ -6,6 +6,33 @@ esid: sec-temporal.duration.prototype.tostring - description: Temporal.Duration.toString handles negative components - features: [Temporal] - ---*/ --const d = new Temporal.Duration(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1); --const expected = "-P1Y1M1W1DT1H1M1.001001001S"; --assert.sameValue(d.toString(), expected, "toString with negative components"); -+assert.sameValue( -+ new Temporal.Duration(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1).toString(), -+ "-P1Y1M1W1DT1H1M1.001001001S"); -+assert.sameValue( -+ Temporal.Duration.from({ milliseconds: -250 }).toString(), -+ "-PT0.25S"); -+assert.sameValue( -+ Temporal.Duration.from({ milliseconds: -3500 }).toString(), -+ "-PT3.5S"); -+assert.sameValue( -+ Temporal.Duration.from({ microseconds: -250 }).toString(), -+ "-PT0.00025S"); -+assert.sameValue( -+ Temporal.Duration.from({ microseconds: -3500 }).toString(), -+ "-PT0.0035S"); -+assert.sameValue( -+ Temporal.Duration.from({ nanoseconds: -250 }).toString(), -+ "-PT0.00000025S"); -+assert.sameValue( -+ Temporal.Duration.from({ nanoseconds: -3500 }).toString(), -+ "-PT0.0000035S"); -+assert.sameValue( -+ new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -1111, -1111, -1111).toString(), -+ "-PT1.112112111S"); -+assert.sameValue( -+ Temporal.Duration.from({ seconds: -120, milliseconds: -3500 }).toString(), -+ "-PT123.5S"); -+assert.sameValue( -+ Temporal.Duration.from({ weeks: -1, days: -1 }).toString(), -+ "-P1W1D"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7cd68050a11b1a7edbe656f847af1a89ec6bc8a1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Duration(0, 0, 0, 0, 1); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cdef0c527419ce2ce16bca2cdb7a1d991e1609e5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-ceil.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: ceil value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 123, 987, 500); -+ -+const result1 = duration.toString({ smallestUnit: "microsecond", roundingMode: "ceil" }); -+assert.sameValue(result1, "P1Y2M3W4DT5H6M7.123988S", -+ "roundingMode is ceil (with 6 digits from smallestUnit)"); -+ -+const result2 = duration.toString({ fractionalSecondDigits: 6, roundingMode: "ceil" }); -+assert.sameValue(result2, "P1Y2M3W4DT5H6M7.123988S", -+ "roundingMode is ceil (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = duration.toString({ smallestUnit: "millisecond", roundingMode: "ceil" }); -+assert.sameValue(result3, "P1Y2M3W4DT5H6M7.124S", -+ "roundingMode is ceil (with 3 digits from smallestUnit)"); -+ -+const result4 = duration.toString({ fractionalSecondDigits: 3, roundingMode: "ceil" }); -+assert.sameValue(result4, "P1Y2M3W4DT5H6M7.124S", -+ "roundingMode is ceil (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = duration.toString({ smallestUnit: "second", roundingMode: "ceil" }); -+assert.sameValue(result5, "P1Y2M3W4DT5H6M8S", -+ "roundingMode is ceil (with 0 digits from smallestUnit)"); -+ -+const result6 = duration.toString({ fractionalSecondDigits: 0, roundingMode: "ceil" }); -+assert.sameValue(result6, "P1Y2M3W4DT5H6M8S", -+ "roundingMode is ceil (with 0 digits from fractionalSecondDigits)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e1ee18b5c8e950eafae6cced658caef9d53ba78f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-floor.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: floor value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 123, 987, 500); -+ -+const result1 = duration.toString({ smallestUnit: "microsecond", roundingMode: "floor" }); -+assert.sameValue(result1, "P1Y2M3W4DT5H6M7.123987S", -+ "roundingMode is floor (with 6 digits from smallestUnit)"); -+ -+const result2 = duration.toString({ fractionalSecondDigits: 6, roundingMode: "floor" }); -+assert.sameValue(result2, "P1Y2M3W4DT5H6M7.123987S", -+ "roundingMode is floor (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = duration.toString({ smallestUnit: "millisecond", roundingMode: "floor" }); -+assert.sameValue(result3, "P1Y2M3W4DT5H6M7.123S", -+ "roundingMode is floor (with 3 digits from smallestUnit)"); -+ -+const result4 = duration.toString({ fractionalSecondDigits: 3, roundingMode: "floor" }); -+assert.sameValue(result4, "P1Y2M3W4DT5H6M7.123S", -+ "roundingMode is floor (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = duration.toString({ smallestUnit: "second", roundingMode: "floor" }); -+assert.sameValue(result5, "P1Y2M3W4DT5H6M7S", -+ "roundingMode is floor (with 0 digits from smallestUnit)"); -+ -+const result6 = duration.toString({ fractionalSecondDigits: 0, roundingMode: "floor" }); -+assert.sameValue(result6, "P1Y2M3W4DT5H6M7S", -+ "roundingMode is floor (with 0 digits from fractionalSecondDigits)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9a11468a1265f22f98884d8501c418682ac71801 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-halfExpand.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: halfExpand value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 123, 987, 500); -+ -+const result1 = duration.toString({ smallestUnit: "microsecond", roundingMode: "halfExpand" }); -+assert.sameValue(result1, "P1Y2M3W4DT5H6M7.123988S", -+ "roundingMode is halfExpand (with 6 digits from smallestUnit)"); -+ -+const result2 = duration.toString({ fractionalSecondDigits: 6, roundingMode: "halfExpand" }); -+assert.sameValue(result2, "P1Y2M3W4DT5H6M7.123988S", -+ "roundingMode is halfExpand (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = duration.toString({ smallestUnit: "millisecond", roundingMode: "halfExpand" }); -+assert.sameValue(result3, "P1Y2M3W4DT5H6M7.124S", -+ "roundingMode is halfExpand (with 3 digits from smallestUnit)"); -+ -+const result4 = duration.toString({ fractionalSecondDigits: 3, roundingMode: "halfExpand" }); -+assert.sameValue(result4, "P1Y2M3W4DT5H6M7.124S", -+ "roundingMode is halfExpand (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = duration.toString({ smallestUnit: "second", roundingMode: "halfExpand" }); -+assert.sameValue(result5, "P1Y2M3W4DT5H6M7S", -+ "roundingMode is halfExpand (with 0 digits from smallestUnit)"); -+ -+const result6 = duration.toString({ fractionalSecondDigits: 0, roundingMode: "halfExpand" }); -+assert.sameValue(result6, "P1Y2M3W4DT5H6M7S", -+ "roundingMode is halfExpand (with 0 digits from fractionalSecondDigits)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-invalid-string.js -index 983b9a25b6768ad1664e4a30c99e4be31daf80c9..f1015122ce927650543ed4714eacd89232320f9c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const duration = new Temporal.Duration(0, 0, 0, 0, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => duration.toString({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => duration.toString({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3b66fb5201a3aa0e1ba604658453ac5075743bc2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/roundingmode-trunc.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: trunc value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 123, 987, 500); -+ -+const result1 = duration.toString({ smallestUnit: "microsecond", roundingMode: "trunc" }); -+assert.sameValue(result1, "P1Y2M3W4DT5H6M7.123987S", -+ "roundingMode is trunc (with 6 digits from smallestUnit)"); -+ -+const result2 = duration.toString({ fractionalSecondDigits: 6, roundingMode: "trunc" }); -+assert.sameValue(result2, "P1Y2M3W4DT5H6M7.123987S", -+ "roundingMode is trunc (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = duration.toString({ smallestUnit: "millisecond", roundingMode: "trunc" }); -+assert.sameValue(result3, "P1Y2M3W4DT5H6M7.123S", -+ "roundingMode is trunc (with 3 digits from smallestUnit)"); -+ -+const result4 = duration.toString({ fractionalSecondDigits: 3, roundingMode: "trunc" }); -+assert.sameValue(result4, "P1Y2M3W4DT5H6M7.123S", -+ "roundingMode is trunc (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = duration.toString({ smallestUnit: "second", roundingMode: "trunc" }); -+assert.sameValue(result5, "P1Y2M3W4DT5H6M7S", -+ "roundingMode is trunc (with 0 digits from smallestUnit)"); -+ -+const result6 = duration.toString({ fractionalSecondDigits: 0, roundingMode: "trunc" }); -+assert.sameValue(result6, "P1Y2M3W4DT5H6M7S", -+ "roundingMode is trunc (with 0 digits from fractionalSecondDigits)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-fractionalseconddigits.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-fractionalseconddigits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..19d105238019b99516a4a522eb5e1894ad548191 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-fractionalseconddigits.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.tostring -+description: fractionalSecondDigits option is not used with smallestUnit present -+features: [Temporal] -+---*/ -+ -+const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 789, 999, 999); -+const tests = [ -+ ["second", "P1Y2M3W4DT5H6M7S"], -+ ["millisecond", "P1Y2M3W4DT5H6M7.789S"], -+ ["microsecond", "P1Y2M3W4DT5H6M7.789999S"], -+ ["nanosecond", "P1Y2M3W4DT5H6M7.789999999S"], -+]; -+ -+for (const [smallestUnit, expected] of tests) { -+ const string = duration.toString({ -+ smallestUnit, -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+ }); -+ assert.sameValue(string, expected, `smallestUnit: "${smallestUnit}" overrides fractionalSecondDigits`); -+} -+ -+assert.throws(RangeError, () => duration.toString({ -+ smallestUnit: "hour", -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+}), "hour is an invalid smallestUnit but still overrides fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-invalid-string.js -index b41620c1f4d408ef0b3af5f4b68579c71cc0fefb..5405996c5df963f78a34d84a5caee4a712be5b9b 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-invalid-string.js -@@ -8,4 +8,32 @@ features: [Temporal] - ---*/ - - const duration = new Temporal.Duration(0, 0, 0, 0, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => duration.toString({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "hour", -+ "minute", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "hours", -+ "minutes", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => duration.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-valid-units.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-valid-units.js -index fce836b31b148133045787378226bb5724602e20..24880177e230b52772edc130176891e815458a1d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-valid-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/toString/smallestunit-valid-units.js -@@ -9,12 +9,37 @@ features: [Temporal] - - const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 987, 654, 321); - --assert.sameValue(duration.toString({ smallestUnit: "second" }), "P1Y2M3W4DT5H6M7S"); --assert.sameValue(duration.toString({ smallestUnit: "millisecond" }), "P1Y2M3W4DT5H6M7.987S"); --assert.sameValue(duration.toString({ smallestUnit: "microsecond" }), "P1Y2M3W4DT5H6M7.987654S"); --assert.sameValue(duration.toString({ smallestUnit: "nanosecond" }), "P1Y2M3W4DT5H6M7.987654321S"); -+function test(instance, expectations, description) { -+ for (const [smallestUnit, expectedResult] of expectations) { -+ assert.sameValue(instance.toString({ smallestUnit }), expectedResult, -+ `${description} with smallestUnit "${smallestUnit}"`); -+ } -+} -+ -+test( -+ duration, -+ [ -+ ["seconds", "P1Y2M3W4DT5H6M7S"], -+ ["milliseconds", "P1Y2M3W4DT5H6M7.987S"], -+ ["microseconds", "P1Y2M3W4DT5H6M7.987654S"], -+ ["nanoseconds", "P1Y2M3W4DT5H6M7.987654321S"], -+ ], -+ "subseconds toString" -+); -+ -+test( -+ new Temporal.Duration(1, 2, 3, 4, 5, 6, 7), -+ [ -+ ["seconds", "P1Y2M3W4DT5H6M7S"], -+ ["milliseconds", "P1Y2M3W4DT5H6M7.000S"], -+ ["microseconds", "P1Y2M3W4DT5H6M7.000000S"], -+ ["nanoseconds", "P1Y2M3W4DT5H6M7.000000000S"], -+ ], -+ "whole seconds toString" -+); - - const notValid = [ -+ "era", - "year", - "month", - "week", -@@ -24,5 +49,6 @@ const notValid = [ - ]; - - notValid.forEach((smallestUnit) => { -- assert.throws(RangeError, () => duration.toString({ smallestUnit }), smallestUnit); -+ assert.throws(RangeError, () => duration.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid unit for the smallestUnit option`); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6ae88e1d942a79313768d7a71e006bf2f3ccdbb0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/calendar-dateadd-called-with-options-undefined.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: > -+ BuiltinTimeZoneGetInstantFor calls Calendar.dateAdd with undefined as the -+ options value -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarDateAddUndefinedOptions(); -+const timeZone = TemporalHelpers.oneShiftTimeZone(new Temporal.Instant(0n), 3600e9); -+const relativeTo = new Temporal.ZonedDateTime(0n, timeZone, calendar); -+ -+// Total of a calendar unit where larger calendar units have to be converted -+// down, to cover the path that goes through UnbalanceDurationRelative -+// The calls come from these paths: -+// Duration.total() -> -+// UnbalanceDurationRelative -> MoveRelativeDate -> calendar.dateAdd() (3x) -+// BalanceDuration -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+// RoundDuration -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+ -+const instance1 = new Temporal.Duration(1, 1, 1, 1, 1); -+instance1.total({ unit: "days", relativeTo }); -+assert.sameValue(calendar.dateAddCallCount, 8, "converting larger calendar units down"); -+ -+// Total of a calendar unit where smaller calendar units have to be converted -+// up, to cover the path that goes through MoveRelativeZonedDateTime -+// The calls come from these paths: -+// Duration.total() -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// BalanceDuration -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+// RoundDuration -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// MoveRelativeDate -> calendar.dateAdd() -+ -+calendar.dateAddCallCount = 0; -+ -+const instance2 = new Temporal.Duration(0, 0, 1, 1); -+instance2.total({ unit: "weeks", relativeTo }); -+assert.sameValue(calendar.dateAddCallCount, 6, "converting smaller calendar units up"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/options-wrong-type.js -index 9b92bca4836795546ae5bc93a423b5b388fbec3a..ae20fe1b49e847539c08040d095a1c6224181ce0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/options-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/options-wrong-type.js -@@ -1,13 +1,13 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.duration.prototype.total --description: TypeError thrown when options argument is missing or a primitive -+description: TypeError thrown when options argument is missing or a non-string primitive - features: [BigInt, Symbol, Temporal] - ---*/ - --const values = [ -+const badOptions = [ - undefined, - null, - true, -@@ -17,7 +17,8 @@ const values = [ - ]; - - const instance = new Temporal.Duration(0, 0, 0, 0, 1); --assert.throws(TypeError, () => instance.total(), "TypeError on missing argument"); --values.forEach((value) => { -- assert.throws(TypeError, () => instance.total(value), `TypeError on wrong argument type ${typeof(value)}`); --}); -+assert.throws(TypeError, () => instance.total(), "TypeError on missing options argument"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.total(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3602203fc21fd6fdcd1df3a37ef3a425979dd405 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-leap-second.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: Leap second is constrained in both an ISO string and a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+let relativeTo = "2016-12-31T23:59:60"; -+const result1 = instance.total({ unit: "days", relativeTo }); -+assert.sameValue( -+ result1, -+ 366, -+ "leap second is a valid ISO string for PlainDate relativeTo" -+); -+ -+relativeTo = "2016-12-31T23:59:60+00:00[UTC]"; -+const result2 = instance.total({ unit: "days", relativeTo }); -+assert.sameValue( -+ result2, -+ 366, -+ "leap second is a valid ISO string for ZonedDateTime relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result3 = instance.total({ unit: "days", relativeTo }); -+assert.sameValue( -+ result3, -+ 366, -+ "second: 60 is valid in a property bag for PlainDate relativeTo" -+); -+ -+relativeTo = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60, timeZone: "UTC" }; -+const result4 = instance.total({ unit: "days", relativeTo }); -+assert.sameValue( -+ result4, -+ 366, -+ "second: 60 is valid in a property bag for ZonedDateTime relativeTo" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6825c00ce438834fe067cd60d185402778285388 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: A number as relativeTo option is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const relativeTo = 20191101; -+ -+const result = instance.total({ unit: "days", relativeTo }); -+assert.sameValue(result, 367, "20191101 is a valid ISO string for relativeTo"); -+ -+const numbers = [ -+ 1, -+ -20191101, -+ 1234567890, -+]; -+ -+for (const relativeTo of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.total({ unit: "days", relativeTo }), -+ `Number ${relativeTo} does not convert to a valid ISO string for relativeTo` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..773e2f03bbc8a83156186b29ce21b02a45dd7132 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: A number as calendar in relativeTo property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const calendar = 19970327; -+ -+let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+const result1 = instance.total({ unit: "days", relativeTo }); -+assert.sameValue(result1, 367, "19970327 is a valid ISO string for relativeTo.calendar"); -+ -+relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+const result2 = instance.total({ unit: "days", relativeTo }); -+assert.sameValue(result2, 367, "19970327 is a valid ISO string for relativeTo.calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.total({ unit: "days", relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar` -+ ); -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.total({ unit: "days", relativeTo }), -+ `Number ${calendar} does not convert to a valid ISO string for relativeTo.calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b2b5185bc5c4eac63b99f5b1844a5f6a7fb9e301 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: > -+ Appropriate error thrown when relativeTo.calendar cannot be converted to a -+ calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.total({ unit: "days", relativeTo }), `${description} does not convert to a valid ISO string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.total({ unit: "days", relativeTo }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.total({ unit: "days", relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+ -+ relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.total({ unit: "days", relativeTo }), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const relativeTo = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.total({ unit: "days", relativeTo }), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..84d4d889abf0f614ec742159972caef1a9ed31dc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/relativeto-wrong-type.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: > -+ Appropriate error thrown when relativeTo cannot be converted to a valid -+ relativeTo string or property bag -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Duration(1, 0, 0, 0, 24); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [relativeTo, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.total({ unit: "days", relativeTo }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [relativeTo, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.total({ unit: "days", relativeTo }), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0167a3c6ddaaf137e477ac667522fa202ae82b54 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-leap-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }); -+instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..223a510ca997631e7a4617d1edc733c824a4efe8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Duration(1); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a10581712874187a4e2753c149881f3a20adfa90 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/total/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.total -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Duration(1); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone } }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.total({ unit: "months", relativeTo: { year: 2000, month: 5, day: 2, timeZone: { timeZone } } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/valueOf/basic.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/valueOf/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..95b2de9093bd68501bae5071e1f09c8f8bef711d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/valueOf/basic.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.valueof -+description: Basic tests for valueOf(). -+features: [Temporal] -+---*/ -+ -+const d1 = Temporal.Duration.from("P3DT1H"); -+const d2 = Temporal.Duration.from("P3DT1H"); -+ -+assert.throws(TypeError, () => d1.valueOf(), "valueOf"); -+assert.throws(TypeError, () => d1 < d1, "<"); -+assert.throws(TypeError, () => d1 <= d1, "<="); -+assert.throws(TypeError, () => d1 > d1, ">"); -+assert.throws(TypeError, () => d1 >= d1, ">="); -+assert.sameValue(d1 === d1, true, "==="); -+assert.sameValue(d1 === d2, false, "==="); -+assert.sameValue(d1 !== d1, false, "!=="); -+assert.sameValue(d1 !== d2, true, "!=="); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/all-negative.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/all-negative.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e094455bb8e1757de623db06a22a832ac0c42850 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/all-negative.js -@@ -0,0 +1,93 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: > -+ Returns a correctly merged object when the argument replaces the fields with -+ all negative values. -+info: | -+ 1. Let duration be the this value. -+ 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). -+ 3. Let temporalDurationLike be ? ToPartialDuration(temporalDurationLike). -+ 4. If temporalDurationLike.[[Years]] is not undefined, then -+ a. Let years be temporalDurationLike.[[Years]]. -+ 5. Else, -+ a. Let years be duration.[[Years]]. -+ 6. If temporalDurationLike.[[Months]] is not undefined, then -+ a. Let months be temporalDurationLike.[[Months]]. -+ 7. Else, -+ a. Let months be duration.[[Months]]. -+ 8. If temporalDurationLike.[[Weeks]] is not undefined, then -+ a. Let weeks be temporalDurationLike.[[Weeks]]. -+ 9. Else, -+ a. Let weeks be duration.[[Weeks]]. -+ 10. If temporalDurationLike.[[Days]] is not undefined, then -+ a. Let days be temporalDurationLike.[[Days]]. -+ 11. Else, -+ a. Let days be duration.[[Days]]. -+ 12. If temporalDurationLike.[[Hours]] is not undefined, then -+ a. Let hours be temporalDurationLike.[[Hours]]. -+ 13. Else, -+ a. Let hours be duration.[[Hours]]. -+ 14. If temporalDurationLike.[[Minutes]] is not undefined, then -+ a. Let minutes be temporalDurationLike.[[Minutes]]. -+ 15. Else, -+ a. Let minutes be duration.[[Minutes]]. -+ 16. If temporalDurationLike.[[Seconds]] is not undefined, then -+ a. Let seconds be temporalDurationLike.[[Seconds]]. -+ 17. Else, -+ a. Let seconds be duration.[[Seconds]]. -+ 18. If temporalDurationLike.[[Milliseconds]] is not undefined, then -+ a. Let milliseconds be temporalDurationLike.[[Milliseconds]]. -+ 19. Else, -+ a. Let milliseconds be duration.[[Milliseconds]]. -+ 20. If temporalDurationLike.[[Microseconds]] is not undefined, then -+ a. Let microseconds be temporalDurationLike.[[Microseconds]]. -+ 21. Else, -+ a. Let microseconds be duration.[[Microseconds]]. -+ 22. If temporalDurationLike.[[Nanoseconds]] is not undefined, then -+ a. Let nanoseconds be temporalDurationLike.[[Nanoseconds]]. -+ 23. Else, -+ a. Let nanoseconds be duration.[[Nanoseconds]]. -+ 24. Return ? CreateTemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const argAllNegative = { -+ years: -9, -+ months: -8, -+ weeks: -7, -+ days: -6, -+ hours: -5, -+ minutes: -4, -+ seconds: -3, -+ milliseconds: -2, -+ microseconds: -1, -+ nanoseconds: -10, -+}; -+ -+const d1 = new Temporal.Duration(); -+TemporalHelpers.assertDuration( -+ d1.with(argAllNegative), -9, -8, -7, -6, -5, -4, -3, -2, -1, -10, -+ "replace all zeroes with all negative" -+); -+ -+const d2 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+TemporalHelpers.assertDuration( -+ d2.with(argAllNegative), -9, -8, -7, -6, -5, -4, -3, -2, -1, -10, -+ "replace all positive with all negative" -+); -+ -+const d3 = new Temporal.Duration(1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5); -+TemporalHelpers.assertDuration( -+ d3.with(argAllNegative), -9, -8, -7, -6, -5, -4, -3, -2, -1, -10, -+ "replace all positive large numbers with all negative" -+); -+ -+const d4 = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10); -+TemporalHelpers.assertDuration( -+ d4.with(argAllNegative), -9, -8, -7, -6, -5, -4, -3, -2, -1, -10, -+ "replace all negative with all negative" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/all-positive.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/all-positive.js -new file mode 100644 -index 0000000000000000000000000000000000000000..21584232fc03eab1ada2cd30fa92ee857cdf0cfc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/all-positive.js -@@ -0,0 +1,92 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: > -+ Returns a correctly merged object when the argument replaces the fields with -+ all positive values. -+info: | -+ 1. Let duration be the this value. -+ 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). -+ 3. Let temporalDurationLike be ? ToPartialDuration(temporalDurationLike). -+ 4. If temporalDurationLike.[[Years]] is not undefined, then -+ a. Let years be temporalDurationLike.[[Years]]. -+ 5. Else, -+ a. Let years be duration.[[Years]]. -+ 6. If temporalDurationLike.[[Months]] is not undefined, then -+ a. Let months be temporalDurationLike.[[Months]]. -+ 7. Else, -+ a. Let months be duration.[[Months]]. -+ 8. If temporalDurationLike.[[Weeks]] is not undefined, then -+ a. Let weeks be temporalDurationLike.[[Weeks]]. -+ 9. Else, -+ a. Let weeks be duration.[[Weeks]]. -+ 10. If temporalDurationLike.[[Days]] is not undefined, then -+ a. Let days be temporalDurationLike.[[Days]]. -+ 11. Else, -+ a. Let days be duration.[[Days]]. -+ 12. If temporalDurationLike.[[Hours]] is not undefined, then -+ a. Let hours be temporalDurationLike.[[Hours]]. -+ 13. Else, -+ a. Let hours be duration.[[Hours]]. -+ 14. If temporalDurationLike.[[Minutes]] is not undefined, then -+ a. Let minutes be temporalDurationLike.[[Minutes]]. -+ 15. Else, -+ a. Let minutes be duration.[[Minutes]]. -+ 16. If temporalDurationLike.[[Seconds]] is not undefined, then -+ a. Let seconds be temporalDurationLike.[[Seconds]]. -+ 17. Else, -+ a. Let seconds be duration.[[Seconds]]. -+ 18. If temporalDurationLike.[[Milliseconds]] is not undefined, then -+ a. Let milliseconds be temporalDurationLike.[[Milliseconds]]. -+ 19. Else, -+ a. Let milliseconds be duration.[[Milliseconds]]. -+ 20. If temporalDurationLike.[[Microseconds]] is not undefined, then -+ a. Let microseconds be temporalDurationLike.[[Microseconds]]. -+ 21. Else, -+ a. Let microseconds be duration.[[Microseconds]]. -+ 22. If temporalDurationLike.[[Nanoseconds]] is not undefined, then -+ a. Let nanoseconds be temporalDurationLike.[[Nanoseconds]]. -+ 23. Else, -+ a. Let nanoseconds be duration.[[Nanoseconds]]. -+ 24. Return ? CreateTemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const argAllPositive = { -+ years: 9, -+ months: 8, -+ weeks: 7, -+ days: 6, -+ hours: 5, -+ minutes: 4, -+ seconds: 3, -+ milliseconds: 2, -+ microseconds: 1, -+ nanoseconds: 10, -+}; -+ -+const d1 = new Temporal.Duration(); -+TemporalHelpers.assertDuration( -+ d1.with(argAllPositive), 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, -+ "replace all zeroes with all positive" -+); -+ -+const d2 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+TemporalHelpers.assertDuration( -+ d2.with(argAllPositive), 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, -+ "replace all positive with all positive"); -+ -+const d3 = new Temporal.Duration(1e5, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, 8e5, 9e5, 10e5); -+TemporalHelpers.assertDuration( -+ d3.with(argAllPositive), 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, -+ "replace all positive large numbers with all positive" -+); -+ -+const d4 = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10); -+TemporalHelpers.assertDuration( -+ d4.with(argAllPositive), 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, -+ "replace all negative with all positive" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-invalid-prop.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-invalid-prop.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f12c9f49dc50149140e396c53365576122eb5b31 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-invalid-prop.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: Singular properties are ignored. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d = Temporal.Duration.from({ years: 5, days: 1 }); -+const d2 = d.with({ year: 1, days: 0 }); -+TemporalHelpers.assertDuration(d2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-mixed-sign.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-mixed-sign.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ca215ef33ed0e9d94fa28cd07189f4f3b686aa7e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-mixed-sign.js -@@ -0,0 +1,11 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: The durationLike argument must not contain different signs. -+features: [Temporal] -+---*/ -+ -+const d = new Temporal.Duration(1, 2, 3, 4, 5); -+assert.throws(RangeError, () => d.with({ hours: 1, minutes: -1 })); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-object-wrong-shape.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-object-wrong-shape.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5c17076bec5140957ba15c10be1c5030125bf8fc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-object-wrong-shape.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: > -+ The durationLike argument must contain at least one correctly spelled property -+features: [Temporal] -+---*/ -+ -+let d = new Temporal.Duration(1, 2, 3, 4, 5); -+ -+[ -+ {}, -+ [], -+ () => {}, -+ // objects with only singular keys (plural is the correct spelling) -+ { year: 1 }, -+ { month: 2 }, -+ { week: 3 }, -+ { day: 4 }, -+ { hour: 5 }, -+ { minute: 6 }, -+ { second: 7 }, -+ { millisecond: 8 }, -+ { microsecond: 9 }, -+ { nanosecond: 10 }, -+].forEach((badObject) => { -+ assert.throws(TypeError, () => d.with(badObject), -+ "Throw TypeError if temporalDurationLike is not valid"); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-sign-prop.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-sign-prop.js -new file mode 100644 -index 0000000000000000000000000000000000000000..728d2f92ee2493e0aacdd0815adda94d242db6ec ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-sign-prop.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: Passing a sign property is not supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d = Temporal.Duration.from({ years: 5, days: 1 }); -+assert.throws(TypeError, () => d.with({ sign: -1 })); -+const d2 = d.with({ sign: -1, days: 0 }); -+TemporalHelpers.assertDuration(d2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..41163a35da6e66cc06f7b52b5d94bcb38ab3d340 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/argument-wrong-type.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: Throw TypeError if the temporalDurationLike argument is the wrong type -+features: [Temporal] -+---*/ -+ -+let d = new Temporal.Duration(1, 2, 3, 4, 5); -+ -+[ -+ "string", -+ "P1YT1M", -+ true, -+ false, -+ NaN, -+ Infinity, -+ undefined, -+ null, -+ 123, -+ Symbol(), -+ 456n, -+].forEach((badInput) => { -+ assert.throws(TypeError, () => d.with(badInput), -+ "Throw TypeError if temporalDurationLike is not valid"); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/branding.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/branding.js -index 2bc9af85bf8520e787bb7df7e43dea2afde18d3d..b04b2fefd603bbc85becf229c2bdfd0b38714bd2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/branding.js -@@ -11,12 +11,14 @@ const with_ = Temporal.Duration.prototype.with; - - assert.sameValue(typeof with_, "function"); - --assert.throws(TypeError, () => with_.call(undefined), "undefined"); --assert.throws(TypeError, () => with_.call(null), "null"); --assert.throws(TypeError, () => with_.call(true), "true"); --assert.throws(TypeError, () => with_.call(""), "empty string"); --assert.throws(TypeError, () => with_.call(Symbol()), "symbol"); --assert.throws(TypeError, () => with_.call(1), "1"); --assert.throws(TypeError, () => with_.call({}), "plain object"); --assert.throws(TypeError, () => with_.call(Temporal.Duration), "Temporal.Duration"); --assert.throws(TypeError, () => with_.call(Temporal.Duration.prototype), "Temporal.Duration.prototype"); -+const arg = { years: 3 }; -+ -+assert.throws(TypeError, () => with_.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => with_.call(null, arg), "null"); -+assert.throws(TypeError, () => with_.call(true, arg), "true"); -+assert.throws(TypeError, () => with_.call("", arg), "empty string"); -+assert.throws(TypeError, () => with_.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => with_.call(1, arg), "1"); -+assert.throws(TypeError, () => with_.call({}, arg), "plain object"); -+assert.throws(TypeError, () => with_.call(Temporal.Duration, arg), "Temporal.Duration"); -+assert.throws(TypeError, () => with_.call(Temporal.Duration.prototype, arg), "Temporal.Duration.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/partial-positive.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/partial-positive.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b1425de497f956c1e7c0d3e3fb55cf8fe75172ee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/partial-positive.js -@@ -0,0 +1,86 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: > -+ Returns a correctly merged object when the argument replaces only some of the -+ fields with positive values. -+info: | -+ 1. Let duration be the this value. -+ 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). -+ 3. Let temporalDurationLike be ? ToPartialDuration(temporalDurationLike). -+ 4. If temporalDurationLike.[[Years]] is not undefined, then -+ a. Let years be temporalDurationLike.[[Years]]. -+ 5. Else, -+ a. Let years be duration.[[Years]]. -+ 6. If temporalDurationLike.[[Months]] is not undefined, then -+ a. Let months be temporalDurationLike.[[Months]]. -+ 7. Else, -+ a. Let months be duration.[[Months]]. -+ 8. If temporalDurationLike.[[Weeks]] is not undefined, then -+ a. Let weeks be temporalDurationLike.[[Weeks]]. -+ 9. Else, -+ a. Let weeks be duration.[[Weeks]]. -+ 10. If temporalDurationLike.[[Days]] is not undefined, then -+ a. Let days be temporalDurationLike.[[Days]]. -+ 11. Else, -+ a. Let days be duration.[[Days]]. -+ 12. If temporalDurationLike.[[Hours]] is not undefined, then -+ a. Let hours be temporalDurationLike.[[Hours]]. -+ 13. Else, -+ a. Let hours be duration.[[Hours]]. -+ 14. If temporalDurationLike.[[Minutes]] is not undefined, then -+ a. Let minutes be temporalDurationLike.[[Minutes]]. -+ 15. Else, -+ a. Let minutes be duration.[[Minutes]]. -+ 16. If temporalDurationLike.[[Seconds]] is not undefined, then -+ a. Let seconds be temporalDurationLike.[[Seconds]]. -+ 17. Else, -+ a. Let seconds be duration.[[Seconds]]. -+ 18. If temporalDurationLike.[[Milliseconds]] is not undefined, then -+ a. Let milliseconds be temporalDurationLike.[[Milliseconds]]. -+ 19. Else, -+ a. Let milliseconds be duration.[[Milliseconds]]. -+ 20. If temporalDurationLike.[[Microseconds]] is not undefined, then -+ a. Let microseconds be temporalDurationLike.[[Microseconds]]. -+ 21. Else, -+ a. Let microseconds be duration.[[Microseconds]]. -+ 22. If temporalDurationLike.[[Nanoseconds]] is not undefined, then -+ a. Let nanoseconds be temporalDurationLike.[[Nanoseconds]]. -+ 23. Else, -+ a. Let nanoseconds be duration.[[Nanoseconds]]. -+ 24. Return ? CreateTemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const durationlike1 = { years: 9, hours: 5 }; -+const durationlike2 = { months: 8, minutes: 4 }; -+const durationlike3 = { weeks: 7, seconds: 3 }; -+const durationlike4 = { days: 6, milliseconds: 2 }; -+const durationlike5 = { microseconds: 987, nanoseconds: 123 }; -+ -+const d1 = new Temporal.Duration(); -+TemporalHelpers.assertDuration( -+ d1.with(durationlike1), 9, 0, 0, 0, 5, 0, 0, 0, 0, 0, "replace all zeroes with years and hours"); -+TemporalHelpers.assertDuration( -+ d1.with(durationlike2), 0, 8, 0, 0, 0, 4, 0, 0, 0, 0, "replace all zeroes wtih months and minutes"); -+TemporalHelpers.assertDuration( -+ d1.with(durationlike3), 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, "replace all zeroes with weeks and seconds"); -+TemporalHelpers.assertDuration( -+ d1.with(durationlike4), 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, "replace all zeroes with days and milliseconds"); -+TemporalHelpers.assertDuration( -+ d1.with(durationlike5), 0, 0, 0, 0, 0, 0, 0, 0, 987, 123, "replace all zeroes with microseconds and nanoseconds"); -+ -+const d2 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+TemporalHelpers.assertDuration( -+ d2.with(durationlike1), 9, 2, 3, 4, 5, 6, 7, 8, 9, 10, "replace all positive with years and hours"); -+TemporalHelpers.assertDuration( -+ d2.with(durationlike2), 1, 8, 3, 4, 5, 4, 7, 8, 9, 10, "replace all positive with months and minutes"); -+TemporalHelpers.assertDuration( -+ d2.with(durationlike3), 1, 2, 7, 4, 5, 6, 3, 8, 9, 10, "replace all positive with weeks and seconds"); -+TemporalHelpers.assertDuration( -+ d2.with(durationlike4), 1, 2, 3, 6, 5, 6, 7, 2, 9, 10, "replace all positive with days and milliseconds"); -+TemporalHelpers.assertDuration( -+ d2.with(durationlike5), 1, 2, 3, 4, 5, 6, 7, 8, 987, 123, "replace all positive with microseconds and nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/sign-conflict-throws-rangeerror.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/sign-conflict-throws-rangeerror.js -new file mode 100644 -index 0000000000000000000000000000000000000000..239951b34d184ee8cf63fd7829e6a63cbd20fc1a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/sign-conflict-throws-rangeerror.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: Throw RangeError if the resulting duration has mixed signs -+info: | -+ 24. Return ? CreateTemporalDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). -+features: [Temporal] -+---*/ -+ -+const d1 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -+const d2 = new Temporal.Duration(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10); -+const fields = ["years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds"]; -+ -+fields.forEach((field) => { -+ assert.throws( -+ RangeError, -+ () => d1.with({ [field]: -1 }), -+ `sign in argument { ${field}: -1 } conflicting with sign of duration should throw RangeError` -+ ); -+ -+ assert.throws( -+ RangeError, -+ () => d2.with({ [field]: 1 }), -+ `sign in argument { ${field}: 1 } conflicting with sign of duration should throw RangeError` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/sign-replace.js b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/sign-replace.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a4b9c0ccd3adcbe1210c7c22f57c3851020e5408 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/prototype/with/sign-replace.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.prototype.with -+description: Replacing the sign is supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const d = Temporal.Duration.from({ years: 5, days: 1 }); -+assert.sameValue(d.sign, 1, "original sign"); -+const d2 = d.with({ years: -1, days: 0, minutes: -1 }); -+assert.sameValue(d2.sign, -1, "new sign"); -+TemporalHelpers.assertDuration(d2, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/seconds-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/seconds-undefined.js -index a4cc4add4a010757c50f5311355f0b3d6a869dc1..e3cd9b15b22fc68e7613ae234f0620a5db27c220 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/seconds-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/seconds-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1, 1, 1, 1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.seconds, 0, "seconds default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.seconds, 0, "seconds default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/weeks-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/weeks-undefined.js -index d01172db2d38276865dc3f44623f73a6c4baab73..12c03332d057a701a2a6fddfca1259f0b15d2df4 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/weeks-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/weeks-undefined.js -@@ -4,13 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [1, 1]; - - const explicit = new Temporal.Duration(...args, undefined); --assert.sameValue(explicit.weeks, 0, "weeks default argument"); -+TemporalHelpers.assertDuration(explicit, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "explicit"); - - const implicit = new Temporal.Duration(...args); --assert.sameValue(implicit.weeks, 0, "weeks default argument"); -+TemporalHelpers.assertDuration(implicit, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Duration/years-undefined.js b/JSTests/test262/test/built-ins/Temporal/Duration/years-undefined.js -index 55235840916b579f8285d37b2a128aea182db829..c0fb9cea21eb292f8c32c3add1f7af8c7cb20203 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Duration/years-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Duration/years-undefined.js -@@ -4,11 +4,14 @@ - /*--- - esid: sec-temporal.duration - description: Undefined arguments should be treated as zero. -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const explicit = new Temporal.Duration(undefined); --assert.sameValue(explicit.years, 0, "years default argument"); -+const args = []; - --const implicit = new Temporal.Duration(); --assert.sameValue(implicit.years, 0, "years default argument"); -+const explicit = new Temporal.Duration(...args, undefined); -+TemporalHelpers.assertDuration(explicit, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit"); -+ -+const implicit = new Temporal.Duration(...args); -+TemporalHelpers.assertDuration(implicit, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/compare/argument-object-tostring.js b/JSTests/test262/test/built-ins/Temporal/Instant/compare/argument-object-tostring.js -new file mode 100644 -index 0000000000000000000000000000000000000000..808cd21453243e3375073efcb26771f59d2d57db ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/compare/argument-object-tostring.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.compare -+description: Object is converted to a string, then to Temporal.Instant -+features: [Temporal] -+---*/ -+ -+const epoch = new Temporal.Instant(0n); -+ -+const arg = {}; -+assert.throws(RangeError, () => Temporal.Instant.compare(arg, epoch), "[object Object] is not a valid ISO string (first argument)"); -+assert.throws(RangeError, () => Temporal.Instant.compare(epoch, arg), "[object Object] is not a valid ISO string (second argument)"); -+ -+arg.toString = function() { -+ return "1970-01-01T00:00Z"; -+}; -+const result1 = Temporal.Instant.compare(arg, epoch); -+assert.sameValue(result1, 0, "result of toString is interpreted as ISO string (first argument)"); -+const result2 = Temporal.Instant.compare(epoch, arg); -+assert.sameValue(result2, 0, "result of toString is interpreted as ISO string (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/compare/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/compare/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cf4c5931bf9c5b937903e76f5bff71090ebf9445 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/compare/argument-wrong-type.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ for Instant -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const other = new Temporal.Instant(0n); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+ [{}, "plain object"], -+ [Temporal.Instant, "Temporal.Instant, object"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Instant.compare(arg, other), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.Instant.compare(other, arg), `${description} does not convert to a valid ISO string (second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [Temporal.Instant.prototype, "Temporal.Instant.prototype, object"], // fails brand check in toString() -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Instant.compare(arg, other), `${description} does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.Instant.compare(other, arg), `${description} does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/compare/instant-string-sub-minute-offset.js b/JSTests/test262/test/built-ins/Temporal/Instant/compare/instant-string-sub-minute-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8b44cd75d0c77103be1fa7a4618fdcafa5729cf1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/compare/instant-string-sub-minute-offset.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.compare -+description: Temporal.Instant string with sub-minute offset -+features: [Temporal] -+---*/ -+ -+const epoch = new Temporal.Instant(0n); -+const str = "1970-01-01T00:19:32.37+00:19:32.37"; -+ -+const result1 = Temporal.Instant.compare(str, epoch); -+assert.sameValue(result1, 0, "if present, sub-minute offset is accepted exactly (first argument)"); -+ -+const result2 = Temporal.Instant.compare(epoch, str); -+assert.sameValue(result2, 0, "if present, sub-minute offset is accepted exactly (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/compare/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/compare/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b2f5967d92ad1184b371e498599abbbc6c80ba90 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/compare/leap-second.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.compare -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const other = new Temporal.Instant(1_483_228_799_000_000_000n); -+const arg = "2016-12-31T23:59:60Z"; -+const result1 = Temporal.Instant.compare(arg, other); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for Instant (first argument)"); -+const result2 = Temporal.Instant.compare(other, arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for Instant (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/compare/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/compare/year-zero.js -index e6bb684d43808f96b1f06eeafeddf130b16f4674..23293adff14845b142009e6d11b0141540d238eb 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/compare/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/compare/year-zero.js -@@ -8,12 +8,18 @@ features: [Temporal] - ---*/ - - const instance = new Temporal.Instant(0n); --const bad = '-000000-03-30T00:45Z'; -+const invalidStrings = [ -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", -+]; - --assert.throws(RangeError, -- () => Temporal.Instant.compare(bad, instance), -- "minus zero is invalid extended year (first argument)"); --assert.throws(RangeError, -- () => Temporal.Instant.compare(instance, bad), -- "minus zero is invalid extended year (second argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws(RangeError, -+ () => Temporal.Instant.compare(arg, instance), -+ "minus zero is invalid extended year (first argument)"); -+ assert.throws(RangeError, -+ () => Temporal.Instant.compare(instance, arg), -+ "minus zero is invalid extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-instant.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-instant.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ea70d4c8c3e1ffa6f4197c24a22d8bd6c93c74e3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-instant.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.from -+description: A Instant object is copied, not returned directly -+features: [Temporal] -+---*/ -+ -+const orig = new Temporal.Instant(217_175_010_123_456_789n); -+const result = Temporal.Instant.from(orig); -+ -+assert.sameValue(result.epochNanoseconds, 217_175_010_123_456_789n, "Instant is copied"); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When an Instant is given, the returned value is not the original Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-object-tostring.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-object-tostring.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a946791a102f3b5c320bceb2ab21c9a22fce2f17 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-object-tostring.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.from -+description: Object is converted to a string, then to Temporal.Instant -+features: [Temporal] -+---*/ -+ -+const arg = {}; -+assert.throws(RangeError, () => Temporal.Instant.from(arg), "[object Object] is not a valid ISO string"); -+ -+arg.toString = function() { -+ return "1970-01-01T00:00Z"; -+}; -+const result = Temporal.Instant.from(arg); -+assert.sameValue(result.epochNanoseconds, 0n, "result of toString is interpreted as ISO string"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ec746029317dc96a1c8dde96e7908f7fba7a00df ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/argument-wrong-type.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ for Instant -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+ [{}, "plain object"], -+ [Temporal.Instant, "Temporal.Instant, object"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Instant.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [Temporal.Instant.prototype, "Temporal.Instant.prototype, object"], // fails brand check in toString() -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Instant.from(arg), `${description} does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/basic.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c588f86b0e5aac5fae14c68c767b222560fe8bba ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/basic.js -@@ -0,0 +1,59 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.from -+description: Basic functionality of Temporal.Instant.from -+features: [Temporal] -+---*/ -+ -+const baseValue = 217_178_580_000_000_000n; -+ -+let instant = Temporal.Instant.from("1976-11-18T15:23Z"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue, -+ "ISO string with UTC designator and minutes precision" -+); -+ -+instant = Temporal.Instant.from("1976-11-18T15:23:30Z"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue + 30_000_000_000n, -+ "ISO string with UTC designator and seconds precision" -+); -+ -+instant = Temporal.Instant.from("1976-11-18T15:23:30.123Z"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue + 30_123_000_000n, -+ "ISO string with UTC designator and milliseconds precision" -+); -+ -+instant = Temporal.Instant.from("1976-11-18T15:23:30.123456Z"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue + 30_123_456_000n, -+ "ISO string with UTC designator and microseconds precision" -+); -+ -+instant = Temporal.Instant.from("1976-11-18T15:23:30.123456789Z"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue + 30_123_456_789n, -+ "ISO string with UTC designator and nanoseconds precision" -+); -+ -+instant = Temporal.Instant.from("1976-11-18T15:23-01:00"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue + 3600_000_000_000n, -+ "ISO string with negative UTC offset" -+); -+ -+instant = Temporal.Instant.from("1976-11-18T15:23+01:00"); -+assert.sameValue( -+ instant.epochNanoseconds, -+ baseValue - 3600_000_000_000n, -+ "ISO string with positive UTC offset" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/instant-string-sub-minute-offset.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/instant-string-sub-minute-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..70c3f19870335594ad483dca2aaa1a108d71c932 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/instant-string-sub-minute-offset.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.from -+description: Temporal.Instant string with sub-minute offset -+features: [Temporal] -+---*/ -+ -+const str = "1970-01-01T00:19:32.37+00:19:32.37"; -+const result = Temporal.Instant.from(str); -+assert.sameValue(result.epochNanoseconds, 0n, "if present, sub-minute offset is accepted exactly"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..379aa7b11440b8996c8dc6f7b0e30d7d5413a849 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/leap-second.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.from -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = Temporal.Instant.from(arg); -+assert.sameValue( -+ result.epochNanoseconds, -+ 1_483_228_799_000_000_000n, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/from/year-zero.js -index b21396b8948da84bc5d421896b3533b320150338..5d1ad4a84f872b34d74cbedac51fe11b4f88671a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/from/year-zero.js -@@ -4,19 +4,19 @@ - /*--- - esid: sec-temporal.instant.from - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-03-31T00:45Z", -- "-000000-03-31T01:45+01:00", -- "-000000-03-31T01:45:00+01:00[UTC]" -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", - ]; - --invalidStrings.forEach((str) => { -+invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => Temporal.Instant.from(str), -+ () => Temporal.Instant.from(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/basic.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1b94ba1befbfb34f7fefd6dd0cb7657ee4c936e6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/basic.js -@@ -0,0 +1,72 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.add -+description: Basic functionality of Temporal.Instant.prototype.add() -+info: | -+ 1. Let instant be the this value. -+ 2. Perform ? RequireInternalSlot(instant, [[InitializedTemporalInstant]]). -+ 3. Let duration be ? ToLimitedTemporalDuration(temporalDurationLike, « "years", "months", "weeks", "days" »). -+ 4. Let ns be ? AddInstant(instant.[[EpochNanoseconds]], duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]]). -+ 5. Return ! CreateTemporalInstant(ns). -+features: [Temporal] -+---*/ -+ -+const inst = new Temporal.Instant(50000n); -+ -+let result = inst.add(new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 3, 2, 1)); -+assert.sameValue( -+ 3052001n, -+ result.epochNanoseconds, -+ "add positive sub-seconds" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, 0, 0, 4, 3, 2, 1)); -+assert.sameValue( -+ BigInt(4 * 1e9) + 3052001n, -+ result.epochNanoseconds, -+ "add positive seconds" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, 0, 5, 4, 3, 2, 1)); -+assert.sameValue( -+ BigInt(5 * 60 + 4) * 1000000000n + 3052001n, -+ result.epochNanoseconds, -+ "add positive minutes" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, 6, 5, 4, 3, 2, 1)); -+assert.sameValue( -+ BigInt(6 * 3600 + 5 * 60 + 4) * 1000000000n + 3052001n, -+ result.epochNanoseconds, -+ "add positive hours" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -3, -2, -1)); -+assert.sameValue( -+ -2952001n, -+ result.epochNanoseconds, -+ "add negative sub-seconds" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, 0, 0, -4, -3, -2, -1)); -+assert.sameValue( -+ BigInt(-4 * 1e9) - 2952001n, -+ result.epochNanoseconds, -+ "add negative seconds" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, 0, -5, -4, -3, -2, -1)); -+assert.sameValue( -+ BigInt(5 * 60 + 4) * -1000000000n - 2952001n, -+ result.epochNanoseconds, -+ "add negative minutes" -+); -+ -+result = inst.add(new Temporal.Duration(0, 0, 0, 0, -6, -5, -4, -3, -2, -1)); -+assert.sameValue( -+ BigInt(6 * 3600 + 5 * 60 + 4) * -1000000000n - 2952001n, -+ result.epochNanoseconds, -+ "add negative hours" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/branding.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/branding.js -index cb6b1158c6d5f57113200f22d7bd2237f93aba94..cccdbf63ef10fb3c7da743cf3e4ca584d2fb91ae 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/branding.js -@@ -11,12 +11,14 @@ const add = Temporal.Instant.prototype.add; - - assert.sameValue(typeof add, "function"); - --assert.throws(TypeError, () => add.call(undefined), "undefined"); --assert.throws(TypeError, () => add.call(null), "null"); --assert.throws(TypeError, () => add.call(true), "true"); --assert.throws(TypeError, () => add.call(""), "empty string"); --assert.throws(TypeError, () => add.call(Symbol()), "symbol"); --assert.throws(TypeError, () => add.call(1), "1"); --assert.throws(TypeError, () => add.call({}), "plain object"); --assert.throws(TypeError, () => add.call(Temporal.Instant), "Temporal.Instant"); --assert.throws(TypeError, () => add.call(Temporal.Instant.prototype), "Temporal.Instant.prototype"); -+const arg = new Temporal.Duration(0, 0, 0, 0, 5); -+ -+assert.throws(TypeError, () => add.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => add.call(null, arg), "null"); -+assert.throws(TypeError, () => add.call(true, arg), "true"); -+assert.throws(TypeError, () => add.call("", arg), "empty string"); -+assert.throws(TypeError, () => add.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => add.call(1, arg), "1"); -+assert.throws(TypeError, () => add.call({}, arg), "plain object"); -+assert.throws(TypeError, () => add.call(Temporal.Instant, arg), "Temporal.Instant"); -+assert.throws(TypeError, () => add.call(Temporal.Instant.prototype, arg), "Temporal.Instant.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/disallowed-duration-units.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/disallowed-duration-units.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f6e35389cd874844c243fc4741e2c19b884308e5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/disallowed-duration-units.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.add -+description: | -+ Temporal.Instant.prototype.add() throws RangeError when the duration has -+ non-zero years, months, weeks, or days. -+info: | -+ 1. Let instant be the this value. -+ 3. Let duration be ? ToLimitedTemporalDuration(temporalDurationLike, « "years", "months", "weeks", "days" »). -+features: [Temporal] -+---*/ -+ -+const inst = new Temporal.Instant(500000n); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(1)), -+ "should throw RangeError when the duration has non-zero years (positive)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(0, 2)), -+ "should throw RangeError when the duration has non-zero months (positive)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(0, 0, 3)), -+ "should throw RangeError when the duration has non-zero weeks (positive)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(0, 0, 0, 4)), -+ "should throw RangeError when the duration has non-zero days (positive)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(-1)), -+ "should throw RangeError when the duration has non-zero years (negative)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(0, -2)), -+ "should throw RangeError when the duration has non-zero months (negative)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(0, 0, -3)), -+ "should throw RangeError when the duration has non-zero weeks (negative)"); -+assert.throws(RangeError, () => inst.add(new Temporal.Duration(0, 0, 0, -4)), -+ "should throw RangeError when the duration has non-zero days (negative)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/result-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/result-out-of-range.js -index 63f6bba22a3395dc659b2c9e99908b747c1a30c1..a2473233c8d6a98d0ca4b5434b33846b3d792866 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/result-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/add/result-out-of-range.js -@@ -9,8 +9,22 @@ features: [Temporal] - - const fields = ["hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds"]; - --const instance = Temporal.Instant.fromEpochNanoseconds(8640000_000_000_000_000_000n); -+const latest = Temporal.Instant.fromEpochNanoseconds(8640000_000_000_000_000_000n); - - fields.forEach((field) => { -- assert.throws(RangeError, () => instance.add({ [field]: 1 })); -+ assert.throws( -+ RangeError, -+ () => latest.add({ [field]: 1 }), -+ `adding ${field} with result out of range (positive)` -+ ); -+}); -+ -+const earliest = Temporal.Instant.fromEpochNanoseconds(-8640000_000_000_000_000_000n); -+ -+fields.forEach((field) => { -+ assert.throws( -+ RangeError, -+ () => earliest.add({ [field]: -1 }), -+ `adding ${field} with result out of range (negative)` -+ ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-object-tostring.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-object-tostring.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2a0e34955d2712373f950b40c49df933138b69ff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-object-tostring.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.equals -+description: Object is converted to a string, then to Temporal.Instant -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const arg = {}; -+assert.throws(RangeError, () => instance.equals(arg), "[object Object] is not a valid ISO string"); -+ -+arg.toString = function() { -+ return "1970-01-01T00:00Z"; -+}; -+const result = instance.equals(arg); -+assert.sameValue(result, true, "result of toString is interpreted as ISO string"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-wrong-type.js -index 04d3d188bac3e00dad208f7d025c1c7b6c8119b2..d195169c908446986632e544d83097f07db327b5 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/argument-wrong-type.js -@@ -1,20 +1,37 @@ --// Copyright (C) 2020 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.instant.prototype.equals --description: Appropriate error thrown when argument cannot be converted to a valid string --features: [Symbol, Temporal] -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ for Instant -+features: [BigInt, Symbol, Temporal] - ---*/ - --const instance = Temporal.Instant.fromEpochSeconds(0); -+const instance = new Temporal.Instant(0n); - --assert.throws(RangeError, () => instance.equals(undefined), "undefined"); --assert.throws(RangeError, () => instance.equals(null), "null"); --assert.throws(RangeError, () => instance.equals(true), "true"); --assert.throws(RangeError, () => instance.equals(""), "empty string"); --assert.throws(TypeError, () => instance.equals(Symbol()), "symbol"); --assert.throws(RangeError, () => instance.equals(1), "1"); --assert.throws(RangeError, () => instance.equals({}), "plain object"); --assert.throws(RangeError, () => instance.equals(Temporal.Instant), "Temporal.Instant"); --assert.throws(TypeError, () => instance.equals(Temporal.Instant.prototype), "Temporal.Instant.prototype"); -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+ [{}, "plain object"], -+ [Temporal.Instant, "Temporal.Instant, object"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [Temporal.Instant.prototype, "Temporal.Instant.prototype, object"], // fails brand check in toString() -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/instant-string-sub-minute-offset.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/instant-string-sub-minute-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5bbaaf32c4ec1f4309b3c7b1df0374662c82d14a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/instant-string-sub-minute-offset.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.equals -+description: Temporal.Instant string with sub-minute offset -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const str = "1970-01-01T00:19:32.37+00:19:32.37"; -+const result = instance.equals(str); -+assert.sameValue(result, true, "if present, sub-minute offset is accepted exactly"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..547cbcfe8593a7e28ae8b5f37e147259d3d98b89 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.equals -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(1_483_228_799_000_000_000n); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.equals(arg); -+assert.sameValue( -+ result, -+ true, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/year-zero.js -index d2932d2888992d3cdd2700ad01fdf5f3adcaff8c..d568c70c3bf5ef428fe03da3b762f2f4f52ac510 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/equals/year-zero.js -@@ -4,19 +4,19 @@ - /*--- - esid: sec-temporal.instant.prototype.equals - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-03-30T00:45Z", -- "-000000-03-30T01:45+01:00", -- "-000000-03-30T01:45:00+01:00[UTC]" -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", - ]; - const instance = new Temporal.Instant(0n); --invalidStrings.forEach((str) => { -+invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => instance.equals(str), -+ () => instance.equals(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/options-wrong-type.js -index 51cba2ff1a1b1f82795159ed9c5a7e3fdc995ab1..0cd3a0a985e8ce4da40177dae63fb3b927362ac3 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/options-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/options-wrong-type.js -@@ -1,13 +1,13 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.instant.prototype.round --description: TypeError thrown when options argument is missing or a primitive --features: [Symbol, Temporal] -+description: TypeError thrown when options argument is missing or a non-string primitive -+features: [BigInt, Symbol, Temporal] - ---*/ - --const values = [ -+const badOptions = [ - undefined, - null, - true, -@@ -17,7 +17,8 @@ const values = [ - ]; - - const instance = new Temporal.Instant(0n); --assert.throws(TypeError, () => instance.round(), "missing argument"); --for (const value of values) { -- assert.throws(TypeError, () => instance.round(value), `argument ${String(value)}`); --} -+assert.throws(TypeError, () => instance.round(), "TypeError on missing options argument"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.round(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/rounding-direction.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/rounding-direction.js -new file mode 100644 -index 0000000000000000000000000000000000000000..88a6abba4c2cfdb0b1f87e6fa6cebb7c0ec7cf64 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/rounding-direction.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.round -+description: Rounding down is towards the Big Bang, not the epoch or 1 BCE -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(-65_261_246_399_500_000_000n); // -000099-12-15T12:00:00.5Z -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "floor" }).epochNanoseconds, -+ -65_261_246_400_000_000_000n, // -000099-12-15T12:00:00Z -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode floor)" -+); -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "trunc" }).epochNanoseconds, -+ -65_261_246_400_000_000_000n, // -000099-12-15T12:00:00Z -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc)" -+); -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "ceil" }).epochNanoseconds, -+ -65_261_246_399_000_000_000n, // -000099-12-15T12:00:01Z -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode ceil)" -+); -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "halfExpand" }).epochNanoseconds, -+ -65_261_246_399_000_000_000n, // -000099-12-15T12:00:01Z -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode halfExpand)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundingmode-invalid-string.js -index 7f3ed29f4a24c43af997777921bec97a7d042911..a826b1e72e2dda050bcabf0e315be02d1bee45ce 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_123_987_500n); --assert.throws(RangeError, () => instant.round({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => instant.round({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundto-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundto-invalid-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..db76bcd23fbc3ab7bb674acebb6ce03f48af9076 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/roundto-invalid-string.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.round -+description: RangeError thrown when smallestUnit option not one of the allowed string values -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(1_000_000_000_123_987_500n); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => instant.round(smallestUnit), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-disallowed-units.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-disallowed-units.js -deleted file mode 100644 -index 2d7dcb1d5fbf6988359459bb4ada3e95cddb44a6..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-disallowed-units.js -+++ /dev/null -@@ -1,34 +0,0 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-temporal.instant.prototype.round --description: Specifically disallowed units for the smallestUnit option --features: [Temporal, arrow-function] -----*/ -- --const instance = new Temporal.Instant(1_000_000_000_987_654_321n); --const invalidUnits = [ -- "era", -- "eras", -- "year", -- "month", -- "week", -- "years", -- "months", -- "weeks", -- "day", -- "days", --]; --invalidUnits.forEach((smallestUnit) => { -- assert.throws( -- RangeError, -- () => instance.round({ smallestUnit }), -- `{ smallestUnit: "${smallestUnit}" } should not be allowed as an argument to round` -- ); -- assert.throws( -- RangeError, -- () => instance.round(smallestUnit), -- `"${smallestUnit}" should not be allowed as an argument to round` -- ); --}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-invalid-string.js -index 298c3ce64d6bb5063fab439d6c8a57667609e1b5..375603790911c9b465f2f8abbf3c3e1e840985be 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/round/smallestunit-invalid-string.js -@@ -8,4 +8,28 @@ features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_123_987_500n); --assert.throws(RangeError, () => instant.round({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => instant.round({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/argument-object-tostring.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/argument-object-tostring.js -new file mode 100644 -index 0000000000000000000000000000000000000000..437de1654bbaa9cb4267c0aeb5f0e44e37ea6bca ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/argument-object-tostring.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.since -+description: Object is converted to a string, then to Temporal.Instant -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const arg = {}; -+assert.throws(RangeError, () => instance.since(arg), "[object Object] is not a valid ISO string"); -+ -+arg.toString = function() { -+ return "1970-01-01T00:00Z"; -+}; -+const result = instance.since(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "result of toString is interpreted as ISO string"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..499623d4f7648f6851a0e01be517f6f45d8501e2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/argument-wrong-type.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ for Instant -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+ [{}, "plain object"], -+ [Temporal.Instant, "Temporal.Instant, object"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [Temporal.Instant.prototype, "Temporal.Instant.prototype, object"], // fails brand check in toString() -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since(arg), `${description} does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/instant-string-sub-minute-offset.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/instant-string-sub-minute-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..00e766024fadfc1ebbc78fe3790b0db9c6ee41d4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/instant-string-sub-minute-offset.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.since -+description: Temporal.Instant string with sub-minute offset -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const str = "1970-01-01T00:19:32.37+00:19:32.37"; -+const result = instance.since(str); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "if present, sub-minute offset is accepted exactly"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js -index 57aa9977ef288e6fa156182f6d0cdec8a5ddb150..48befae125623c5ba39ae5fc1161996680dc1408 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/largestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.Instant(1_000_000_000_000_000_000n); - const later = new Temporal.Instant(1_000_090_061_987_654_321n); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..298aeb99b97f2bcba93264bca9f9e41f5d2a11b4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.since -+description: Leap second is a valid ISO string for Instant -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(1_483_228_799_000_000_000n); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..529789279749edc972d5ebe454b70887b94c30a5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.since -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Instant(0n); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.since(new Temporal.Instant(3600_000_000_000n), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/roundingmode-invalid-string.js -index 66f94cf2ca15134a9c13de54d697a3a6e9400801..27771f28e8c58387d494d9ce39d8c52d2d3b37e7 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.Instant(1_000_000_000_000_000_000n); - const later = new Temporal.Instant(1_000_090_061_123_987_500n); --assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js -index 0e91f3e745d95dc8e6c34db213f2449fd945c96e..25f795a89ae2d4873f42d1af422f76e03d50c559 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/smallestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.Instant(1_000_000_000_000_000_000n); - const later = new Temporal.Instant(1_000_090_061_987_654_321n); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/year-zero.js -index 38bf10fd6732093c3f18262eebb7b3649fd9f3e9..e8f765c689359dbf6457cf0aeb5522090da498a8 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/since/year-zero.js -@@ -4,19 +4,19 @@ - /*--- - esid: sec-temporal.instant.prototype.since - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-03-30T00:45Z", -- "-000000-03-30T01:45+01:00", -- "-000000-03-30T01:45:00+01:00[UTC]" -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", - ]; - const instance = new Temporal.Instant(0n); --invalidStrings.forEach((str) => { -+invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => instance.since(str), -+ () => instance.since(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/basic.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..36fa8544520335a71a085605b1078270208bf2c3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/basic.js -@@ -0,0 +1,72 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.subtract -+description: Basic functionality of Temporal.Instant.prototype.subtract() -+info: | -+ 1. Let instant be the this value. -+ 2. Perform ? RequireInternalSlot(instant, [[InitializedTemporalInstant]]). -+ 3. Let duration be ? ToLimitedTemporalDuration(temporalDurationLike, « "years", "months", "weeks", "days" »). -+ 4. Let ns be ? AddInstant(instant.[[EpochNanoseconds]], duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]]). -+ 5. Return ! CreateTemporalInstant(ns). -+features: [Temporal] -+---*/ -+ -+const inst = new Temporal.Instant(50000n); -+ -+let result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, 3, 2, 1)); -+assert.sameValue( -+ -2952001n, -+ result.epochNanoseconds, -+ "subtract positive sub-seconds" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 0, 0, 4, 3, 2, 1)); -+assert.sameValue( -+ BigInt(-4 * 1e9) - 2952001n, -+ result.epochNanoseconds, -+ "subtract positive seconds" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 0, 5, 4, 3, 2, 1)); -+assert.sameValue( -+ BigInt(5 * 60 + 4) * -1000000000n - 2952001n, -+ result.epochNanoseconds, -+ "subtract positive minutes" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 6, 5, 4, 3, 2, 1)); -+assert.sameValue( -+ BigInt(6 * 3600 + 5 * 60 + 4) * -1000000000n - 2952001n, -+ result.epochNanoseconds, -+ "subtract positive hours" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 0, 0, 0, -3, -2, -1)); -+assert.sameValue( -+ 3052001n, -+ result.epochNanoseconds, -+ "subtract negative sub-seconds" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 0, 0, -4, -3, -2, -1)); -+assert.sameValue( -+ BigInt(4 * 1e9) + 3052001n, -+ result.epochNanoseconds, -+ "subtract negative seconds" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, 0, -5, -4, -3, -2, -1)); -+assert.sameValue( -+ BigInt(5 * 60 + 4) * 1000000000n + 3052001n, -+ result.epochNanoseconds, -+ "subtract negative minutes" -+); -+ -+result = inst.subtract(new Temporal.Duration(0, 0, 0, 0, -6, -5, -4, -3, -2, -1)); -+assert.sameValue( -+ BigInt(6 * 3600 + 5 * 60 + 4) * 1000000000n + 3052001n, -+ result.epochNanoseconds, -+ "subtract negative hours" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/branding.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/branding.js -index d7c307e3f9fc18e64938e0c9f6380b9da0a10c84..a7aac12b9c235b0bd5db38e0ed6a2ecf274df2e9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/branding.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/branding.js -@@ -11,12 +11,14 @@ const subtract = Temporal.Instant.prototype.subtract; - - assert.sameValue(typeof subtract, "function"); - --assert.throws(TypeError, () => subtract.call(undefined), "undefined"); --assert.throws(TypeError, () => subtract.call(null), "null"); --assert.throws(TypeError, () => subtract.call(true), "true"); --assert.throws(TypeError, () => subtract.call(""), "empty string"); --assert.throws(TypeError, () => subtract.call(Symbol()), "symbol"); --assert.throws(TypeError, () => subtract.call(1), "1"); --assert.throws(TypeError, () => subtract.call({}), "plain object"); --assert.throws(TypeError, () => subtract.call(Temporal.Instant), "Temporal.Instant"); --assert.throws(TypeError, () => subtract.call(Temporal.Instant.prototype), "Temporal.Instant.prototype"); -+const arg = new Temporal.Duration(0, 0, 0, 0, 5); -+ -+assert.throws(TypeError, () => subtract.call(undefined, arg), "undefined"); -+assert.throws(TypeError, () => subtract.call(null, arg), "null"); -+assert.throws(TypeError, () => subtract.call(true, arg), "true"); -+assert.throws(TypeError, () => subtract.call("", arg), "empty string"); -+assert.throws(TypeError, () => subtract.call(Symbol(), arg), "symbol"); -+assert.throws(TypeError, () => subtract.call(1, arg), "1"); -+assert.throws(TypeError, () => subtract.call({}, arg), "plain object"); -+assert.throws(TypeError, () => subtract.call(Temporal.Instant, arg), "Temporal.Instant"); -+assert.throws(TypeError, () => subtract.call(Temporal.Instant.prototype, arg), "Temporal.Instant.prototype"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/disallowed-duration-units.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/disallowed-duration-units.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9a8cf9ae0e7997898ff4ed2bf73fff0e4edcba52 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/disallowed-duration-units.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2021 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.subtract -+description: | -+ Temporal.Instant.prototype.subtract() throws RangeError when the duration has -+ non-zero years, months, weeks or days. -+info: | -+ 1. Let instant be the this value. -+ 3. Let duration be ? ToLimitedTemporalDuration(temporalDurationLike, « "years", "months", "weeks", "days" »). -+features: [Temporal] -+---*/ -+ -+let i1 = new Temporal.Instant(500000n); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(1)), -+ "should throw RangeError when the duration has non-zero years (positive)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(0, 2)), -+ "should throw RangeError when the duration has non-zero months (positive)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(0, 0, 3)), -+ "should throw RangeError when the duration has non-zero weeks (positive)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(0, 0, 0, 4)), -+ "should throw RangeError when the duration has non-zero days (positive)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(-1)), -+ "should throw RangeError when the duration has non-zero years (negative)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(0, -2)), -+ "should throw RangeError when the duration has non-zero months (negative)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(0, 0, -3)), -+ "should throw RangeError when the duration has non-zero weeks (negative)"); -+assert.throws(RangeError, () => i1.subtract(new Temporal.Duration(0, 0, 0, -4)), -+ "should throw RangeError when the duration has non-zero days (negative)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/result-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/result-out-of-range.js -index 83804b758c4d7bb954082a531a0848b775b85461..82702dea68def9bbd65d95e0d650161f3ec5fd23 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/result-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/subtract/result-out-of-range.js -@@ -2,15 +2,29 @@ - // This code is governed by the BSD license found in the LICENSE file. - - /*--- --esid: sec-temporal.instant.prototype.add -+esid: sec-temporal.instant.prototype.subtract - description: RangeError thrown if result is outside representable range - features: [Temporal] - ---*/ - - const fields = ["hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds"]; - --const instance = Temporal.Instant.fromEpochNanoseconds(-8640000_000_000_000_000_000n); -+const earliest = Temporal.Instant.fromEpochNanoseconds(-8640000_000_000_000_000_000n); - - fields.forEach((field) => { -- assert.throws(RangeError, () => instance.subtract({ [field]: 1 })); -+ assert.throws( -+ RangeError, -+ () => earliest.subtract({ [field]: 1 }), -+ `subtracting ${field} with result out of range (negative)` -+ ); -+}); -+ -+const latest = Temporal.Instant.fromEpochNanoseconds(8640000_000_000_000_000_000n); -+ -+fields.forEach((field) => { -+ assert.throws( -+ RangeError, -+ () => latest.subtract({ [field]: -1 }), -+ `subtracting ${field} with result out of range (positive)` -+ ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toJSON/year-format.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toJSON/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..01ffe822c866edf765a40e277019ab7ab3b91764 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toJSON/year-format.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tojson -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+function epochNsInYear(year) { -+ // Return an epoch nanoseconds value near the middle of the given year -+ const avgNsPerYear = 31_556_952_000_000_000n; -+ return (year - 1970n) * avgNsPerYear + (avgNsPerYear / 2n); -+} -+ -+let instance = new Temporal.Instant(epochNsInYear(-100000n)); -+assert.sameValue(instance.toJSON(), "-100000-07-01T21:30:36Z", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-10000n)); -+assert.sameValue(instance.toJSON(), "-010000-07-01T21:30:36Z", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-9999n)); -+assert.sameValue(instance.toJSON(), "-009999-07-02T03:19:48Z", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-1000n)); -+assert.sameValue(instance.toJSON(), "-001000-07-02T09:30:36Z", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-999n)); -+assert.sameValue(instance.toJSON(), "-000999-07-02T15:19:48Z", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-1n)); -+assert.sameValue(instance.toJSON(), "-000001-07-02T15:41:24Z", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(0n)); -+assert.sameValue(instance.toJSON(), "0000-07-01T21:30:36Z", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(1n)); -+assert.sameValue(instance.toJSON(), "0001-07-02T03:19:48Z", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(999n)); -+assert.sameValue(instance.toJSON(), "0999-07-02T03:41:24Z", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(1000n)); -+assert.sameValue(instance.toJSON(), "1000-07-02T09:30:36Z", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(9999n)); -+assert.sameValue(instance.toJSON(), "9999-07-02T15:41:24Z", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(10000n)); -+assert.sameValue(instance.toJSON(), "+010000-07-01T21:30:36Z", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(100000n)); -+assert.sameValue(instance.toJSON(), "+100000-07-01T21:30:36Z", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-auto.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-auto.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5e37b7ffd5c4dfdea358de7f98e59b0a6daab88d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-auto.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: auto value for fractionalSecondDigits option -+features: [BigInt, Temporal] -+---*/ -+ -+const zeroSeconds = new Temporal.Instant(0n); -+const wholeSeconds = new Temporal.Instant(30_000_000_000n); -+const subSeconds = new Temporal.Instant(30_123_400_000n); -+ -+const tests = [ -+ [zeroSeconds, "1970-01-01T00:00:00Z"], -+ [wholeSeconds, "1970-01-01T00:00:30Z"], -+ [subSeconds, "1970-01-01T00:00:30.1234Z"], -+]; -+ -+for (const [instant, expected] of tests) { -+ assert.sameValue(instant.toString(), expected, "default is to emit seconds and drop trailing zeroes"); -+ assert.sameValue(instant.toString({ fractionalSecondDigits: "auto" }), expected, "auto is the default"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-invalid-string.js -index f75db5a7ffc520d0e1ab1739aac61d74e2e1a6f5..0a1cc3e3cb835d9dc8279d9f1742918cb79a7cbb 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-invalid-string.js -@@ -10,10 +10,13 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.instant.prototype.tostring step 6: -- 6. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 6. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_987_650_000n); - --assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: "other string" })); -+for (const fractionalSecondDigits of ["other string", "AUTO", "not-auto", "autos", "auto\0"]) { -+ assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits }), -+ `"${fractionalSecondDigits}" is not a valid value for fractionalSecondDigits`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-non-integer.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-non-integer.js -index beb567b6889cc107b3fd6d7b74b0b2d6ec3d1b75..1a3479b5cc61d4fa83809e578a0bd96e555a21af 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-non-integer.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-non-integer.js -@@ -10,7 +10,7 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.instant.prototype.tostring step 6: -- 6. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 6. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-number.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e6ba96340530de46f0d95b67081f0585d70e0e70 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-number.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: Number for fractionalSecondDigits option -+features: [BigInt, Temporal] -+---*/ -+ -+const zeroSeconds = new Temporal.Instant(0n); -+const wholeSeconds = new Temporal.Instant(30_000_000_000n); -+const subSeconds = new Temporal.Instant(30_123_400_000n); -+ -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 0 }), "1970-01-01T00:00:30Z", -+ "truncates 4 decimal places to 0"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 2 }), "1970-01-01T00:00:00.00Z", -+ "pads zero seconds to 2 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 2 }), "1970-01-01T00:00:30.00Z", -+ "pads whole seconds to 2 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 2 }), "1970-01-01T00:00:30.12Z", -+ "truncates 4 decimal places to 2"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 3 }), "1970-01-01T00:00:30.123Z", -+ "truncates 4 decimal places to 3"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 6 }), "1970-01-01T00:00:30.123400Z", -+ "pads 4 decimal places to 6"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 7 }), "1970-01-01T00:00:00.0000000Z", -+ "pads zero seconds to 7 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 7 }), "1970-01-01T00:00:30.0000000Z", -+ "pads whole seconds to 7 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 7 }), "1970-01-01T00:00:30.1234000Z", -+ "pads 4 decimal places to 7"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 9 }), "1970-01-01T00:00:30.123400000Z", -+ "pads 4 decimal places to 9"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-out-of-range.js -index 4506d3ef2153845655fe8e6b3c8ac787b59dd782..a634aee890390d305339bf80b4eb95fecd7baee1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-out-of-range.js -@@ -10,13 +10,17 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.instant.prototype.tostring step 6: -- 6. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 6. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_987_650_000n); - --assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: -1 })); --assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: 10 })); --assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: -Infinity })); --assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: Infinity })); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: -Infinity }), -+ "−∞ is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: -1 }), -+ "−1 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: 10 }), -+ "10 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: Infinity }), -+ "∞ is out of range for fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-undefined.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-undefined.js -index 7bed467685f7b86874f8c00b720cf3dacc1781e4..be0fbf77e388a5aa451ecca304884e72004f7250 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-undefined.js -@@ -8,18 +8,31 @@ info: | - sec-getoption step 3: - 3. If _value_ is *undefined*, return _fallback_. - sec-getstringornumberoption step 2: -- 2. Let _value_ be ? GetOption(_options_, _property_, *"stringOrNumber"*, *undefined*, _fallback_). -+ 2. Let _value_ be ? GetOption(_options_, _property_, « Number, String », *undefined*, _fallback_). - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.instant.prototype.tostring step 6: -- 6. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 6. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - --const instant = new Temporal.Instant(1_000_000_000_987_650_000n); -+const zeroSeconds = new Temporal.Instant(0n); -+const wholeSeconds = new Temporal.Instant(30_000_000_000n); -+const subSeconds = new Temporal.Instant(30_123_400_000n); - --const explicit = instant.toString({ fractionalSecondDigits: undefined }); --assert.sameValue(explicit, "2001-09-09T01:46:40.98765Z", "default fractionalSecondDigits is auto"); -+const tests = [ -+ [zeroSeconds, "1970-01-01T00:00:00Z"], -+ [wholeSeconds, "1970-01-01T00:00:30Z"], -+ [subSeconds, "1970-01-01T00:00:30.1234Z"], -+]; - --const implicit = instant.toString({}); --assert.sameValue(implicit, "2001-09-09T01:46:40.98765Z", "default fractionalSecondDigits is auto"); -+for (const [instant, expected] of tests) { -+ const explicit = instant.toString({ fractionalSecondDigits: undefined }); -+ assert.sameValue(explicit, expected, "default fractionalSecondDigits is auto (property present but undefined)"); -+ -+ const implicit = instant.toString({}); -+ assert.sameValue(implicit, expected, "default fractionalSecondDigits is auto (property not present)"); -+ -+ const lambda = instant.toString(() => {}); -+ assert.sameValue(lambda, expected, "default fractionalSecondDigits is auto (property not present, function object)"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-wrong-type.js -index 26eb23a30379d155c0967449033b0bbc41555512..419b4a86d169656b4ff3124c3b5f7c9fd358c633 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/fractionalseconddigits-wrong-type.js -@@ -22,4 +22,26 @@ features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_987_650_000n); --TemporalHelpers.checkFractionalSecondDigitsOptionWrongType(instant); -+ -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: null }), -+ "null is not a number and converts to the string 'null' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: true }), -+ "true is not a number and converts to the string 'true' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: false }), -+ "false is not a number and converts to the string 'false' which is not valid for fractionalSecondDigits"); -+assert.throws(TypeError, () => instant.toString({ fractionalSecondDigits: Symbol() }), -+ "symbols are not numbers and cannot convert to strings"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: 2n }), -+ "bigints are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => instant.toString({ fractionalSecondDigits: {} }), -+ "plain objects are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+ -+const expected = [ -+ "get fractionalSecondDigits.toString", -+ "call fractionalSecondDigits.toString", -+]; -+const actual = []; -+const observer = TemporalHelpers.toPrimitiveObserver(actual, "auto", "fractionalSecondDigits"); -+const result = instant.toString({ fractionalSecondDigits: observer }); -+assert.sameValue(result, "2001-09-09T01:46:40.98765Z", "object with toString uses toString return value"); -+assert.compareArray(actual, expected, "object with toString calls toString and not valueOf"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4da3c9ebbc17f96a249af3ac98a0899d0f377cd1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Instant(0n); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-cross-midnight.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-cross-midnight.js -new file mode 100644 -index 0000000000000000000000000000000000000000..923671d4898d8270904d675120371d5d6eb0a65e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-cross-midnight.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: Rounding can cross midnight -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(946_684_799_999_999_999n); // one nanosecond before 2000-01-01T00:00:00 -+for (const roundingMode of ["ceil", "halfExpand"]) { -+ assert.sameValue(instant.toString({ fractionalSecondDigits: 8, roundingMode }), "2000-01-01T00:00:00.00000000Z"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-direction.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-direction.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f5185d9331dbe8cb45f95dc8830493ccc0146468 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/rounding-direction.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: Rounding down is towards the Big Bang, not the epoch or 1 BCE -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(-65_261_246_399_500_000_000n); // -000099-12-15T12:00:00.5Z -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "floor" }), -+ "-000099-12-15T12:00:00Z", -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "trunc" }), -+ "-000099-12-15T12:00:00Z", -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc)" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "ceil" }), -+ "-000099-12-15T12:00:01Z", -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode ceil)" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "halfExpand" }), -+ "-000099-12-15T12:00:01Z", -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode halfExpand)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f4cd9f0a8023d593e03bde89177706956ccc59c4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-ceil.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: ceil value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(1_000_000_000_123_987_500n); -+ -+const result1 = instant.toString({ smallestUnit: "microsecond", roundingMode: "ceil" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123988Z", -+ "roundingMode is ceil (with 6 digits from smallestUnit)"); -+ -+const result2 = instant.toString({ fractionalSecondDigits: 6, roundingMode: "ceil" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123988Z", -+ "roundingMode is ceil (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = instant.toString({ smallestUnit: "millisecond", roundingMode: "ceil" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.124Z", -+ "roundingMode is ceil (with 3 digits from smallestUnit)"); -+ -+const result4 = instant.toString({ fractionalSecondDigits: 3, roundingMode: "ceil" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.124Z", -+ "roundingMode is ceil (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = instant.toString({ smallestUnit: "second", roundingMode: "ceil" }); -+assert.sameValue(result5, "2001-09-09T01:46:41Z", -+ "roundingMode is ceil (with 0 digits from smallestUnit)"); -+ -+const result6 = instant.toString({ fractionalSecondDigits: 0, roundingMode: "ceil" }); -+assert.sameValue(result6, "2001-09-09T01:46:41Z", -+ "roundingMode is ceil (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = instant.toString({ smallestUnit: "minute", roundingMode: "ceil" }); -+assert.sameValue(result7, "2001-09-09T01:47Z", "roundingMode is ceil (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d50326568b078e39b70af471760967500f610e70 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-floor.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: floor value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(1_000_000_000_123_987_500n); -+ -+const result1 = instant.toString({ smallestUnit: "microsecond", roundingMode: "floor" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123987Z", -+ "roundingMode is floor (with 6 digits from smallestUnit)"); -+ -+const result2 = instant.toString({ fractionalSecondDigits: 6, roundingMode: "floor" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123987Z", -+ "roundingMode is floor (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = instant.toString({ smallestUnit: "millisecond", roundingMode: "floor" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.123Z", -+ "roundingMode is floor (with 3 digits from smallestUnit)"); -+ -+const result4 = instant.toString({ fractionalSecondDigits: 3, roundingMode: "floor" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.123Z", -+ "roundingMode is floor (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = instant.toString({ smallestUnit: "second", roundingMode: "floor" }); -+assert.sameValue(result5, "2001-09-09T01:46:40Z", -+ "roundingMode is floor (with 0 digits from smallestUnit)"); -+ -+const result6 = instant.toString({ fractionalSecondDigits: 0, roundingMode: "floor" }); -+assert.sameValue(result6, "2001-09-09T01:46:40Z", -+ "roundingMode is floor (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = instant.toString({ smallestUnit: "minute", roundingMode: "floor" }); -+assert.sameValue(result7, "2001-09-09T01:46Z", "roundingMode is floor (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7b8aa7e8fa7e4748ff811ae1d34aeaba56a36289 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-halfExpand.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: halfExpand value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(1_000_000_000_123_987_500n); -+ -+const result1 = instant.toString({ smallestUnit: "microsecond", roundingMode: "halfExpand" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123988Z", -+ "roundingMode is halfExpand (with 6 digits from smallestUnit)"); -+ -+const result2 = instant.toString({ fractionalSecondDigits: 6, roundingMode: "halfExpand" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123988Z", -+ "roundingMode is halfExpand (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = instant.toString({ smallestUnit: "millisecond", roundingMode: "halfExpand" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.124Z", -+ "roundingMode is halfExpand (with 3 digits from smallestUnit)"); -+ -+const result4 = instant.toString({ fractionalSecondDigits: 3, roundingMode: "halfExpand" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.124Z", -+ "roundingMode is halfExpand (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = instant.toString({ smallestUnit: "second", roundingMode: "halfExpand" }); -+assert.sameValue(result5, "2001-09-09T01:46:40Z", -+ "roundingMode is halfExpand (with 0 digits from smallestUnit)"); -+ -+const result6 = instant.toString({ fractionalSecondDigits: 0, roundingMode: "halfExpand" }); -+assert.sameValue(result6, "2001-09-09T01:46:40Z", -+ "roundingMode is halfExpand (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = instant.toString({ smallestUnit: "minute", roundingMode: "halfExpand" }); -+assert.sameValue(result7, "2001-09-09T01:47Z", "roundingMode is halfExpand (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-invalid-string.js -index 4a4099b108fcb364ce27570c0228fd262abeaff1..6bff72f3b3d257809199438c7c9eb87d9aecdd42 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_123_987_500n); --assert.throws(RangeError, () => instant.toString({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => instant.toString({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..944c479c1619de97843b508f5fbd919bae261f7d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/roundingmode-trunc.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: trunc value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(1_000_000_000_123_987_500n); -+ -+const result1 = instant.toString({ smallestUnit: "microsecond", roundingMode: "trunc" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123987Z", -+ "roundingMode is trunc (with 6 digits from smallestUnit)"); -+ -+const result2 = instant.toString({ fractionalSecondDigits: 6, roundingMode: "trunc" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123987Z", -+ "roundingMode is trunc (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = instant.toString({ smallestUnit: "millisecond", roundingMode: "trunc" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.123Z", -+ "roundingMode is trunc (with 3 digits from smallestUnit)"); -+ -+const result4 = instant.toString({ fractionalSecondDigits: 3, roundingMode: "trunc" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.123Z", -+ "roundingMode is trunc (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = instant.toString({ smallestUnit: "second", roundingMode: "trunc" }); -+assert.sameValue(result5, "2001-09-09T01:46:40Z", -+ "roundingMode is trunc (with 0 digits from smallestUnit)"); -+ -+const result6 = instant.toString({ fractionalSecondDigits: 0, roundingMode: "trunc" }); -+assert.sameValue(result6, "2001-09-09T01:46:40Z", -+ "roundingMode is trunc (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = instant.toString({ smallestUnit: "minute", roundingMode: "trunc" }); -+assert.sameValue(result7, "2001-09-09T01:46Z", "roundingMode is trunc (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-fractionalseconddigits.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-fractionalseconddigits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..73d8f9aaf909338a0d22293445076103416b2b77 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-fractionalseconddigits.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: fractionalSecondDigits option is not used with smallestUnit present -+features: [Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(56_789_999_999n); -+const tests = [ -+ ["minute", "1970-01-01T00:00Z"], -+ ["second", "1970-01-01T00:00:56Z"], -+ ["millisecond", "1970-01-01T00:00:56.789Z"], -+ ["microsecond", "1970-01-01T00:00:56.789999Z"], -+ ["nanosecond", "1970-01-01T00:00:56.789999999Z"], -+]; -+ -+for (const [smallestUnit, expected] of tests) { -+ const string = instant.toString({ -+ smallestUnit, -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+ }); -+ assert.sameValue(string, expected, `smallestUnit: "${smallestUnit}" overrides fractionalSecondDigits`); -+} -+ -+assert.throws(RangeError, () => instant.toString({ -+ smallestUnit: "hour", -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+}), "hour is an invalid smallestUnit but still overrides fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-invalid-string.js -index f6ba6e30cc69145377b33067ef6a8f168d9eae8f..10b0b72baabf9df57d932a33238f76b2d5f3afae 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-invalid-string.js -@@ -8,4 +8,30 @@ features: [Temporal] - ---*/ - - const instant = new Temporal.Instant(1_000_000_000_123_987_500n); --assert.throws(RangeError, () => instant.toString({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "hour", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "hours", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => instant.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-valid-units.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-valid-units.js -index 191eec97ed44e9bfc1f5c69432e0e2f0e82bac83..e1c53c93eb68e2afe887c7c4c3be2b39782f76f1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-valid-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/smallestunit-valid-units.js -@@ -9,11 +9,36 @@ features: [Temporal] - - const instant = new Temporal.Instant(1_000_000_000_123_456_789n); - --assert.sameValue(instant.toString({ smallestUnit: "minute" }), "2001-09-09T01:46Z"); --assert.sameValue(instant.toString({ smallestUnit: "second" }), "2001-09-09T01:46:40Z"); --assert.sameValue(instant.toString({ smallestUnit: "millisecond" }), "2001-09-09T01:46:40.123Z"); --assert.sameValue(instant.toString({ smallestUnit: "microsecond" }), "2001-09-09T01:46:40.123456Z"); --assert.sameValue(instant.toString({ smallestUnit: "nanosecond" }), "2001-09-09T01:46:40.123456789Z"); -+function test(instance, expectations, description) { -+ for (const [smallestUnit, expectedResult] of expectations) { -+ assert.sameValue(instance.toString({ smallestUnit }), expectedResult, -+ `${description} with smallestUnit "${smallestUnit}"`); -+ } -+} -+ -+test( -+ instant, -+ [ -+ ["minute", "2001-09-09T01:46Z"], -+ ["second", "2001-09-09T01:46:40Z"], -+ ["millisecond", "2001-09-09T01:46:40.123Z"], -+ ["microsecond", "2001-09-09T01:46:40.123456Z"], -+ ["nanosecond", "2001-09-09T01:46:40.123456789Z"], -+ ], -+ "subseconds toString" -+); -+ -+test( -+ new Temporal.Instant(999_999_960_000_000_000n), -+ [ -+ ["minute", "2001-09-09T01:46Z"], -+ ["second", "2001-09-09T01:46:00Z"], -+ ["millisecond", "2001-09-09T01:46:00.000Z"], -+ ["microsecond", "2001-09-09T01:46:00.000000Z"], -+ ["nanosecond", "2001-09-09T01:46:00.000000000Z"], -+ ], -+ "whole minutes toString" -+); - - const notValid = [ - "era", -@@ -25,5 +50,6 @@ const notValid = [ - ]; - - notValid.forEach((smallestUnit) => { -- assert.throws(RangeError, () => instant.toString({ smallestUnit }), smallestUnit); -+ assert.throws(RangeError, () => instant.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid unit for the smallestUnit option`); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..72e3391394058cf01e21ec6f05906981c509666a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.toString({ timeZone }); -+assert.sameValue(result1.substr(-6), "+00:00", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.toString({ timeZone: { timeZone } }); -+assert.sameValue(result2.substr(-6), "+00:00", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.toString({ timeZone }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.toString({ timeZone: { timeZone } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c04a611c0704f9822d273353fddf6145b99c8baf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Instant(0n); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.toString({ timeZone }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.toString({ timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d7112ae6e6834a071feb63732b7cb7ce25197d40 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toString({ timeZone }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.toString({ timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toString({ timeZone }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.toString({ timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.toString({ timeZone: { timeZone } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/year-format.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..195115a0c3fe46c56606268dbb757fe9d95002cb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toString/year-format.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+function epochNsInYear(year) { -+ // Return an epoch nanoseconds value near the middle of the given year -+ const avgNsPerYear = 31_556_952_000_000_000n; -+ return (year - 1970n) * avgNsPerYear + (avgNsPerYear / 2n); -+} -+ -+let instance = new Temporal.Instant(epochNsInYear(-100000n)); -+assert.sameValue(instance.toString(), "-100000-07-01T21:30:36Z", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-10000n)); -+assert.sameValue(instance.toString(), "-010000-07-01T21:30:36Z", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-9999n)); -+assert.sameValue(instance.toString(), "-009999-07-02T03:19:48Z", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-1000n)); -+assert.sameValue(instance.toString(), "-001000-07-02T09:30:36Z", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-999n)); -+assert.sameValue(instance.toString(), "-000999-07-02T15:19:48Z", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(-1n)); -+assert.sameValue(instance.toString(), "-000001-07-02T15:41:24Z", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(0n)); -+assert.sameValue(instance.toString(), "0000-07-01T21:30:36Z", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(1n)); -+assert.sameValue(instance.toString(), "0001-07-02T03:19:48Z", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(999n)); -+assert.sameValue(instance.toString(), "0999-07-02T03:41:24Z", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(1000n)); -+assert.sameValue(instance.toString(), "1000-07-02T09:30:36Z", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(9999n)); -+assert.sameValue(instance.toString(), "9999-07-02T15:41:24Z", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(10000n)); -+assert.sameValue(instance.toString(), "+010000-07-01T21:30:36Z", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.Instant(epochNsInYear(100000n)); -+assert.sameValue(instance.toString(), "+100000-07-01T21:30:36Z", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b66e68c75c8ce5172e1597898c2ba063c25281d7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetime -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(1_000_000_000_000_000_000n); -+ -+const arg = 19761118; -+ -+const result = instance.toZonedDateTime({ calendar: arg, timeZone: "UTC" }); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ calendar: arg, timeZone: "UTC" }), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7264f33377f231cf1d5d195d4c8e2e62d29d22ba ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-string-leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(1_000_000_000_000_000_000n); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.toZonedDateTime({ calendar: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = instance.toZonedDateTime({ calendar: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c6c4992ab9b0c47a02cea62c08855de83ebdb516 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/calendar-wrong-type.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(1_000_000_000_000_000_000n); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime({ calendar: arg, timeZone: "UTC" }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime({ calendar: arg, timeZone: "UTC" }), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b3a25f04a9be14de0fc9a29e73087746bdbe1ce0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.toZonedDateTime({ timeZone, calendar: "iso8601" }); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.toZonedDateTime({ timeZone: { timeZone }, calendar: "iso8601" }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone, calendar: "iso8601" }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone: { timeZone }, calendar: "iso8601" }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..841a1bcb3d20c02a685a1492c464747d1db3a308 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Instant(0n); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ timeZone, calendar: "iso8601" }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ timeZone: { timeZone }, calendar: "iso8601" }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5400a7f5e48bb2605971892335b7a62f2349e2cf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone, calendar: "iso8601" }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone: { timeZone }, calendar: "iso8601" }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime({ timeZone, calendar: "iso8601" }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.toZonedDateTime({ timeZone: { timeZone }, calendar: "iso8601" }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone: { timeZone }, calendar: "iso8601" }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..46be8be647eb1c7ae52bb34d595d7d235d0d2970 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetimeiso -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.toZonedDateTimeISO(timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.toZonedDateTimeISO({ timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.toZonedDateTimeISO(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.toZonedDateTimeISO({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a8a397ada44c539c097868e79354d850ec3ee7a8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetimeiso -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Instant(0n); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTimeISO(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTimeISO({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0358af03ec7a43bded6e5cae5190b05253d6f12b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tozoneddatetimeiso -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTimeISO(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.toZonedDateTimeISO({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTimeISO(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.toZonedDateTimeISO({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.toZonedDateTimeISO({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/argument-object-tostring.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/argument-object-tostring.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b91a46a44203e125c3e02317220e160bfecc4698 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/argument-object-tostring.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.until -+description: Object is converted to a string, then to Temporal.Instant -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const arg = {}; -+assert.throws(RangeError, () => instance.until(arg), "[object Object] is not a valid ISO string"); -+ -+arg.toString = function() { -+ return "1970-01-01T00:00Z"; -+}; -+const result = instance.until(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "result of toString is interpreted as ISO string"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a4de0bae40d36d9108077e4fee4707cd176044b2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/argument-wrong-type.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ for Instant -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+ [{}, "plain object"], -+ [Temporal.Instant, "Temporal.Instant, object"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [Temporal.Instant.prototype, "Temporal.Instant.prototype, object"], // fails brand check in toString() -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until(arg), `${description} does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/instant-string-sub-minute-offset.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/instant-string-sub-minute-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9630b1a4f0df8fe0597f56b7deab9440a3b1a006 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/instant-string-sub-minute-offset.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.until -+description: Temporal.Instant string with sub-minute offset -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(0n); -+ -+const str = "1970-01-01T00:19:32.37+00:19:32.37"; -+const result = instance.until(str); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "if present, sub-minute offset is accepted exactly"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js -index 9d288cd6d6d8772ed14925c271da3b4ac68c2f43..0837ea1dbb1c5222aac6df256da25b06dfb03a6c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/largestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.Instant(1_000_000_000_000_000_000n); - const later = new Temporal.Instant(1_000_090_061_987_654_321n); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/leap-second.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5c19ac969ac16fabc2d04663f3c6170b3133b6c7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.until -+description: Leap second is a valid ISO string for Instant -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Instant(1_483_228_799_000_000_000n); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c30976350c2312e569b3db2014b62a17a47e292e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.until -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.Instant(0n); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.until(new Temporal.Instant(3600_000_000_000n), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/roundingmode-invalid-string.js -index fc8aaed464f78eb11131aa687e841edfc4c24619..82a212cafd8b81008b7db8510aeaea55607544c0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.Instant(1_000_000_000_000_000_000n); - const later = new Temporal.Instant(1_000_090_061_123_987_500n); --assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js -index 145ea2b808e1a8981e243fc47c4dbd27551957af..146b390014e5256d6b16cbd0b1b347b280a38d1f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/smallestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.Instant(1_000_000_000_000_000_000n); - const later = new Temporal.Instant(1_000_090_061_987_654_321n); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/year-zero.js b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/year-zero.js -index 28953c09e546922d2d885c9812daace11b3ec715..641cf7f3d6ee0f117d533035257570a92706d7ef 100644 ---- a/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/Instant/prototype/until/year-zero.js -@@ -4,19 +4,19 @@ - /*--- - esid: sec-temporal.instant.prototype.until - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-03-30T00:45Z", -- "-000000-03-30T01:45+01:00", -- "-000000-03-30T01:45:00+01:00[UTC]" -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", - ]; - const instance = new Temporal.Instant(0n); --invalidStrings.forEach((str) => { -+invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => instance.until(str), -+ () => instance.until(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8586672bdd805f147080eb0ab7bc4cd9413f6b36 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindate -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = Temporal.Now.plainDate(arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDate(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..25c6a9bd3b3d1797cef172d87b01743446366545 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-string-leap-second.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindate -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = Temporal.Now.plainDate(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = Temporal.Now.plainDate(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3c9d54c0c4e94af6654d7f944be48cbcfb25b940 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindate -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainDate(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainDate(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..93db0e2f4cc677347092aec14a1cdf04f600cab2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindate -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+Temporal.Now.plainDate("iso8601", timeZone); -+Temporal.Now.plainDate("iso8601", { timeZone }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.plainDate("iso8601", timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.plainDate("iso8601", { timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..71bb7a11a7fc6ed55463c97bc489521309ea3bff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindate -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDate("iso8601", timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDate("iso8601", { timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..132b6f3f29d7ee09fe987dceb7fe5108790404b3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindate -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainDate("iso8601", timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.plainDate("iso8601", { timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainDate("iso8601", timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.plainDate("iso8601", { timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.plainDate("iso8601", { timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..54f01540c1cc93f3f79355dae0a161659c75c86c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindateiso -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+Temporal.Now.plainDateISO(timeZone); -+Temporal.Now.plainDateISO({ timeZone }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.plainDateISO(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.plainDateISO({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5a0c755aa70cec87f19924360f677fd1f42b77ad ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindateiso -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateISO(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateISO({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..495e18c9cd6719a692c68bfb044fa060d265ae2e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindateiso -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainDateISO(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.plainDateISO({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainDateISO(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.plainDateISO({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.plainDateISO({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5d226c703ea1f12b480f6ef17e60fa72d9ac9750 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetime -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = Temporal.Now.plainDateTime(arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateTime(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..98af04f8088f04ee042eedce5d24d810d1fdf911 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-string-leap-second.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetime -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = Temporal.Now.plainDateTime(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = Temporal.Now.plainDateTime(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ccb5a6f722759e82af6eee26dccf35e9606b7f23 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainDateTime(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainDateTime(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e080f9aa857e4952bc7be476573887de1b2566fe ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+Temporal.Now.plainDateTime("iso8601", timeZone); -+Temporal.Now.plainDateTime("iso8601", { timeZone }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.plainDateTime("iso8601", timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.plainDateTime("iso8601", { timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..32c6a023c7f15a9b6abae23c9b6debbb3e940162 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateTime("iso8601", timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateTime("iso8601", { timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2ded8373098902d05e2bac58deb9955807341799 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainDateTime("iso8601", timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.plainDateTime("iso8601", { timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainDateTime("iso8601", timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.plainDateTime("iso8601", { timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.plainDateTime("iso8601", { timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4fc82538c222644efbef5d8a24a71bd353c0de05 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetimeiso -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+Temporal.Now.plainDateTimeISO(timeZone); -+Temporal.Now.plainDateTimeISO({ timeZone }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.plainDateTimeISO(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.plainDateTimeISO({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..48501a4b07db23605cc3a403bbc6a0d9b475a768 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetimeiso -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateTimeISO(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainDateTimeISO({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..85dbb12387433f2c91b7eceba1afb33b23deda40 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaindatetimeiso -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainDateTimeISO(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.plainDateTimeISO({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainDateTimeISO(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.plainDateTimeISO({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.plainDateTimeISO({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f37d00c9b2ff2f13fc6ca45a70f3d6c8ce797e0d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaintimeiso -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// A string with a leap second is a valid ISO string, so the following two -+// operations should not throw -+ -+Temporal.Now.plainTimeISO(timeZone); -+Temporal.Now.plainTimeISO({ timeZone }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.plainTimeISO(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.plainTimeISO({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a9770de6fdd4725f1d7215be97535fa735475d55 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaintimeiso -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainTimeISO(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.plainTimeISO({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..356d766377bdffed495a6862f01b7320f52042a8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.plaintimeiso -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.plainTimeISO(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.plainTimeISO({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.plainTimeISO(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.plainTimeISO({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.plainTimeISO({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..296ed87aa0f372ddc51c618596949b3d14e5e4e1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetime -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = Temporal.Now.zonedDateTime(arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.zonedDateTime(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..dde4ad71fe4b4725725def556f3c15d9a47fff61 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-string-leap-second.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetime -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = Temporal.Now.zonedDateTime(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = Temporal.Now.zonedDateTime(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8ba88cc410fa75794be3ad7b1ecb85095e0169e2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.zonedDateTime(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.zonedDateTime(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b91fd58cdffab3da085f85e1f94b6f5f24d3b1cd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = Temporal.Now.zonedDateTime("iso8601", timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = Temporal.Now.zonedDateTime("iso8601", { timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.zonedDateTime("iso8601", timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.zonedDateTime("iso8601", { timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e27b3f1730311f6031ee5210430acdd89898d8a0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.zonedDateTime("iso8601", timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.zonedDateTime("iso8601", { timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2284860ba13cb7ff48fed61575fcdf4532b1464c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.zonedDateTime("iso8601", timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.zonedDateTime("iso8601", { timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.zonedDateTime("iso8601", timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.zonedDateTime("iso8601", { timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.zonedDateTime("iso8601", { timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f5a1dbaf77f2379ba34ae018b32b20f2e8e0bb49 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetimeiso -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = Temporal.Now.zonedDateTimeISO(timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = Temporal.Now.zonedDateTimeISO({ timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.Now.zonedDateTimeISO(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.Now.zonedDateTimeISO({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6417c0a787d3972591c6eb7ed8add34ee27293c1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetimeiso -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.zonedDateTimeISO(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.Now.zonedDateTimeISO({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1f992209c23e30aea78c33d4fed8f30e791492a6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.now.zoneddatetimeiso -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.Now.zonedDateTimeISO(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.Now.zonedDateTimeISO({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.Now.zonedDateTimeISO(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.Now.zonedDateTimeISO({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.Now.zonedDateTimeISO({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8fdba7016482d0c454e6cba5a1eee70d81c051ef ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = new Temporal.PlainDate(2000, 5, 2, arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => new Temporal.PlainDate(2000, 5, 2, arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..10370ab28dbe4c7dbe2d76385e85d497490136d1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => new Temporal.PlainDate(2000, 5, 2, arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => new Temporal.PlainDate(2000, 5, 2, arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cf93daf7a16ea32195401db962a84363e7c9dae9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-number.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result1 = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)); -+assert.sameValue(result1, 0, "19761118 is a valid ISO string for PlainDate (first argument)"); -+const result2 = Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg); -+assert.sameValue(result2, 0, "19761118 is a valid ISO string for PlainDate (second argument)"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate (second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..94b12a67ab79006b678ab93be2c176d8edcd7ea6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for calendar (first argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result3 = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)); -+assert.sameValue(result3, 0, "leap second is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg); -+assert.sameValue(result4, 0, "leap second is a valid ISO string for calendar (nested property, second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..debcfec9c19893403fea347b802a888c302ebbfb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-number.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)); -+assert.sameValue(result1, 0, "19970327 is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg); -+assert.sameValue(result2, 0, "19970327 is a valid ISO string for calendar (first argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result3 = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)); -+assert.sameValue(result3, 0, "19970327 is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg); -+assert.sameValue(result4, 0, "19970327 is a valid ISO string for calendar (nested property, first argument)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (second argument)` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..04866d8831faed8068d179984d13800ad875ef82 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `${description} does not convert to a valid ISO string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `${description} does not convert to a valid ISO string (nested property, first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `${description} does not convert to a valid ISO string (nested property, second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `${description} is not a valid property bag and does not convert to a string (nested property, first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `${description} is not a valid property bag and does not convert to a string (nested property, second argument)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `nested undefined calendar property is always a RangeError (first argument)`); -+assert.throws(RangeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `nested undefined calendar property is always a RangeError (second argument)`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d99de36cdf23a3e338e677886b80a0be45967b42 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), -+ "reject minus zero as extended year (first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), -+ "reject minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8c0480b1d1abd2a81e0523b71209013b257c35be ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-string-invalid.js -@@ -0,0 +1,66 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a %%%conversion_target%%% -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const other = new Temporal.PlainDate(2020, 1, 1); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(arg, other), -+ `"${arg}" should not be a valid ISO string for a PlainDate (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.compare(other, arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate (second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c25dc6772b1baa0da121cb9ce39eca2b5110d0df ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `${description} does not convert to a valid ISO string (second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e874d00f7cc1476c2eb2e53fae95fa4c758186f6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.compare -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+Temporal.PlainDate.compare({ year: 2000, month: 5, day: 2, calendar }, { year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 2); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..125edba5a7c6a9b2f302f6af80a87b18c398bd8b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.compare -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+let result = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(2016, 12, 31)); -+assert.sameValue(result, 0, "leap second is a valid ISO string for PlainDate (first argument)"); -+result = Temporal.PlainDate.compare(new Temporal.PlainDate(2016, 12, 31), arg); -+assert.sameValue(result, 0, "leap second is a valid ISO string for PlainDate (second argument)"); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+result = Temporal.PlainDate.compare(arg, new Temporal.PlainDate(2016, 12, 31)); -+assert.sameValue(result, 0, "second: 60 is ignored in property bag for PlainDate (first argument)"); -+result = Temporal.PlainDate.compare(new Temporal.PlainDate(2016, 12, 31), arg); -+assert.sameValue(result, 0, "second: 60 is ignored in property bag for PlainDate (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/year-zero.js -index 75f79cf98e93589340ec0143a5115f9045426b34..9bb6812affeb119227707cdb6e4627f1a632b951 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/compare/year-zero.js -@@ -8,14 +8,21 @@ features: [Temporal] - ---*/ - - const instance = new Temporal.PlainDate(2000, 5, 2); --const bad = "-000000-08-24"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - --assert.throws(RangeError, -- () => Temporal.PlainDate.compare(bad, instance), -- "Minus zero is an invalid extended year (first argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws(RangeError, -+ () => Temporal.PlainDate.compare(arg, instance), -+ "Minus zero is an invalid extended year (first argument)" -+ ); - --assert.throws(RangeError, -- () => Temporal.PlainDate.compare(instance, bad), -- "Minus zero is an invalid extended year (second argument)" --); -+ assert.throws(RangeError, -+ () => Temporal.PlainDate.compare(instance, arg), -+ "Minus zero is an invalid extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-number.js -index 0b1741613c4ed016b0d8876ae1fb59cebc06d3b8..519b3ba7f39fbf77ac629f6596cb392e84e73984 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-number.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-number.js -@@ -3,10 +3,26 @@ - - /*--- - esid: sec-temporal.plaindate.from --description: various interesting string arguments. -+description: A number is converted to a string, then to Temporal.PlainDate - includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const result = Temporal.PlainDate.from(19761118); --TemporalHelpers.assertPlainDate(result, 1976, 11, "M11", 18); -+const arg = 19761118; -+ -+const result = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate(result, 1976, 11, "M11", 18, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.from(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-plaindate.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-plaindate.js -index 953393f824faf162d81c4ec6f6b03cebab3526dc..6eb685f042d5596f6ee2b213dea0ec8f4de489ec 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-plaindate.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-plaindate.js -@@ -4,11 +4,21 @@ - /*--- - esid: sec-temporal.plaindate.from - description: A PlainDate object is copied, not returned directly --includes: [compareArray.js, temporalHelpers.js] -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const plainDate = new Temporal.PlainDate(2000, 5, 2); --const result = Temporal.PlainDate.from(plainDate); --assert.notSameValue(result, plainDate); --TemporalHelpers.assertPlainDate(result, 2000, 5, "M05", 2); -+const orig = new Temporal.PlainDate(2000, 5, 2); -+const result = Temporal.PlainDate.from(orig); -+ -+TemporalHelpers.assertPlainDate( -+ result, -+ 2000, 5, "M05", 2, -+ "PlainDate is copied" -+); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a PlainDate is given, the returned value is not the original PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4455b5fc2fc1aba81b04d34d4226711e8e109cc9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate( -+ result1, -+ 1976, 11, "M11", 18, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate( -+ result2, -+ 1976, 11, "M11", 18, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..634405c73458ad40ad3c143a659fe11525327535 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-number.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate(result1, 1976, 11, "M11", 18, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate(result2, 1976, 11, "M11", 18, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9cb16543edbad041a9a422027af9d0c57dfc9625 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,44 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainDate.from(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainDate.from(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainDate.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainDate.from(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainDate.from(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..daafcd37aa3f20510ff19146c09c0c215261e75f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.from(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js -index f0dee3ade9c3a9168350367321c6557736fe0ed3..b59bdf35d49f7e934d669aa0b4edfba72cf7cb9c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-invalid.js -@@ -1,30 +1,60 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plaindate.from --description: overflow property is extracted with ISO-invalid string argument. --info: | -- 1. Perform ? ToTemporalOverflow(_options_). -- -- 1. If ! IsValidISODate(year, month, day) is false, throw a RangeError exception. --includes: [compareArray.js, temporalHelpers.js] --features: [Temporal] -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] - ---*/ - --const expected = [ -- "get overflow", -- "get overflow.toString", -- "call overflow.toString", -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", - ]; -- --let actual = []; --const object = { -- get overflow() { -- actual.push("get overflow"); -- return TemporalHelpers.toPrimitiveObserver(actual, "constrain", "overflow"); -- } --}; -- --assert.throws(RangeError, () => Temporal.PlainDate.from("2020-13-34", object)); --assert.compareArray(actual, expected); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.from(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d662976f5c3caa168c8bd683035d37b4f21fd22d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-wrong-type.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainDate.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainDate.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0b523cf5390f3ce3aa76700649d49a49be5222de ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/leap-second.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+ -+const result1 = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate( -+ result1, -+ 2016, 12, "M12", 31, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+const result2 = Temporal.PlainDate.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainDate( -+ result2, -+ 2016, 12, "M12", 31, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainDate.from(arg); -+TemporalHelpers.assertPlainDate( -+ result3, -+ 2016, 12, "M12", 31, -+ "second: 60 is ignored in property bag for PlainDate" -+); -+ -+const result4 = Temporal.PlainDate.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainDate( -+ result4, -+ 2016, 12, "M12", 31, -+ "second: 60 is ignored in property bag for PlainDate even with overflow: reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f0dee3ade9c3a9168350367321c6557736fe0ed3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string-invalid.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: overflow property is extracted with ISO-invalid string argument. -+info: | -+ 1. Perform ? ToTemporalOverflow(_options_). -+ -+ 1. If ! IsValidISODate(year, month, day) is false, throw a RangeError exception. -+includes: [compareArray.js, temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const expected = [ -+ "get overflow", -+ "get overflow.toString", -+ "call overflow.toString", -+]; -+ -+let actual = []; -+const object = { -+ get overflow() { -+ actual.push("get overflow"); -+ return TemporalHelpers.toPrimitiveObserver(actual, "constrain", "overflow"); -+ } -+}; -+ -+assert.throws(RangeError, () => Temporal.PlainDate.from("2020-13-34", object)); -+assert.compareArray(actual, expected); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-overflow.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string.js -similarity index 100% -rename from JSTests/test262/test/built-ins/Temporal/PlainDate/from/argument-string-overflow.js -rename to JSTests/test262/test/built-ins/Temporal/PlainDate/from/observable-get-overflow-argument-string.js -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..734081766062a90bc97a0764e50a239f658e0687 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.from -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.PlainDate.from({ year: 1976, month: 11, day: 18 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/overflow-invalid-string.js -index f04f77f745b7aa20ed5fdc956089b1d6252940f9..27e499961c5dc28a7e06982f6ed552f0dbad1cdb 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/overflow-invalid-string.js -@@ -34,8 +34,14 @@ const invalidOverflow = [ - "CONSTRAIN", - "constra\u0131n", - ]; --validItems.forEach((item) => { -- invalidOverflow.forEach((overflow) => { -- assert.throws(RangeError, () => Temporal.PlainDate.from(item, { overflow })); -- }); --}); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const item of validItems) { -+ for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDate.from(item, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/year-zero.js -index 0e000677f21353d0e0fd6cfa5c68244549a7ce95..16c6cd9c2893ebeff8062144ce3c28d5ce1ef4c3 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/from/year-zero.js -@@ -4,14 +4,20 @@ - /*--- - esid: sec-temporal.plaindate.from - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { Temporal.PlainDate.from(arg); }, -+ () => Temporal.PlainDate.from(arg), - "reject minus zero as extended year" --); -- -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e33a0a90c01d5b6240692e0d6f940a9254c369b4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.add -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.add({ months: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/overflow-invalid-string.js -index 66282d2a6c32f6d8f1466da98d79eed4869e3986..6c7b65fd879ab7d321956818c7733a102be92223 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/add/overflow-invalid-string.js -@@ -18,6 +18,12 @@ features: [Temporal] - - const date = new Temporal.PlainDate(2000, 5, 2); - const duration = new Temporal.Duration(3, 3, 0, 3); --for (const overflow of ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"]) { -- assert.throws(RangeError, () => date.add(duration, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => date.add(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2f06b86c7f9fa411b55567e45ff933a694f2b406 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const arg = 19761118; -+ -+const result = instance.equals(arg); -+assert.sameValue(result, true, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2d24e808b2373c7e372088bcb05f64fad0dbfeb7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..22e505924f6047f92d50ad37d98f096164b16437 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue(result1, true, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue(result2, true, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2e5f4c34bb25ac7c3ed3c16f8336713a81ec7100 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.equals(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6263cc5a70c8e0d6f11509d740609758e099d429 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ca71e4016a92c23d6d5e6dd12325d3bedc113a9e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type.js -index 2f61141c080e55979cd12b454dcdfb0f8246a1fc..d90b83024af6cc3a7e5199584ea8e757ca6e1a63 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type.js -@@ -1,17 +1,36 @@ --// Copyright (C) 2020 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plaindate.prototype.equals --description: Appropriate error thrown when argument cannot be converted to a valid string --features: [Symbol, Temporal] -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] - ---*/ - --const instance = Temporal.PlainDate.from({ year: 2000, month: 5, day: 2 }); -+const instance = new Temporal.PlainDate(2000, 5, 2); - --assert.throws(RangeError, () => instance.equals(undefined), "undefined"); --assert.throws(RangeError, () => instance.equals(null), "null"); --assert.throws(RangeError, () => instance.equals(true), "true"); --assert.throws(RangeError, () => instance.equals(""), "empty string"); --assert.throws(TypeError, () => instance.equals(Symbol()), "symbol"); --assert.throws(RangeError, () => instance.equals(1), "1"); -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5de98aa4001325361fb1e0ebd225d72a6243efb9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDate(2000, 5, 2, calendar); -+instance.equals({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..56f946877a365ada376e772086d3af5601f96161 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.equals -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2016, 12, 31); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js -index 486a5da1ac273c5e56bb80ac73510b8cbb93d292..674d60a471a7d3890e788ec3ae68af34007e37b1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/equals/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.PlainDate(2000, 5, 2); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.equals(arg); }, -+ () => instance.equals(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..734eec3be3e559a571511286b359bf85d8ec6f59 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: A number is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const arg = 19761118; -+ -+const result = instance.since(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c65e3e141f378c489e75e6d6aec77fe7fa54c982 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c1156c06dc25a6edae842d19c5717ba24442d1c4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3460f40198257dcbf36cdb8092cf5f3a147f2db6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.since(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..10fe06753d0d499876b56724c69eeeb8dae2e7ac ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..45e74d668a518769f002b76438707c3fc94b3662 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e54867c7c696f18c1d6b4ef7c243ce873c9c0e3f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..782f4823b185ebd4db3878153ed890a9262d12bd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDate(2000, 5, 2, calendar); -+instance.since({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-default.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-default.js -index dbeb5699d69184139383ea09f2ac1e3ebb91c33e..86fdee9d580960e980b4a7f53f5b1ee113fbb94d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-default.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-default.js -@@ -10,10 +10,10 @@ features: [Temporal] - - const feb20 = Temporal.PlainDate.from("2020-02-01"); - const feb21 = Temporal.PlainDate.from("2021-02-01"); --TemporalHelpers.assertDuration(feb21.since(feb20), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "no options"); --TemporalHelpers.assertDuration(feb21.since(feb20, undefined), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "undefined options"); --TemporalHelpers.assertDuration(feb21.since(feb20, {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "no largestUnit"); --TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: undefined }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "undefined largestUnit"); --TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "days" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "days"); --TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "auto" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "auto"); --TemporalHelpers.assertDuration(feb21.since(feb20, () => {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "no largestUnit (function)"); -+TemporalHelpers.assertDuration(feb21.since(feb20), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "no options"); -+TemporalHelpers.assertDuration(feb21.since(feb20, undefined), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "undefined options"); -+TemporalHelpers.assertDuration(feb21.since(feb20, {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "no largestUnit"); -+TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: undefined }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "undefined largestUnit"); -+TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "days" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "days"); -+TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "auto" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "auto"); -+TemporalHelpers.assertDuration(feb21.since(feb20, () => {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "no largestUnit (function)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units.js -index c1d8068ee4ee236f1e1d143f71ec37b99881a933..b3623a502e7003ab3ce719677896f748fc926b33 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units.js -@@ -17,10 +17,10 @@ const feb20 = Temporal.PlainDate.from("2020-02-01"); - const feb21 = Temporal.PlainDate.from("2021-02-01"); - TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "years" }), /* years = */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "start of February, years"); - TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "months" }), 0, /* months = */ 12, 0, 0, 0, 0, 0, 0, 0, 0, "start of February, months"); --TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "weeks" }), 0, 0, /* weeks = */ 52, /* days = */ 2, 0, 0, 0, 0, 0, 0, 0, "start of February, weeks"); -+TemporalHelpers.assertDuration(feb21.since(feb20, { largestUnit: "weeks" }), 0, 0, /* weeks = */ 52, /* days = */ 2, 0, 0, 0, 0, 0, 0, "start of February, weeks"); - - const lastFeb20 = Temporal.PlainDate.from("2020-02-29"); - const lastFeb21 = Temporal.PlainDate.from("2021-02-28"); --TemporalHelpers.assertDuration(lastFeb21.since(lastFeb20, { largestUnit: "years" }), 0, /* months = */ 11, 0, /* days = */ 28, 0, 0, 0, 0, 0, 0, 0, "end of February, years"); -+TemporalHelpers.assertDuration(lastFeb21.since(lastFeb20, { largestUnit: "years" }), 0, /* months = */ 11, 0, /* days = */ 28, 0, 0, 0, 0, 0, 0, "end of February, years"); - TemporalHelpers.assertDuration(lastFeb21.since(lastFeb20, { largestUnit: "months" }), 0, /* months = */ 11, 0, /* days = */ 28, 0, 0, 0, 0, 0, 0, "end of February, months"); - TemporalHelpers.assertDuration(lastFeb21.since(lastFeb20, { largestUnit: "weeks" }), 0, 0, /* weeks = */ 52, /* days = */ 1, 0, 0, 0, 0, 0, 0, "end of February, weeks"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-invalid-string.js -index 9b31fbaabcb922ed8f97f31507c950aa43845467..3b047aa86aa6ae4dee487e3237c95cf911517092 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/largestunit-invalid-string.js -@@ -9,7 +9,30 @@ features: [Temporal] - - const earlier = new Temporal.PlainDate(2000, 5, 2); - const later = new Temporal.PlainDate(2001, 6, 3); --const values = ["era", "eraYear", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f182e0582fb29e98c438fb9a5964c24362458a1c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2016, 12, 31); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..09905ce544b676900518f22b79bb8777565ccdc0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.since -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.since(new Temporal.PlainDate(1976, 11, 18), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-invalid-string.js -index cf9d9e20c7a202cdca0b00e9772ef20568da74e1..8aeeb56734238da123722e0b271b6d92e09ddd1b 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainDate(2000, 5, 2); - const later = new Temporal.PlainDate(2001, 6, 3); --assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-invalid-string.js -index b06b57f530a27878f894077a5d4b5980aae3034b..2bc9968ca6766f160f90cc6d3d6655a0a2ad2fc1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/smallestunit-invalid-string.js -@@ -9,7 +9,30 @@ features: [Temporal] - - const earlier = new Temporal.PlainDate(2000, 5, 2); - const later = new Temporal.PlainDate(2001, 6, 3); --const values = ["era", "eraYear", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js -index 9f83cc531c029162cd91b5ec1a4a3ff27e517114..92fa4f294cc32df0a836c0250b9ccd27e6ea1ef3 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/since/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.PlainDate(2000, 5, 2); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.since(arg); }, -+ () => instance.since(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..66584a29d6a4f64a54cddc8a73c0569eaa2bc4f8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.subtract -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.subtract({ months: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-invalid-string.js -index d3cbd6e80748f6bb575f3e4e30fc7c51a3a08de9..9387c6aff46dce506c0288db198c4d703ef74957 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/subtract/overflow-invalid-string.js -@@ -18,6 +18,12 @@ features: [Temporal] - - const date = new Temporal.PlainDate(2000, 5, 2); - const duration = new Temporal.Duration(3, 3, 0, 3); --for (const overflow of ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"]) { -- assert.throws(RangeError, () => date.subtract(duration, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => date.subtract(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toJSON/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toJSON/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6f4864b4d6253b3a6732fdfd1d1c4956437b562f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toJSON/year-format.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tojson -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+let instance = new Temporal.PlainDate(-100000, 12, 3); -+assert.sameValue(instance.toJSON(), "-100000-12-03", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-10000, 4, 5); -+assert.sameValue(instance.toJSON(), "-010000-04-05", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-9999, 6, 7); -+assert.sameValue(instance.toJSON(), "-009999-06-07", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-1000, 8, 9); -+assert.sameValue(instance.toJSON(), "-001000-08-09", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-999, 10, 9); -+assert.sameValue(instance.toJSON(), "-000999-10-09", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-1, 8, 7); -+assert.sameValue(instance.toJSON(), "-000001-08-07", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(0, 6, 5); -+assert.sameValue(instance.toJSON(), "0000-06-05", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(1, 4, 3); -+assert.sameValue(instance.toJSON(), "0001-04-03", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(999, 2, 10); -+assert.sameValue(instance.toJSON(), "0999-02-10", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(1000, 1, 23); -+assert.sameValue(instance.toJSON(), "1000-01-23", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(9999, 4, 5); -+assert.sameValue(instance.toJSON(), "9999-04-05", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(10000, 6, 7); -+assert.sameValue(instance.toJSON(), "+010000-06-07", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(100000, 8, 9); -+assert.sameValue(instance.toJSON(), "+100000-08-09", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..79d13f0b7fa50e0fe49154200532e2068efafc63 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-number.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.toplaindatetime -+description: A number is converted to a string, then to Temporal.PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const arg = 123456.987654321; -+ -+const result = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime(result, 2000, 5, "M05", 2, 12, 34, 56, 987, 654, 321, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js -index 243f3de9207342113849d1e64927a7c2d9180e10..797192c7797a875a83ddf1030b13bae5eac5fbc2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.toPlainDateTime(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2caa82b2eb201a55a8afd129fa71410857bbdd51 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-wrong-type.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.toplaindatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toPlainDateTime(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toPlainDateTime(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5b06e59dd1a0a5b2dac7f94b446f9dcf20c3a5c6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.toplaindatetime -+description: Leap second is a valid ISO string for PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 2000, 5, "M05", 2, 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 2000, 5, "M05", 2, 23, 59, 59, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e26ca7fba52ee3fdbe1535010a167ae479ab1378 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/limits.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.toplaindatetime -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const midnight = new Temporal.PlainTime(0, 0); -+const firstNs = new Temporal.PlainTime(0, 0, 0, 0, 0, 1); -+const lastNs = new Temporal.PlainTime(23, 59, 59, 999, 999, 999); -+const min = new Temporal.PlainDate(-271821, 4, 19); -+const max = new Temporal.PlainDate(275760, 9, 13); -+ -+assert.throws( -+ RangeError, -+ () => min.toPlainDateTime(midnight), -+ "Cannot go below representable limit for PlainDateTime" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ max.toPlainDateTime(midnight), -+ 275760, 9, "M09", 13, 0, 0, 0, 0, 0, 0, -+ "Midnight on maximal representable PlainDate" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ min.toPlainDateTime(firstNs), -+ -271821, 4, "M04", 19, 0, 0, 0, 0, 0, 1, -+ "Computing the minimum (earliest) representable PlainDateTime" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ max.toPlainDateTime(lastNs), -+ 275760, 9, "M09", 13, 23, 59, 59, 999, 999, 999, -+ "Computing the maximum (latest) representable PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/plaintime-propertybag-no-time-units.js -index 0998479018ee5c39c04b2345e3fc721803389c1d..7dfe34adbf4050503d4d0104be7bdb3ca8a27d14 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/plaintime-propertybag-no-time-units.js -@@ -11,7 +11,7 @@ features: [Temporal] - const instance = new Temporal.PlainDate(2000, 1, 1); - - const props = {}; --assert.throws(TypeError, () => instance.toPlainDateTime(props), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.toPlainDateTime(props), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.toPlainDateTime(props); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js -index 0e1d28347494d5eff79d01eecdafa8a92820b88b..12cc1f466b5bc8f1ef4fa7c879a47ebc69cf8f28 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/year-zero.js -@@ -8,8 +8,9 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainDate(2000, 5, 2); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..681c5f08a6476870685cc969bf5da246f24bf674 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.toplainmonthday -+description: > -+ Calendar.monthDayFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDate(2000, 5, 2, calendar); -+instance.toPlainMonthDay(); -+assert.sameValue(calendar.monthDayFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6ef9df6b85fb7272ca524e8eea70ae562d9f2373 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.toplainyearmonth -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDate(2000, 5, 2, calendar); -+instance.toPlainYearMonth(); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..af7518abb73ac9fc0f7ca6042fb0e5f766ce0b9e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toString/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toString/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9c1d121aab2e851359e2b9591517d216bb2d69a0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toString/year-format.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tostring -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+let instance = new Temporal.PlainDate(-100000, 12, 3); -+assert.sameValue(instance.toString(), "-100000-12-03", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-10000, 4, 5); -+assert.sameValue(instance.toString(), "-010000-04-05", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-9999, 6, 7); -+assert.sameValue(instance.toString(), "-009999-06-07", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-1000, 8, 9); -+assert.sameValue(instance.toString(), "-001000-08-09", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-999, 10, 9); -+assert.sameValue(instance.toString(), "-000999-10-09", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(-1, 8, 7); -+assert.sameValue(instance.toString(), "-000001-08-07", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(0, 6, 5); -+assert.sameValue(instance.toString(), "0000-06-05", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(1, 4, 3); -+assert.sameValue(instance.toString(), "0001-04-03", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(999, 2, 10); -+assert.sameValue(instance.toString(), "0999-02-10", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(1000, 1, 23); -+assert.sameValue(instance.toString(), "1000-01-23", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(9999, 4, 5); -+assert.sameValue(instance.toString(), "9999-04-05", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDate(10000, 6, 7); -+assert.sameValue(instance.toString(), "+010000-06-07", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDate(100000, 8, 9); -+assert.sameValue(instance.toString(), "+100000-08-09", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b25efbb22b1137cabc394f20cf6242db104ed7f5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: A number is converted to a string, then to Temporal.PlainTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const arg = 123456.987654321; -+ -+const result = instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }); -+assert.sameValue(result.epochNanoseconds, 957270896_987_654_321n, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js -index 8c874288258f6af25ae9713dfdb925085720e3b0..62877675b8e68aa7b5d0983c1181a1cf54e15ead 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..02e3410e195d34a55635b85810982c9d318967f1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-wrong-type.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c8d07074fcaab196b55da2af8d6a14c5fbc707ed ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for PlainTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 957311999_000_000_000n, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 957311999_000_000_000n, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/plaintime-propertybag-no-time-units.js -index 8b87a0225411f14072524d9bacf5792ad2b6ca65..af8d058476eb9243a7fc1849a83107660c78880f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/plaintime-propertybag-no-time-units.js -@@ -10,7 +10,7 @@ features: [Temporal] - const instance = new Temporal.PlainDate(2000, 1, 1); - - const props = {}; --assert.throws(TypeError, () => instance.toZonedDateTime({ plainTime: props, timeZone: "UTC" }), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.toZonedDateTime({ plainTime: props, timeZone: "UTC" }), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.toZonedDateTime({ plainTime: props, timeZone: "UTC" }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7265aca26168ebd09d9efb46f99b1256185540d2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.toZonedDateTime(timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.toZonedDateTime({ timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.toZonedDateTime(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..62e499eb4fcc3ad60412e6dc13ca4b6239afcade ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bfd5be2dad86f50ce46bdf0847d52f674f81e2b0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.toZonedDateTime({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js -index 33387244aaeef82d07d570ac2fa431669d1d7d63..20420664aa4bcf438f8f5d2b3760e353cbfce4b4 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/year-zero.js -@@ -8,8 +8,9 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainDate(2000, 5, 2); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..04e1567d76486c06414c285d5fced5deb20a8523 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: A number is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const arg = 19761118; -+ -+const result = instance.until(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a0a12252ccc7a36165760b5b57ba5dd676725211 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2a73bffd8d501ee05c1fc133d8d014b2ebaaed72 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..36bf6986ea2571ddb3cfdccd14f3982414bd5aa1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.until(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6ed6fb9e30c6d3dc6da53cf8170e7d9bb33e057f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4e59ac5e3f38e886fb765c6afb0eac842b8aa035 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6c1c8372428f9adb295f920b7942c59958a452f9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e55859f727838c77a2d4b9fb6fe45f9175e54c5b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDate(2000, 5, 2, calendar); -+instance.until({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-default.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-default.js -index ea3f667957073c8612a338c169aef7f1216fdfda..63b7fd397e65408e337866cd09cd8d2737cf0ef6 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-default.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-default.js -@@ -10,10 +10,10 @@ features: [Temporal] - - const feb20 = Temporal.PlainDate.from("2020-02-01"); - const feb21 = Temporal.PlainDate.from("2021-02-01"); --TemporalHelpers.assertDuration(feb20.until(feb21), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "no options"); --TemporalHelpers.assertDuration(feb20.until(feb21, undefined), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "undefined options"); --TemporalHelpers.assertDuration(feb20.until(feb21, {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "no largestUnit"); --TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: undefined }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "undefined largestUnit"); --TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "days" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "days"); --TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "auto" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "auto"); --TemporalHelpers.assertDuration(feb20.until(feb21, () => {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, 0, "no largestUnit (function)"); -+TemporalHelpers.assertDuration(feb20.until(feb21), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "no options"); -+TemporalHelpers.assertDuration(feb20.until(feb21, undefined), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "undefined options"); -+TemporalHelpers.assertDuration(feb20.until(feb21, {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "no largestUnit"); -+TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: undefined }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "undefined largestUnit"); -+TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "days" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "days"); -+TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "auto" }), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "auto"); -+TemporalHelpers.assertDuration(feb20.until(feb21, () => {}), 0, 0, 0, /* days = */ 366, 0, 0, 0, 0, 0, 0, "no largestUnit (function)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-higher-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-higher-units.js -index 30c7ceec20cf8b4a07bc9ee0e249742db22f5801..30fd70ae2ae8e9be19497af3cc7cb0202872e3cc 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-higher-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-higher-units.js -@@ -17,7 +17,7 @@ const feb20 = Temporal.PlainDate.from("2020-02-01"); - const feb21 = Temporal.PlainDate.from("2021-02-01"); - TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "years" }), /* years = */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "start of February, years"); - TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "months" }), 0, /* months = */ 12, 0, 0, 0, 0, 0, 0, 0, 0, "start of February, months"); --TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "weeks" }), 0, 0, /* weeks = */ 52, /* days = */ 2, 0, 0, 0, 0, 0, 0, 0, "start of February, weeks"); -+TemporalHelpers.assertDuration(feb20.until(feb21, { largestUnit: "weeks" }), 0, 0, /* weeks = */ 52, /* days = */ 2, 0, 0, 0, 0, 0, 0, "start of February, weeks"); - - const lastFeb20 = Temporal.PlainDate.from("2020-02-29"); - const lastFeb21 = Temporal.PlainDate.from("2021-02-28"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-invalid-string.js -index b06f5d6ed8534fbb07c8bbace28e0bcef1f5a704..379dd28424dad7a45b1c447fa2b5eaec907aa8de 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/largestunit-invalid-string.js -@@ -9,7 +9,30 @@ features: [Temporal] - - const earlier = new Temporal.PlainDate(2000, 5, 2); - const later = new Temporal.PlainDate(2001, 6, 3); --const values = ["era", "eraYear", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ba46445e78e7b57b00086fd4e338aee6c5d68484 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(2016, 12, 31); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e93369500ed03ef9a9c034cf61d7ba2954293b08 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.until -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.until(new Temporal.PlainDate(1976, 11, 18), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-invalid-string.js -index 2ed4da16bb69527115d8a9743073ca5d02ec35fb..9139e8c15197947bcaa2d0f2468a78fbdb89dd9f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainDate(2000, 5, 2); - const later = new Temporal.PlainDate(2001, 6, 3); --assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-invalid-string.js -index 3eb01aaee8917a27b3caae400b9677bb8a127d93..8382c5c924ca76200762fd5d2a299a701b69cd57 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/smallestunit-invalid-string.js -@@ -9,7 +9,30 @@ features: [Temporal] - - const earlier = new Temporal.PlainDate(2000, 5, 2); - const later = new Temporal.PlainDate(2001, 6, 3); --const values = ["era", "eraYear", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js -index 28a78617277dd2e523472fefe00d04c645585e8e..819913d02225a55988603c52c146a4ef5c161339 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/until/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.PlainDate(2000, 5, 2); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.until(arg); }, -+ () => instance.until(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0fdb1c24e6dda18741a0abfda07df7a17b5f1db7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.with -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDate(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.with({ day: 5 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/overflow-invalid-string.js -index d35f66be86b46997a7308b0b92e362e8bd834fd5..acef874825b267937a2b7661ccd403cf8dc7c2bb 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/with/overflow-invalid-string.js -@@ -17,6 +17,12 @@ features: [Temporal] - ---*/ - - const date = new Temporal.PlainDate(2000, 5, 2); --["", "CONSTRAIN", "balance", "other string"].forEach((overflow) => -- assert.throws(RangeError, () => date.with({ month: 8 }, { overflow })) --); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => date.with({ month: 8 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1ff8a50d695b54280c64960e06c349ae1c990291 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.withcalendar -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18, { id: "replace-me" }); -+ -+const arg = 19761118; -+ -+const result = instance.withCalendar(arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withCalendar(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7bd95a80cdf8e8878a8b1537d0a67e6bdcccb957 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-string-leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.withcalendar -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18, { id: "replace-me" }); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withCalendar(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = instance.withCalendar(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2587a1cac86f3888d8158b93dac598ad66cdd91d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-wrong-type.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.withcalendar -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDate(1976, 11, 18, { id: "replace-me" }); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withCalendar(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withCalendar(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c44989eaeb39460d10992e4edfeaac6feff089c5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = new Temporal.PlainDateTime(2000, 5, 2, 15, 23, 30, 987, 654, 321, arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => new Temporal.PlainDateTime(2000, 5, 2, 15, 23, 30, 987, 654, 321, arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..61fc252ddca57a652a526fac0559d0b57ef03e91 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => new Temporal.PlainDateTime(2000, 5, 2, 15, 23, 30, 987, 654, 321, arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => new Temporal.PlainDateTime(2000, 5, 2, 15, 23, 30, 987, 654, 321, arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8bf6b2caac2436c2ed89446076d29935d4bbffe6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-number.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: A number is converted to a string, then to Temporal.PlainDateTime -+features: [Temporal] -+---*/ -+ -+let arg = 19761118; -+ -+const result1 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)); -+assert.sameValue(result1, 0, "19761118 is a valid ISO string for PlainDateTime (first argument)"); -+const result2 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg); -+assert.sameValue(result2, 0, "19761118 is a valid ISO string for PlainDateTime (second argument)"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime (second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5ef97473d645b678595e7a06bd4701241d8ab5f3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-object-insufficient-data.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Plain object arguments may throw if they do not contain sufficient information -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const dt2 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+ -+assert.throws( -+ TypeError, -+ () => Temporal.PlainDateTime.compare({ year: 1976 }, dt2), -+ "object must contain at least the required properties (first arg)" -+); -+ -+assert.throws( -+ TypeError, -+ () => Temporal.PlainDateTime.compare(dt1, { year: 2019 }), -+ "object must contain at least the required properties (second arg)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..37547e3272f6ad994193a69cc27a89afa1189135 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result3 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)); -+assert.sameValue(result3, 0, "leap second is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg); -+assert.sameValue(result4, 0, "leap second is a valid ISO string for calendar (nested property, second argument)"); -+ -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eb830da34f0d6ae4a52f76fdd55d50757ae14c5e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-number.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)); -+assert.sameValue(result1, 0, "19970327 is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg); -+assert.sameValue(result2, 0, "19970327 is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result3 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)); -+assert.sameValue(result3, 0, "19970327 is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg); -+assert.sameValue(result4, 0, "19970327 is a valid ISO string for calendar (nested property, second argument)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (second argument)` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..139fa9eab5bae46afe557ac4ba78e4b39a2a589f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `${description} does not convert to a valid ISO string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `${description} does not convert to a valid ISO string (nested property, first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `${description} does not convert to a valid ISO string (nested property, second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `${description} is not a valid property bag and does not convert to a string (nested property, first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `${description} is not a valid property bag and does not convert to a string (nested property, second argument)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `nested undefined calendar property is always a RangeError (first argument)`); -+assert.throws(RangeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `nested undefined calendar property is always a RangeError (second argument)`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b50886514d6102ed237607787b5944e3c5004b18 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), -+ "reject minus zero as extended year (first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), -+ "reject minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5136e87f29a333b956b2bd9c71ec6610ecd42cc3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `${description} does not convert to a valid ISO string (second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..17cd7104252f9af9b6ebecd3e69edf9d16b44209 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/basic.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Checking a typical case (nothing undefined, no NaNs, does not throw, etc.) -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const dt2 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+const dt3 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+const dt4 = new Temporal.PlainDateTime(2019, 10, 29, 15, 23, 30, 123, 456, 789); -+const dt5 = new Temporal.PlainDateTime(1976, 11, 18, 10, 46, 38, 271, 986, 102); -+ -+assert.sameValue(Temporal.PlainDateTime.compare(dt1, dt1), 0, "equal"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt1, dt2), -1, "smaller/larger"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt2, dt1), 1, "larger/smaller"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt2, dt3), 0, "equal different object"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt3, dt4), -1, "same date, earlier time"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt3, dt5), 1, "same time, later date"); -+ -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/calendar-ignored.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/calendar-ignored.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9f197ae0a62778370b0fa3d59821beba83e11956 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/calendar-ignored.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Calendar is not taken into account for the comparison. -+features: [Temporal] -+---*/ -+ -+const calendar1 = { toString() { throw new Test262Error("should not call calendar1.toString") } }; -+const calendar2 = { toString() { throw new Test262Error("should not call calendar2.toString") } }; -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar1); -+const dt2 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102, calendar1); -+const dt3 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102, calendar1); -+const dt4 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102, calendar2); -+ -+assert.sameValue(Temporal.PlainDateTime.compare(dt1, dt2), -1, "smaller"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt2, dt3), 0, "equal with same calendar"); -+assert.sameValue(Temporal.PlainDateTime.compare(dt2, dt4), 0, "equal with different calendar"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/cast.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/cast.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a9a09dc09ad9af12b35d70f2be5755dd87bcc3b5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/cast.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Arguments may be casted (string, plain object) -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const dt2 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+ -+assert.sameValue( -+ Temporal.PlainDateTime.compare({ year: 1976, month: 11, day: 18, hour: 15 }, dt2), -+ -1, -+ "casts first argument (plain object)" -+); -+ -+assert.sameValue( -+ Temporal.PlainDateTime.compare("1976-11-18T15:23:30.123456789", dt2), -+ -1, -+ "casts first argument (string)" -+); -+ -+assert.sameValue( -+ Temporal.PlainDateTime.compare(dt1, { year: 2019, month: 10, day: 29, hour: 10 }), -+ -1, -+ "casts second argument (plain object)" -+); -+ -+assert.sameValue( -+ Temporal.PlainDateTime.compare(dt1, "2019-10-29T10:46:38.271986102"), -+ -1, -+ "casts second argument (string)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fde64d43a23369ee76bd96a57aa57a02d20bf010 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/leap-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.compare -+description: Leap second is a valid ISO string for PlainDateTime -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59)); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for PlainDateTime (first argument)"); -+const result2 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59), arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for PlainDateTime (second argument)"); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59)); -+assert.sameValue(result3, 0, "second: 60 is constrained in property bag for PlainDateTime (first argument)"); -+const result4 = Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59), arg); -+assert.sameValue(result4, 0, "second: 60 is constrained in property bag for PlainDateTime (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/year-zero.js -index f32f6cb0e312370f0a982a7e050c103e2804dd34..d71f6f07716e1dc665df59e71160c59d75096fc2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/compare/year-zero.js -@@ -8,14 +8,21 @@ features: [Temporal] - ---*/ - - const ok = new Temporal.PlainDateTime(2000, 5, 2, 15); --const bad = "-000000-12-07T03:24:30"; -+const invalidStrings = [ -+ "-000000-12-07", -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", -+]; - --assert.throws(RangeError, -- () => Temporal.PlainDateTime.compare(bad,ok), -- "Cannot use minus zero as extended year (first argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws(RangeError, -+ () => Temporal.PlainDateTime.compare(arg, ok), -+ "Cannot use minus zero as extended year (first argument)" -+ ); - --assert.throws(RangeError, -- () => Temporal.PlainDateTime.compare(ok, bad), -- "Cannot use minus zero as extended year (second argument)" --); -+ assert.throws(RangeError, -+ () => Temporal.PlainDateTime.compare(ok, arg), -+ "Cannot use minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/constructor-full.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/constructor-full.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8715f22122f34129363973cd67303cbf11e3fdf5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/constructor-full.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime -+description: Checking an explicitly constructed instance with all arguments -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+ -+TemporalHelpers.assertPlainDateTime(datetime, -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 789, -+ "check instance (all arguments supplied)" -+); -+ -+assert.sameValue( -+ datetime.calendar, -+ calendar, -+ "calendar supplied in constructor can be extracted and is unchanged" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/datetime-math.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/datetime-math.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0f2e05c6948803800e6c332b88878feca26b25ff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/datetime-math.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime -+description: Testing combinations of since, until, add, subtract, and negated -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+const units = ["years", "months", "weeks", "days", "hours", "minutes", "seconds"]; -+ -+units.forEach((largestUnit) => { -+ const diff = later.since(earlier, { largestUnit }); -+ TemporalHelpers.assertDurationsEqual( -+ earlier.since(later, { largestUnit }), -+ diff.negated(), -+ `(${earlier}).since(${later}) == (${later}).since(${earlier}).negated()` -+ ); -+ TemporalHelpers.assertDurationsEqual( -+ earlier.until(later, { largestUnit }), -+ diff, -+ `(${earlier}).until(${later}) == (${later}).since(${earlier})` -+ ); -+ assert.sameValue( -+ earlier.add(diff).equals(later), -+ true, -+ `(${earlier}).add(${diff}) == (${later})` -+ ); -+ assert.sameValue( -+ later.subtract(diff).equals(earlier), -+ true, -+ `(${later}).subtract(${diff}) == (${earlier})` -+ ); -+ assert.sameValue( -+ earlier.subtract(diff.negated()).equals(later), -+ true, -+ "symmetrical with regard to negative durations (1)" -+ ); -+ assert.sameValue( -+ later.add(diff.negated()).equals(earlier), -+ true, -+ "symmetrical with regard to negative durations (2)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0c1d2a5fdf3aecaab1d7bb5ec6c431ee93caeeed ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-number.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: A number is converted to a string, then to Temporal.PlainDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let arg = 19761118; -+ -+const result = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime(result, 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDateTime"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-object-month.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-object-month.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1a2600b80a056d0fe9909dda80cabcf4e53baab3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-object-month.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: A plain object argument needs to specify a month -+features: [Temporal] -+---*/ -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from({year: 1976, month: 11, monthCode: "M12", day: 18}), -+ "month and monthCode must agree" -+); -+ -+assert.throws( -+ TypeError, -+ () => Temporal.PlainDateTime.from({year: 1976, month: undefined, monthCode: undefined, day: 18}), -+ "required prop undefined throws" -+); -+ -+assert.throws( -+ TypeError, -+ () => Temporal.PlainDateTime.from({year: 1976, day: 18, hour: 15, minute: 23, second: 30, millisecond: 123}), -+ "required prop missing throws" -+); -+ -+assert.throws( -+ TypeError, -+ () => Temporal.PlainDateTime.from({year: 1976, months: 11, day: 18}), -+ "plural \"months\" is not acceptable" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bfb0f36cce760684520eaf4d8356d07ce2c8f00a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-object.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Plain objects are acceptable -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from({year: 1976, month: 11, monthCode: "M11", day: 18}), -+ 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, -+ "plain object with month & month code" -+); -+ -+assert.throws( -+ TypeError, -+ () => Temporal.PlainDateTime.from({}), -+ "empty object throws" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from({year: 1976, month: 11, day: 18, millisecond: 123}), -+ 1976, 11, "M11", 18, 0, 0, 0, 123, 0, 0, -+ "plain object with month but not month code" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from({year: 1976, monthCode: "M09", day: 18, millisecond: 123}), -+ 1976, 9, "M09", 18, 0, 0, 0, 123, 0, 0, -+ "plain object with month code but not month" -+); -+ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from({year: 1976, month: 11, day: 18, hours: 12}), -+ 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, -+ "incorrectly-spelled properties (e.g., plural \"hours\") are ignored" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-plaindatetime.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-plaindatetime.js -new file mode 100644 -index 0000000000000000000000000000000000000000..67239ff1e3fe5bd7223f6a3012f12f3744ff4dce ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-plaindatetime.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: A PlainDateTime object is copied, not returned directly -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const orig = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 20, 123, 456, 789); -+const result = Temporal.PlainDateTime.from(orig); -+ -+TemporalHelpers.assertPlainDateTime( -+ result, -+ 1976, 11, "M11", 18, 15, 23, 20, 123, 456, 789, -+ "PlainDateTime is copied" -+); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a PlainDateTime is given, the returned value is not the original PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4e19d8ac56c91f0715d76b600edb7199cabb9371 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ae00e596a0d9b14a7c9793209b4909e4ce53b76c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-number.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime(result1, 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime(result2, 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e81f58d4b47684887a274c07513a948395a91893 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,44 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainDateTime.from(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainDateTime.from(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainDateTime.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainDateTime.from(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainDateTime.from(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..833ed2f08dd9c782c964c3d4127c5a473f168824 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-comma-decimal-separator.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-comma-decimal-separator.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a3cd3cbc77d0cc331e8170490194844203b06534 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-comma-decimal-separator.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Comma may be used as a decimal separator -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30,12"), -+ 1976, 11, "M11", 18, 15, 23, 30, 120, 0, 0, -+ "comma decimal separator" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ed060ba5273788de212426fdfa8ddff9d2232344 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-invalid.js -@@ -0,0 +1,59 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Reject string argument if it cannot be parsed -+features: [Temporal] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "obviously invalid", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDateTime: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+ -+invalidStrings.forEach((s) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(s), -+ `invalid date-time string (${s})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eef062b12e66482d0c417795bc553b42a748df87 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Non-ASCII minus sign is acceptable -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.12\u221202:00"), -+ 1976, 11, "M11", 18, 15, 23, 30, 120, 0, 0, -+ "variant minus sign (offset)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("\u2212009999-11-18T15:23:30.12"), -+ -9999, 11, "M11", 18, 15, 23, 30, 120, 0, 0, -+ "variant minus sign (leading minus)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-offset.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7c98362d41ce1180c9d2433660c8536324282f52 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-offset.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Extended format may be used -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const expected = [1976, 11, "M11", 18, 15, 23, 30, 100, 0, 0]; -+ -+const strs = [ -+ "1976-11-18T152330.1+00:00", -+ "19761118T15:23:30.1+00:00", -+ "1976-11-18T15:23:30.1+0000", -+ "1976-11-18T152330.1+0000", -+ "19761118T15:23:30.1+0000", -+ "19761118T152330.1+00:00", -+ "19761118T152330.1+0000", -+ "+001976-11-18T152330.1+00:00", -+ "+0019761118T15:23:30.1+00:00", -+ "+001976-11-18T15:23:30.1+0000", -+ "+001976-11-18T152330.1+0000", -+ "+0019761118T15:23:30.1+0000", -+ "+0019761118T152330.1+00:00", -+ "+0019761118T152330.1+0000" -+]; -+ -+strs.forEach((s) => { -+ TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from(s), -+ ...expected, -+ `mixture of basic and extended format (${s})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-optional-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-optional-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ff4d5816a82d6c8782ab008b264a29f87e18f1ee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-optional-data.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Some parts of a string argument may be omitted -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30+00"), -+ 1976, 11, "M11", 18, 15, 23, 30, 0, 0, 0, -+ "optional parts (no minute after offset)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15"), -+ 1976, 11, "M11", 18, 15, 0, 0, 0, 0, 0, -+ "optional parts (no minute in time part)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18"), -+ 1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0, -+ "optional parts (no time part)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-out-of-range.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3a5525d0a8b893f1de4add9b3bb34308a5000329 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-out-of-range.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Invalid ISO string not acceptable even with overflow = constrain -+features: [Temporal] -+---*/ -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("2020-13-34T24:60", {}), -+ "constrain has no effect on invalid ISO string (empty options argument)" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("2020-13-34T24:60", () => {}), -+ "constrain has no effect on invalid ISO string (nullary empty object function argument)" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("2020-13-34T24:60", {overflow: "constrain"}), -+ "overflow = constrain has no effect on invalid ISO string" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("2020-13-34T24:60", {overflow: "reject"}), -+ "overflow = reject has no effect on invalid ISO string" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-subsecond.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-subsecond.js -new file mode 100644 -index 0000000000000000000000000000000000000000..096c51b30b5d284cfad1d2dc923c3c39c1306c7d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-subsecond.js -@@ -0,0 +1,69 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Up to nine digits of sub-second precision are acceptable -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.1"), -+ 1976, 11, "M11", 18, 15, 23, 30, 100, 0, 0, -+ "various precisions are possible (one decimal digit)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.12"), -+ 1976, 11, "M11", 18, 15, 23, 30, 120, 0, 0, -+ "various precisions are possible (two decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.123"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 0, 0, -+ "various precisions are possible (three decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.1234"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 400, 0, -+ "various precisions are possible (four decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.12345"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 450, 0, -+ "various precisions are possible (five decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.123456"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 0, -+ "various precisions are possible (six decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.1234567"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 700, -+ "various precisions are possible (seven decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.12345678"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 780, -+ "various precisions are possible (eight decimal digits)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.123456789"), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 789, -+ "various precisions are possible (nine decimal digits)" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("1976-11-18T15:23:30.1234567891"), -+ "ten decimal digits is too much" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-time-separators.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-time-separators.js -new file mode 100644 -index 0000000000000000000000000000000000000000..739b96e9ea8bb40c1c363cf289bdc0c7065f3691 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-time-separators.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Time separator in string argument can vary -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const expected = [1976, 11, "M11", 18, 15, 23, 0, 0, 0, 0]; -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23"), -+ ...expected, -+ "variant time separators (uppercase T)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18t15:23"), -+ ...expected, -+ "variant time separators (lowercase T)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18 15:23"), -+ ...expected, -+ "variant time separators (space between date and time)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-timezone.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-timezone.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c729d7e0e886ba10550864a38dd9610812d16fc3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string-timezone.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Timezone, if specified, is ignored -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("2020-01-01T01:23:45[Asia/Kolkata]"), -+ 2020, 1, "M01", 1, 1, 23, 45, 0, 0, 0, -+ "ignores if a timezone is specified" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bec38c43d8747cd40423fa5ecfd9f03b94c12b1b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-string.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: String arguments are acceptable -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30"), -+ 1976, 11, "M11", 18, 15, 23, 30, 0, 0, 0, -+ "date and time (no subseconds)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.001"), -+ 1976, 11, "M11", 18, 15, 23, 30, 1, 0, 0, -+ "date and time (millisecond)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.001123"), -+ 1976, 11, "M11", 18, 15, 23, 30, 1, 123, 0, -+ "date and time (microsecond)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("1976-11-18T15:23:30.001123456"), -+ 1976, 11, "M11", 18, 15, 23, 30, 1, 123, 456, -+ "date and time (nanosecond)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..99b167fc2cd2ca43e6f8285e921f9d52524e7d24 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/argument-wrong-type.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainDateTime.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainDateTime.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9a1a78c1fe79f076a5d6087905d02095f8730216 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/leap-second.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Leap second is a valid ISO string for PlainDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+ -+const result1 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 2016, 12, "M12", 31, 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDateTime" -+); -+ -+const result2 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 2016, 12, "M12", 31, 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDateTime even with overflow: reject" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainDateTime.from(arg); -+TemporalHelpers.assertPlainDateTime( -+ result3, -+ 2016, 12, "M12", 31, 23, 59, 59, 0, 0, 0, -+ "second: 60 is constrained in property bag for PlainDateTime" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(arg, { overflow: "reject" }), -+ "second: 60 is rejected in property bag for PlainDateTime with overflow: reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1d4f76eac2e2dd250cead629117f08ef575fbd1b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/limits.js -@@ -0,0 +1,70 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+["reject", "constrain"].forEach((overflow) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from({ year: -271821, month: 4, day: 19 }, { overflow }), -+ `negative out of bounds (plain object, overflow = ${overflow})` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from({ year: 275760, month: 9, day: 14 }, { overflow }), -+ `positive out of bounds (plain object, overflow = ${overflow})` -+ ); -+}); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from({ year: -271821, month: 4, day: 19, nanosecond: 1 }), -+ -271821, 4, "M04", 19, 0, 0, 0, 0, 0, 1, -+ "construct from property bag (negative boundary)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from( -+ { -+ year: 275760, -+ month: 9, -+ day: 13, -+ hour: 23, -+ minute: 59, -+ second: 59, -+ millisecond: 999, -+ microsecond: 999, -+ nanosecond: 999 -+ } -+ ), -+ 275760, 9, "M09", 13, 23, 59, 59, 999, 999, 999, -+ "construct from property bag (positive boundary)" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("-271821-04-19T00:00"), -+ "out-of-bounds ISO string (negative case)" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from("+275760-09-14T00:00"), -+ "out-of-bounds ISO string (positive case)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("-271821-04-19T00:00:00.000000001"), -+ -271821, 4, "M04", 19, 0, 0, 0, 0, 0, 1, -+ "boundary ISO string (negative case)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from("+275760-09-13T23:59:59.999999999"), -+ 275760, 9, "M09", 13, 23, 59, 59, 999, 999, 999, -+ "boundary ISO string (positive case)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..df34d81b64c22db0acdfd1aea8e2f75fd870b6e3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.PlainDateTime.from({ year: 1976, month: 11, day: 18 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-default-constrain.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-default-constrain.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a2b52c1d9723eda70bdaa8f002d871386abaf90c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-default-constrain.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: By default, overflow = constrain -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const date = {year: 2019, month: 1, day: 32}; -+const data = [2019, 1, "M01", 31, 0, 0, 0, 0, 0, 0]; -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from(date), -+ ...data, -+ "by default, overflow is constrain (overflow options argument absent)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from(date, {}), -+ ...data, -+ "by default, overflow is constrain (options argument is empty plain object)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from(date, () => {}), -+ ...data, -+ "by default, overflow is constrain (options argument is empty function)" -+); -+ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from(date, {overflow: "constrain"}), -+ ...data, -+ "by default, overflow is constrain (overflow options argument present)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-invalid-string.js -index 41673499f7231b29cf936286827bbbb686e3c365..1786ed59049c5600e75b8b52f94a451027a174d2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-invalid-string.js -@@ -31,6 +31,14 @@ const validValues = [ - { year: 2000, month: 5, day: 2, hour: 12 }, - "2000-05-02T12:00", - ]; --validValues.forEach((value) => { -- assert.throws(RangeError, () => Temporal.PlainDateTime.from(value, { overflow: "other string" })); --}); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const value of validValues) { -+ for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from(value, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-reject.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-reject.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bbd57ae4b752efee410c06683a88c02acc966c79 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/overflow-reject.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.from -+description: Possibly throw if overflow is reject -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+TemporalHelpers.assertPlainDateTime( -+ Temporal.PlainDateTime.from({year: 2019, month: 1, day: 31}, {overflow: "reject"}), -+ 2019, 1, "M01", 31, 0, 0, 0, 0, 0, 0, -+ "overflow reject, acceptable argument" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainDateTime.from({year: 2019, month: 1, day: 32}, {overflow: "reject"}), -+ "overflow reject, unacceptable argument" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/year-zero.js -index 7f21302a3bc18b3f4789a597a33881ebddfc570f..f40d3345a436aadaac5cd5426fe381c151e56686 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/from/year-zero.js -@@ -8,13 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -+ "-000000-12-07", - "-000000-12-07T03:24:30", -- "-000000-12-07T03:24:30+01:00[UTC]" -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; -+ - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { Temporal.PlainDateTime.from(arg); }, -+ () => Temporal.PlainDateTime.from(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/hour-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/hour-undefined.js -index e42831dcd6f2501eb6854c7ceb4fcfade3425044..a27c964d1c14bfda5b8f294bf5dd18bb13c2e236 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/hour-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/hour-undefined.js -@@ -5,12 +5,19 @@ - esid: sec-temporal.plaindatetime - description: Hour argument defaults to 0 if not given - features: [Temporal] -+includes: [temporalHelpers.js] - ---*/ - - const args = [2000, 5, 2]; - --const explicit = new Temporal.PlainDateTime(...args, undefined); --assert.sameValue(explicit.hour, 0, "hour default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args, undefined), -+ 2000, 5, "M05", 2, 0, 0, 0, 0, 0, 0, -+ "hour default argument (argument present)" -+); - --const implicit = new Temporal.PlainDateTime(...args); --assert.sameValue(implicit.hour, 0, "hour default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args), -+ 2000, 5, "M05", 2, 0, 0, 0, 0, 0, 0, -+ "hour default argument (argument missing)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c820fa7234c6ff851924ca563b31c812f9513f0f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/limits.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+---*/ -+ -+assert.throws( -+ RangeError, -+ () => new Temporal.PlainDateTime(-271821, 4, 19, 0, 0, 0, 0, 0, 0), -+ "negative year out of bounds" -+); -+assert.throws( -+ RangeError, -+ () => new Temporal.PlainDateTime(275760, 9, 14, 0, 0, 0, 0, 0, 0), -+ "positive year out of bounds" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/microsecond-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/microsecond-undefined.js -index 83004a31301248c6491793c80af4e50a2c7c86bf..e2fd092f4acd1fa8cfcec8c3f2f3702b2e426152 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/microsecond-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/microsecond-undefined.js -@@ -5,12 +5,20 @@ - esid: sec-temporal.plaindatetime - description: Microsecond argument defaults to 0 if not given - features: [Temporal] -+includes: [temporalHelpers.js] - ---*/ - - const args = [2000, 5, 2, 12, 34, 56, 123]; - --const explicit = new Temporal.PlainDateTime(...args, undefined); --assert.sameValue(explicit.microsecond, 0, "microsecond default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args, undefined), -+ 2000, 5, "M05", 2, 12, 34, 56, 123, 0, 0, -+ "microsecond default argument (argument present)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args), -+ 2000, 5, "M05", 2, 12, 34, 56, 123, 0, 0, -+ "microsecond default argument (argument missing)" -+); - --const implicit = new Temporal.PlainDateTime(...args); --assert.sameValue(implicit.microsecond, 0, "microsecond default argument"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/millisecond-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/millisecond-undefined.js -index de0c1b84476f6ccc93fae61302bf0b1fc8848267..33c2a7ec638bcd312269dfc4ea971d3f4178239e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/millisecond-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/millisecond-undefined.js -@@ -5,12 +5,19 @@ - esid: sec-temporal.plaindatetime - description: Millisecond argument defaults to 0 if not given - features: [Temporal] -+includes: [temporalHelpers.js] - ---*/ - - const args = [2000, 5, 2, 12, 34, 56]; - --const explicit = new Temporal.PlainDateTime(...args, undefined); --assert.sameValue(explicit.millisecond, 0, "millisecond default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args, undefined), -+ 2000, 5, "M05", 2, 12, 34, 56, 0, 0, 0, -+ "millisecond default argument (argument present)" -+); - --const implicit = new Temporal.PlainDateTime(...args); --assert.sameValue(implicit.millisecond, 0, "millisecond default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args), -+ 2000, 5, "M05", 2, 12, 34, 56, 0, 0, 0, -+ "millisecond default argument (argument missing)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/minute-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/minute-undefined.js -index 9ac682fc9584cf12818f8e45fa5f880ebc527ee7..8792608e822c71b50f616a4fad9736929bda4c9e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/minute-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/minute-undefined.js -@@ -5,12 +5,19 @@ - esid: sec-temporal.plaindatetime - description: Minute argument defaults to 0 if not given - features: [Temporal] -+includes: [temporalHelpers.js] - ---*/ - - const args = [2000, 5, 2, 12]; - --const explicit = new Temporal.PlainDateTime(...args, undefined); --assert.sameValue(explicit.minute, 0, "minute default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args, undefined), -+ 2000, 5, "M05", 2, 12, 0, 0, 0, 0, 0, -+ "minute default argument (argument present)" -+); - --const implicit = new Temporal.PlainDateTime(...args); --assert.sameValue(implicit.minute, 0, "minute default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args), -+ 2000, 5, "M05", 2, 12, 0, 0, 0, 0, 0, -+ "minute default argument (argument missing)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/nanosecond-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/nanosecond-undefined.js -index f3f8b52c5d481d7a6e9d37a3bd4ecab13464e431..a913a005ad32e2587dd6f151ebd7f616257cd644 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/nanosecond-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/nanosecond-undefined.js -@@ -5,12 +5,19 @@ - esid: sec-temporal.plaindatetime - description: Nanosecond argument defaults to 0 if not given - features: [Temporal] -+includes: [temporalHelpers.js] - ---*/ - - const args = [2000, 5, 2, 12, 34, 56, 123, 456]; - --const explicit = new Temporal.PlainDateTime(...args, undefined); --assert.sameValue(explicit.nanosecond, 0, "nanosecond default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args, undefined), -+ 2000, 5, "M05", 2, 12, 34, 56, 123, 456, 0, -+ "nanosecond default argument (argument present)" -+); - --const implicit = new Temporal.PlainDateTime(...args); --assert.sameValue(implicit.nanosecond, 0, "nanosecond default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args), -+ 2000, 5, "M05", 2, 12, 34, 56, 123, 456, 0, -+ "nanosecond default argument (argument missing)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/ambiguous-date.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/ambiguous-date.js -new file mode 100644 -index 0000000000000000000000000000000000000000..476129400d3114d86119abd53725e4c9870cd555 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/ambiguous-date.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Ambiguous addition is handled according to the overflow option -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ months: 1 }), -+ 2020, 2, "M02", 29, 15, 0, 0, 0, 0, 0, -+ "constrain when ambiguous result (overflow options not supplied)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ months: 1 }, { overflow: "constrain" }), -+ 2020, 2, "M02", 29, 15, 0, 0, 0, 0, 0, -+ "constrain when ambiguous result (overflow options supplied)" -+); -+ -+assert.throws( -+ RangeError, -+ () => jan31.add({ months: 1 }, { overflow: "reject" }), -+ "throw when ambiguous result with reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7fd1317644daa70a728a73456211bdeee619d95e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-duration.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Duration object arguments are handled -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add(Temporal.Duration.from("P1MT1S")), -+ 2020, 2, "M02", 29, 15, 0, 1, 0, 0, 0, -+ "Duration argument" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4780d5ac08ffd90579b9fd2f444e22aa2f685da6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-object-insufficient-data.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: At least one recognized property has to be present in argument -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+assert.throws( -+ TypeError, -+ () => jan31.add({}), -+ "empty object not acceptable" -+); -+ -+assert.throws( -+ TypeError, -+ () => jan31.add({ month: 12 }), // should be "months" -+ "misspelled property in argument throws if no other properties are present" -+); -+ -+assert.throws( -+ TypeError, -+ () => jan31.add({ nonsense: true }), -+ "unrecognized properties throw if no other recognized property is present" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ nonsense: 1, days: 1 }), -+ 2020, 2, "M02", 1, 15, 0, 0, 0, 0, 0, -+ "unrecognized properties ignored provided at least one recognized property is present" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-plain-object-mixed-signs.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-plain-object-mixed-signs.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0a308a79a043d41b36cf78708228ee8eae7748fe ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/argument-plain-object-mixed-signs.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Positive and negative values in the temporalDurationLike argument are not acceptable -+features: [Temporal] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+["constrain", "reject"].forEach((overflow) => { -+ assert.throws( -+ RangeError, -+ () => jan31.add({ hours: 1, minutes: -30 }, { overflow }), -+ `mixed positive and negative values always throw (overflow = "${overflow}")` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/hour-overflow.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/hour-overflow.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fe6f83e3f6d8319d362539de2213a96fe52e3d60 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/hour-overflow.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Testing overflow hours (adding hours that push one to the next/previous day) -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2020, 5, 31, 23, 12, 38, 271, 986, 102); -+ -+TemporalHelpers.assertPlainDateTime( -+ earlier.add({ hours: 2 }), -+ 2020, 6, "M06", 1, 1, 12, 38, 271, 986, 102, -+ "hours overflow (push to next day)" -+); -+ -+const later = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+ -+TemporalHelpers.assertPlainDateTime( -+ later.add({ hours: -12 }), -+ 2019, 10, "M10", 28, 22, 46, 38, 271, 986, 102, -+ "hours overflow (push to previous day)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6110946bab89a70482e0867dc7513062d8002885 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/limits.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+---*/ -+ -+const min = new Temporal.PlainDateTime(-271821, 4, 19, 0, 0, 0, 0, 0, 1); -+const max = new Temporal.PlainDateTime(275760, 9, 13, 23, 59, 59, 999, 999, 999); -+ -+["reject", "constrain"].forEach((overflow) => { -+ assert.throws( -+ RangeError, -+ () => max.add({ nanoseconds: 1 }, { overflow }), -+ `adding 1 nanosecond beyond maximum limit (overflow = ${overflow})` -+ ); -+ assert.throws( -+ RangeError, -+ () => min.add({ nanoseconds: -1 }, { overflow }), -+ `adding -1 nanosecond beyond minimum limit (overflow = ${overflow})` -+ ); -+ -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/negative-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/negative-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c60f871e6131bda8e69f8b6d7efe7a680778a97a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/negative-duration.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Negative durations can be supplied -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ minutes: -30 }), -+ 2020, 1, "M01", 31, 14, 30, 0, 0, 0, 0, -+ "negative minutes" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ seconds: -30 }), -+ 2020, 1, "M01", 31, 14, 59, 30, 0, 0, 0, -+ "negative seconds" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-empty.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-empty.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d7c923f6f24eb56906bb5a612f0e0ada6ff332d1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-empty.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Verify that undefined options are handled correctly. -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ months: 1 }, {}), -+ 2020, 2, "M02", 29, 15, 0, 0, 0, 0, 0, -+ "options may be empty object" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.add({ months: 1 }, () => {}), -+ 2020, 2, "M02", 29, 15, 0, 0, 0, 0, 0, -+ "options may be function object" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9255c7a10f4585cb28387ee4aa15449daf98c7a1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-invalid.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: Various invalid (wrong type) values for options argument -+features: [Temporal, Symbol] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+const badOptions = [null, 1, 'hello', true, Symbol('foo'), 1n]; -+ -+badOptions.forEach((bad) => { -+ assert.throws( -+ TypeError, -+ () => jan31.add({ years: 1 }, bad), -+ `invalid options (${typeof bad})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..68c33eb49700883d957f25c41c05a87263cd2815 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.add -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.add({ months: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/overflow-invalid-string.js -index 2ff326b8d67b2fe010541be2485e701491e40eae..6ce6ecc29de5425dd1caa3af9b8cf8cd0fb20b2f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/add/overflow-invalid-string.js -@@ -20,4 +20,13 @@ features: [Temporal] - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12); - const duration = new Temporal.Duration(3, 3, 0, 3, 3); --assert.throws(RangeError, () => datetime.add(duration, { overflow: "other string" })); -+ -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => datetime.add({ months: 1 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfWeek/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfWeek/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..437ac74b60ea07469f4c89ff9764d13b994be111 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfWeek/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.dayofweek -+description: Checking day of week for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.dayOfWeek, 4, "check day of week information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfYear/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfYear/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..98ee0fbef0a360a7390e4ce1175c2d7a7ec0906b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/dayOfYear/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.dayofyear -+description: Checking day of year for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.dayOfYear, 323, "check day of year information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInMonth/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInMonth/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7059e7a0cb90444d28d1aac5ed229afdc64ee59e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInMonth/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.daysinmonth -+description: Checking days in month for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.daysInMonth, 30, "check days in month information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInWeek/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInWeek/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f34e00f7560150ab0bc384d2bf9d40b16d0ee65f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInWeek/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.daysinweek -+description: Checking days in week for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.daysInWeek, 7, "check days in week information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInYear/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInYear/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d3c7a5d8a94087d03ff60fbb734bcdc4e5977930 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/daysInYear/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.daysinyear -+description: Checking days in year for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.daysInYear, 366, "check days in year information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3b5f54af8801f08dcb9f3e74c29ecd8fd938e8ac ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: A number is converted to a string, then to Temporal.PlainDateTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+let arg = 19761118; -+ -+const result = instance.equals(arg); -+assert.sameValue(result, true, "19761118 is a valid ISO string for PlainDateTime"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..054e032ded502a25239f535fb99c12564263414b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-object-insufficient-data.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: If argument is an object, it must contain sufficient information -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+ -+assert.throws( -+ TypeError, -+ () => dt.equals({ year: 1976 }), -+ "object must contain required properties" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2ef93da20c014ebfafc7dcf8ddccdedec4379686 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..347888b944a12fce05c1712a4f57300e899554e5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue(result1, true, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue(result2, true, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bfbdcec9462eb865933aa72c1926a07991c67b5c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.equals(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2ada66e34e40462b71b21c9bfdc7ad1d97ef87f5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type.js -index 2ec4c776d5de8a72cabc9eeec28e6d0c326a82cc..686d371b9aec517dfd57fec980b9bdae155ba9f1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type.js -@@ -1,20 +1,36 @@ --// Copyright (C) 2020 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plaindatetime.prototype.equals --description: Appropriate error thrown when argument cannot be converted to a valid string --features: [Symbol, Temporal] -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] - ---*/ - --const instance = Temporal.PlainDateTime.from({ year: 2000, month: 5, day: 2, minute: 34, second: 56, millisecond: 987, microsecond: 654, nanosecond: 321 }); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); - --assert.throws(RangeError, () => instance.equals(undefined), "undefined"); --assert.throws(RangeError, () => instance.equals(null), "null"); --assert.throws(RangeError, () => instance.equals(true), "true"); --assert.throws(RangeError, () => instance.equals(""), "empty string"); --assert.throws(TypeError, () => instance.equals(Symbol()), "symbol"); --assert.throws(RangeError, () => instance.equals(1), "1"); --assert.throws(TypeError, () => instance.equals({}), "plain object"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainDateTime), "Temporal.PlainDateTime"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainDateTime.prototype), "Temporal.PlainDateTime.prototype"); -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..72133b1e514e7d8e3e05f5751aeb9734131d5526 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/basic.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: Checking a typical case (everything defined, no NaNs, nothing throws, etc.) -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const dt2 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+const dt3 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+const dt4 = new Temporal.PlainDateTime(2019, 10, 29, 15, 23, 30, 123, 456, 789); -+const dt5 = new Temporal.PlainDateTime(1976, 11, 18, 10, 46, 38, 271, 986, 102); -+ -+assert.sameValue(dt1.equals(dt1), true, "equal"); -+assert.sameValue(dt1.equals(dt2), false, "unequal"); -+assert.sameValue(dt2.equals(dt3), true, "equal with different objects"); -+assert.sameValue(dt2.equals(dt4), false, "same date, different time"); -+assert.sameValue(dt2.equals(dt5), false, "same time, different date"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/calendar-checked.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/calendar-checked.js -new file mode 100644 -index 0000000000000000000000000000000000000000..de8dfabf30ea60209153138d7ce3cee2d58abeb4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/calendar-checked.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: Calendar is taken into account if the ISO data is equal -+includes: [compareArray.js,temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const actual = []; -+const calendar1 = TemporalHelpers.toPrimitiveObserver(actual, "A", "calendar1"); -+const calendar2 = TemporalHelpers.toPrimitiveObserver(actual, "A", "calendar2"); -+const calendar3 = TemporalHelpers.toPrimitiveObserver(actual, "B", "calendar3"); -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar1); -+const dt1b = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar1); -+const dt2 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar2); -+const dt3 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar3); -+ -+assert.sameValue(dt1.equals(dt1b), true, "same calendar object"); -+assert.compareArray(actual, []); -+ -+assert.sameValue(dt1.equals(dt2), true, "same calendar string"); -+assert.compareArray(actual, ["get calendar1.toString", "call calendar1.toString", "get calendar2.toString", "call calendar2.toString"]); -+ -+actual.splice(0, actual.length); // empty it for the next check -+assert.sameValue(dt1.equals(dt3), false, "different calendar string"); -+assert.compareArray(actual, ["get calendar1.toString", "call calendar1.toString", "get calendar3.toString", "call calendar3.toString"]); -+ -+const calendar4 = { toString() { throw new Test262Error("should not call calendar4.toString") } }; -+const calendar5 = { toString() { throw new Test262Error("should not call calendar5.toString") } }; -+const dt4 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar4); -+const dt5 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102, calendar4); -+const dt6 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102, calendar5); -+assert.sameValue(dt4.equals(dt5), false, "not equal same calendar"); -+assert.sameValue(dt4.equals(dt6), false, "not equal different calendar"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/cast.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/cast.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bad87ec1d7bef50cca4a859958d29a7528598183 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/cast.js -@@ -0,0 +1,46 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: Argument may be cast -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const dt2 = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+ -+assert.sameValue( -+ dt1.equals({ -+ year: 1976, -+ month: 11, -+ day: 18, -+ hour: 15, -+ minute: 23, -+ second: 30, -+ millisecond: 123, -+ microsecond: 456, -+ nanosecond: 789 -+ }), -+ true, -+ "casts argument (plain object, positive)" -+); -+ -+ -+assert.sameValue( -+ dt2.equals({ year: 1976, month: 11, day: 18, hour: 15 }), -+ false, -+ "casts argument (plain object, negative)" -+); -+ -+assert.sameValue( -+ dt1.equals("1976-11-18T15:23:30.123456789"), -+ true, -+ "casts argument (string, positive)" -+); -+ -+assert.sameValue( -+ dt2.equals("1976-11-18T15:23:30.123456789"), -+ false, -+ "casts argument (string, negative)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f8687efb4dee0f9c0a2fc6b44ceeca1f047d79f0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.equals -+description: Leap second is a valid ISO string for PlainDateTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for PlainDateTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "second: 60 is ignored in property bag for PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js -index 175c2d7016608ce7bc8ba5438ef7495a2f217227..6eb6fd5c27694d0467d1ef58b575565a76596147 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/equals/year-zero.js -@@ -8,14 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -+ "-000000-12-07", - "-000000-12-07T03:24:30", -- "-000000-12-07T03:24:30+01:00[UTC]" -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { instance.equals(arg); }, -+ () => instance.equals(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/monthsInYear/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/monthsInYear/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f918a25355e39f7611b427d4fe5d68cd9823711b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/monthsInYear/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.monthsinyear -+description: Checking months in year for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.monthsInYear, 12, "check months in year information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/balance.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/balance.js -new file mode 100644 -index 0000000000000000000000000000000000000000..37a7947b6e3bff9032c17be4866d1aef02a34bcb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/balance.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Rounding balances to the next smallest unit -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 23, 59, 59, 999, 999, 999); -+ -+["day", "hour", "minute", "second", "millisecond", "microsecond"].forEach((smallestUnit) => { -+ TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit }), -+ 1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0, -+ `balances to next ${smallestUnit}` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..15db01f45a97e8e3ecaef93eeac40a1a4106a0f5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/limits.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+---*/ -+ -+const min = new Temporal.PlainDateTime(-271821, 4, 19, 0, 0, 0, 0, 0, 1); -+const max = new Temporal.PlainDateTime(275760, 9, 13, 23, 59, 59, 999, 999, 999); -+ -+["day", "hour", "minute", "second", "millisecond", "microsecond"].forEach((smallestUnit) => { -+ assert.throws( -+ RangeError, -+ () => min.round({ smallestUnit, roundingMode: "floor" }), -+ `rounding beyond limit (unit = ${smallestUnit}, rounding mode = floor)` -+ ); -+ assert.throws( -+ RangeError, -+ () => max.round({ smallestUnit, roundingMode: "ceil" }), -+ `rounding beyond limit (unit = ${smallestUnit}, rounding mode = ceil)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eaf7bd764a62c75932de6a772694e03d3cd822d5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/options-wrong-type.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: TypeError thrown when options argument is missing or a non-string primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ undefined, -+ null, -+ true, -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+assert.throws(TypeError, () => instance.round(), "TypeError on missing options argument"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.round(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/rounding-direction.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/rounding-direction.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5e0e1eaeca41e346444f9473fa2652e92fed4d0e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/rounding-direction.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Rounding down is towards the Big Bang, not the epoch or 1 BCE -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(-99, 12, 15, 12, 0, 0, 500); -+TemporalHelpers.assertPlainDateTime( -+ instance.round({ smallestUnit: "second", roundingMode: "floor" }), -+ -99, 12, "M12", 15, 12, 0, 0, 0, 0, 0, -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode floor)" -+); -+TemporalHelpers.assertPlainDateTime( -+ instance.round({ smallestUnit: "second", roundingMode: "trunc" }), -+ -99, 12, "M12", 15, 12, 0, 0, 0, 0, 0, -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc)" -+); -+TemporalHelpers.assertPlainDateTime( -+ instance.round({ smallestUnit: "second", roundingMode: "ceil" }), -+ -99, 12, "M12", 15, 12, 0, 1, 0, 0, 0, -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode ceil)" -+); -+TemporalHelpers.assertPlainDateTime( -+ instance.round({ smallestUnit: "second", roundingMode: "halfExpand" }), -+ -99, 12, "M12", 15, 12, 0, 1, 0, 0, 0, -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode halfExpand)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js -new file mode 100644 -index 0000000000000000000000000000000000000000..304046e331de12da66ed4d3dbe7b43a77e739764 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Rounding increment should properly divide the relevant time unit -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+[1, 2, 3, 4, 6, 8, 12].forEach((roundingIncrement) => { -+ assert.sameValue( -+ dt.round({ smallestUnit: "hour", roundingIncrement }) instanceof Temporal.PlainDateTime, -+ true, -+ `valid hour increments divide into 24 (rounding increment = ${roundingIncrement})`); -+}); -+ -+["minute", "second"].forEach((smallestUnit) => { -+ [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30].forEach((roundingIncrement) => { -+ assert.sameValue( -+ dt.round({ smallestUnit, roundingIncrement }) instanceof Temporal.PlainDateTime, -+ true, -+ `valid ${smallestUnit} increments divide into 60 (rounding increment = ${roundingIncrement})` -+ ); -+ }); -+}); -+ -+["millisecond", "microsecond", "nanosecond"].forEach((smallestUnit) => { -+ [1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500].forEach((roundingIncrement) => { -+ assert.sameValue( -+ dt.round({ smallestUnit, roundingIncrement }) instanceof Temporal.PlainDateTime, -+ true, -+ `valid ${smallestUnit} increments divide into 1000 (rounding increment = ${roundingIncrement})`); -+ }); -+}); -+ -+const nextIncrements = { -+ "hour": 24, -+ "minute": 60, -+ "second": 60, -+ "millisecond": 1000, -+ "microsecond": 1000, -+ "nanosecond": 1000 -+}; -+ -+Object.entries(nextIncrements).forEach(([unit, next]) => { -+ assert.throws( -+ RangeError, -+ () => dt.round({ smallestUnit: unit, roundingIncrement: next }), -+ `throws on increments that are equal to the next highest (unit = ${unit}, increment = ${next})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js -new file mode 100644 -index 0000000000000000000000000000000000000000..82ab14b519cb68302a0a1118c3a50c797b0cba72 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Throw exception if the rounding unit does not properly divide the relevant time unit -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+const units = ["day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"]; -+units.forEach((unit) => { -+ assert.throws( -+ RangeError, -+ () => dt.round({ smallestUnit: unit, roundingIncrement: 29 }), -+ `throws on increments that do not divide evenly into the next highest (unit = ${unit})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js -new file mode 100644 -index 0000000000000000000000000000000000000000..71470b4bb9cb558010676923cd23046d0716ca72 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: One day is a valid rounding increment -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "day", roundingIncrement: 1 }), -+ 1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0, -+ "1 day is a valid increment" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d434095df9aded6d3631fdb685bca7d2568f74ec ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-basic.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Basic checks for rounding mode -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "hour", roundingIncrement: 4 }), -+ 1976, 11, "M11", 18, 16, 0, 0, 0, 0, 0, -+ "rounds to an increment of hours" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "minute", roundingIncrement: 15 }), -+ 1976, 11, "M11", 18, 14, 30, 0, 0, 0, 0, -+ "rounds to an increment of minutes" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "second", roundingIncrement: 30 }), -+ 1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0, -+ "rounds to an increment of seconds" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "millisecond", roundingIncrement: 10 }), -+ 1976, 11, "M11", 18, 14, 23, 30, 120, 0, 0, -+ "rounds to an increment of milliseconds" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "microsecond", roundingIncrement: 10 }), -+ 1976, 11, "M11", 18, 14, 23, 30, 123, 460, 0, -+ "rounds to an increment of microseconds" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: "nanosecond", roundingIncrement: 10 }), -+ 1976, 11, "M11", 18, 14, 23, 30, 123, 456, 790, -+ "rounds to an increment of nanoseconds" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3e290c9317894961f8d54201badfa6045d00bd32 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Basic checks for ceiling rounding mode -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+const incrementOneCeil = { -+ "day": [1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0], -+ "hour": [1976, 11, "M11", 18, 15, 0, 0, 0, 0, 0], -+ "minute": [1976, 11, "M11", 18, 14, 24, 0, 0, 0, 0], -+ "second": [1976, 11, "M11", 18, 14, 23, 31, 0, 0, 0], -+ "millisecond": [1976, 11, "M11", 18, 14, 23, 30, 124, 0, 0], -+ "microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 457, 0], -+ "nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789] -+}; -+ -+Object.entries(incrementOneCeil).forEach(([smallestUnit, expected]) => { -+ TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit, roundingMode: "ceil" }), -+ ...expected, -+ `rounds up to ${smallestUnit} (ceil)`, -+ undefined -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8379b6100f8c2a525eaec454572b7fe0c4de947e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Basic checks for the floor rounding mode -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+const incrementOneFloor = { -+ "day": [1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0], -+ "hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0], -+ "minute": [1976, 11, "M11", 18, 14, 23, 0, 0, 0, 0], -+ "second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0], -+ "millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0], -+ "microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 0], -+ "nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789] -+}; -+ -+Object.entries(incrementOneFloor).forEach(([smallestUnit, expected]) => { -+ TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit, roundingMode: "floor" }), -+ ...expected, -+ `rounds down to ${smallestUnit} (floor)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5cb4275c3aafb2a4e499a34517b0b31a430ffd16 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Basic checks for half-expand rounding mode -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+const incrementOneNearest = { -+ "day": [1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0], -+ "hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0], -+ "minute": [1976, 11, "M11", 18, 14, 24, 0, 0, 0, 0], -+ "second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0], -+ "millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0], -+ "microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 457, 0], -+ "nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789] -+}; -+ -+Object.entries(incrementOneNearest).forEach(([smallestUnit, expected]) => { -+ TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit, roundingMode: "halfExpand" }), -+ ...expected, -+ `rounds to nearest ${smallestUnit} (half-expand)`, -+ undefined -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js -new file mode 100644 -index 0000000000000000000000000000000000000000..47274d17459a18dbd7e59bc80db943d6392a4087 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Half-expand is the default rounding mode -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+const units = { -+ "day": [1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0], -+ "hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0], -+ "minute": [1976, 11, "M11", 18, 14, 24, 0, 0, 0, 0], -+ "second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0], -+ "millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0], -+ "microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 457, 0], -+ "nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789] -+}; -+ -+const expected = [1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0]; -+ -+Object.entries(units).forEach(([unit, expected]) => { -+ TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit: unit }), -+ ...expected, -+ `halfExpand is the default (smallest unit = ${unit}, rounding mode absent)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-invalid-string.js -index 00a3140c539b328d6511b3bc1ac844370be0d05a..1a231aad4c7ec686cc5393d31d779b0de0d001d9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => datetime.round({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => datetime.round({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c8f0a2784884e890d5c971dc9b6a182bfe042e8e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Basic checks for truncation rounding mode -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+const incrementOneFloor = { -+ "day": [1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0], -+ "hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0], -+ "minute": [1976, 11, "M11", 18, 14, 23, 0, 0, 0, 0], -+ "second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0], -+ "millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0], -+ "microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 0], -+ "nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789] -+}; -+ -+Object.entries(incrementOneFloor).forEach(([smallestUnit, expected]) => { -+ TemporalHelpers.assertPlainDateTime( -+ dt.round({ smallestUnit, roundingMode: "trunc" }), -+ ...expected, -+ `truncates to ${smallestUnit}` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundto-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundto-invalid-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..184d11731cc36d98410dc68623c2d2ffaedf5880 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/roundto-invalid-string.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: RangeError thrown when smallestUnit option not one of the allowed string values -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => datetime.round(smallestUnit), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-disallowed-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-disallowed-units.js -deleted file mode 100644 -index cd85d00ae1917339ed5c24b3c1e6e6677e7ee770..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-disallowed-units.js -+++ /dev/null -@@ -1,32 +0,0 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-temporal.plaindatetime.prototype.round --description: Specifically disallowed units for the smallestUnit option --features: [Temporal, arrow-function] -----*/ -- --const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 789, 999, 999); --const invalidUnits = [ -- "era", -- "eras", -- "year", -- "month", -- "week", -- "years", -- "months", -- "weeks", --]; --invalidUnits.forEach((smallestUnit) => { -- assert.throws( -- RangeError, -- () => instance.round({ smallestUnit }), -- `{ smallestUnit: "${smallestUnit}" } should not be allowed as an argument to round` -- ); -- assert.throws( -- RangeError, -- () => instance.round(smallestUnit), -- `"${smallestUnit}" should not be allowed as an argument to round` -- ); --}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-invalid-string.js -index e4d8f8503c14a854fbfda1ceb54c88b5259be30c..f37ebe513cce8ea9de95361e4965598e49615b6f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/smallestunit-invalid-string.js -@@ -8,4 +8,26 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => datetime.round({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => datetime.round({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7f57d1d220a75896a9bb3c07a95613b2f0de1968 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object-insufficient-data.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Throw if smallest unit is missing from argument -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ RangeError, -+ () => dt.round({ roundingIncrement: 1, roundingMode: "ceil" }), -+ "throws without required smallestUnit parameter" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8ca7977a4e9d064ed64b356f3dd50caec2035428 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Throw if argument is an empty plain object -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ RangeError, -+ () => dt.round({}), -+ "throws on empty object" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-no-argument.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-no-argument.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d75fe284628dca3369202af83938467cac90e15e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-no-argument.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Throw if no arguments at all are given -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ TypeError, -+ () => dt.round(), -+ "throws without any parameters" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7b49ded8ddc1e7db64c770e55c23bc1d7a9b5704 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/round/throws-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.round -+description: Throw if sole argument is undefined -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ TypeError, -+ () => dt.round(undefined), -+ "throws without undefined as sole parameter" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5c0179d5a5d3bbbec51d88da2f4d1657d423a30e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: A number is converted to a string, then to Temporal.PlainDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+let arg = 19761118; -+ -+const result = instance.since(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDateTime"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4326ae653ca39dedf2de79141625d25610726bb9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-object.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Plain objects are accepted as an argument -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration( -+ dt.since({ year: 2019, month: 10, day: 29, hour: 10 }), -+ 0, 0, 0, -15684, -18, -36, -29, -876, -543, -211, -+ "casts argument (plain object)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..dd989748cced70e1c9257530fba107334fcb57e3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e12a26b7351a0c0c02e303e2c7dd067b333f16d9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..42f638759c2c3a240f16e5e962979e2d1d1cd742 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.since(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..26dd4d767b0d7d4f9b4bc1a7ffda45997530a040 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c8096d191dfd0ec9a2af833029334f118560ee7a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Date-like string arguments are acceptable -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration( -+ dt.since("2019-10-29T10:46:38.271986102"), -+ 0, 0, 0, -15684, -19, -23, -8, -148, -529, -313, -+ "casts argument (string)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..535326bbd6306a1b52611115e79a833925f2d263 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/different-calendars-throws.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/different-calendars-throws.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6312b4748c4bfdf6081965cc09c971287c49436c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/different-calendars-throws.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Fail if the argument is a PlainDateTime with a different calendar -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(2000, 1, 1, 0, 0, 0, 0, 0, 0); -+const dt2 = new Temporal.PlainDateTime(2000, 1, 1, 0, 0, 0, 0, 0, 0, {}); -+ -+assert.throws( -+ RangeError, -+ () => dt1.since(dt2), -+ "different calendars not allowed" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-invalid-string.js -index 1e8f9c8054899604e59827feaf9d86f413e2cf6d..547667d70d3f84321a37b793b8046589c210eca4 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/largestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainDateTime(2001, 6, 3, 13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..44a464e405640f1134419661381db6e2dba99cc5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Leap second is a valid ISO string for PlainDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDateTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/no-unnecessary-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/no-unnecessary-units.js -new file mode 100644 -index 0000000000000000000000000000000000000000..20e600dc9ee2285f3619e96c0d85a237a5de8b53 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/no-unnecessary-units.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Do not return Durations with unnecessary units -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb2 = new Temporal.PlainDateTime(2020, 2, 2, 0, 0); -+const feb28 = new Temporal.PlainDateTime(2021, 2, 28, 0, 0); -+ -+TemporalHelpers.assertDuration( -+ feb28.since(feb2), -+ 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, -+ "does not include higher units than necessary (no largest unit)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb28.since(feb2, { largestUnit: "months" }), -+ 0, 12, 0, 26, 0, 0, 0, 0, 0, 0, -+ "does not include higher units than necessary (largest unit = months)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb28.since(feb2, { largestUnit: "years" }), -+ 1, 0, 0, 26, 0, 0, 0, 0, 0, 0, -+ "does not include higher units than necessary (largest unit = years)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-empty.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-empty.js -new file mode 100644 -index 0000000000000000000000000000000000000000..579d16a14a0b6172a528cd80ef1a49547f49efd5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-empty.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Empty objects are acceptable -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+TemporalHelpers.assertDuration( -+ feb21.since(feb20, {}), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "empty plain object options" -+); -+ -+TemporalHelpers.assertDuration( -+ feb21.since(feb20, () => {}), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "empty function object options" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6ba94819ce1b704d43b5ddbc2b95952ab69303ef ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-invalid.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: A variety of bad options (type error thrown) -+features: [Temporal, Symbol] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+const badOptions = [null, 1, 'hello', true, Symbol('foo'), 1n]; -+badOptions.forEach((bad) => { -+ assert.throws( -+ TypeError, -+ () => feb21.since(feb20, bad), -+ `bad options (${typeof bad})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ef026cc97c3a3e70dc8b5e7eb85ce2e9372c8b96 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.since(new Temporal.PlainDateTime(1976, 11, 18), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/returns-days.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/returns-days.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c7e77d98516382219895b2555ddd21496542d02e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/returns-days.js -@@ -0,0 +1,44 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Days are the default level of specificity -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb_1_2020 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb_1_2021 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+TemporalHelpers.assertDuration( -+ feb_1_2021.since(feb_1_2020), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "defaults to returning days (no options)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb_1_2021.since(feb_1_2020, { largestUnit: "auto" }), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "defaults to returning days (largest unit = auto)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb_1_2021.since(feb_1_2020, { largestUnit: "days" }), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "defaults to returning days (largest unit = days)" -+); -+ -+const dt = new Temporal.PlainDateTime(2020, 2, 1, 0, 0, 0, 0, 0, 1); -+ -+TemporalHelpers.assertDuration( -+ dt.since(feb_1_2020), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -+ "defaults to returning days (nanosecond)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb_1_2021.since(dt), -+ 0, 0, 0, 365, 23, 59, 59, 999, 999, 999, -+ "defaults to returning days (nanosecond)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/round-relative-to-receiver.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/round-relative-to-receiver.js -new file mode 100644 -index 0000000000000000000000000000000000000000..982d732e8110c2121205e22b62bcb2456e5854a1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/round-relative-to-receiver.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Values are rounded relative to the receiver -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(2019, 1, 1); -+const dt2 = new Temporal.PlainDateTime(2020, 7, 2); -+ -+TemporalHelpers.assertDuration( -+ dt2.since(dt1, { smallestUnit: "years", roundingMode: "halfExpand" }), -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "rounds relative to the receiver (positive case)" -+); -+ -+TemporalHelpers.assertDuration( -+ dt1.since(dt2, { smallestUnit: "years", roundingMode: "halfExpand" }), -+ -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "rounds relative to the receiver (negative case)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0b18fac0d3998c234dbc091c908ac17a6c7b2126 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-basic.js -@@ -0,0 +1,48 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Round to different smallest increments -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 3, roundingMode: "halfExpand" }), -+ 0, 0, 0, 973, 3, 0, 0, 0, 0, 0, -+ "rounds to an increment of hours" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 30, roundingMode: "halfExpand" }), -+ 0, 0, 0, 973, 4, 30, 0, 0, 0,0, -+ "rounds to an increment of minutes" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 15, roundingMode: "halfExpand" }), -+ 0, 0, 0, 973, 4, 17, 0, 0, 0, 0, -+ "rounds to an increment of seconds" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 10, roundingMode: "halfExpand" }), -+ 0, 0, 0, 973, 4, 17, 4, 860, 0, 0, -+ "rounds to an increment of milliseconds" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 10, roundingMode: "halfExpand" }), -+ 0, 0, 0, 973, 4, 17, 4, 864, 200, 0, -+ "rounds to an increment of microseconds" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 10, roundingMode: "halfExpand" }), -+ 0, 0, 0, 973, 4, 17, 4, 864, 197, 530, -+ "rounds to an increment of nanoseconds" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-cleanly-divides.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-cleanly-divides.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0d331d2966e955094688ec49f949e2100709f896 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-cleanly-divides.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Rounding argument cleanly divides the relevant smallest unit -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+[1, 2, 3, 4, 6, 8, 12].forEach((roundingIncrement) => { -+ const options = { smallestUnit: "hours", roundingIncrement }; -+ assert( -+ later.since(earlier, options) instanceof Temporal.Duration, -+ `valid hour increments divide into 24 (rounding increment = ${roundingIncrement}, smallest unit = hours)` -+ ); -+}); -+ -+["minutes", "seconds"].forEach((smallestUnit) => { -+ [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30].forEach((roundingIncrement) => { -+ const options = { smallestUnit, roundingIncrement }; -+ assert( -+ later.since(earlier, options) instanceof Temporal.Duration, -+ `valid ${smallestUnit} increments divide into 60 (rounding increment = ${roundingIncrement})` -+ ); -+ }); -+}); -+ -+["milliseconds", "microseconds", "nanoseconds"].forEach((smallestUnit) => { -+ [1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500].forEach((roundingIncrement) => { -+ const options = { smallestUnit, roundingIncrement }; -+ assert( -+ later.since(earlier, options) instanceof Temporal.Duration, -+ `valid ${smallestUnit} increments divide into 1000 (rounding increment = ${roundingIncrement})` -+ ); -+ }); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-does-not-divide.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-does-not-divide.js -new file mode 100644 -index 0000000000000000000000000000000000000000..15f1727aeeae4fee484db156e5510dff57a4d36e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingincrement-does-not-divide.js -@@ -0,0 +1,45 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Throw if rounding increment does not cleanly divide the relevant unit -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+const badIncrements = { -+ "hours": 11, -+ "minutes": 29, -+ "seconds": 29, -+ "milliseconds": 29, -+ "microseconds": 29, -+ "nanoseconds": 29 -+}; -+ -+Object.entries(badIncrements).forEach(([unit, bad]) => { -+ assert.throws( -+ RangeError, -+ () => later.since(earlier, { smallestUnit: unit, roundingIncrement: bad }), -+ `throws on increments that do not divide evenly into the next highest (unit = ${unit}, increment = ${bad})` -+ ); -+}); -+ -+const fullIncrements = { -+ "hours": 24, -+ "minutes": 60, -+ "seconds": 60, -+ "milliseconds": 1000, -+ "microseconds": 1000, -+ "nanoseconds": 1000 -+}; -+ -+Object.entries(fullIncrements).forEach(([unit, bad]) => { -+ assert.throws( -+ RangeError, -+ () => later.since(earlier, { smallestUnit: unit, roundingIncrement: bad }), -+ `throws on increments that are equal to the next highest (unit = ${unit}, rounding increment = ${bad}` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-ceil-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-ceil-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fd82fdbfdf8aaf478f7c3f0cfce32815dc6ea746 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-ceil-basic.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Ceiling rounding mode basic tests -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+const incrementOneCeil = [ -+ ["years", [3], [-2]], -+ ["months", [0, 32], [0, -31]], -+ ["weeks", [0, 0, 140], [0, 0, -139]], -+ ["days", [0, 0, 0, 974], [0, 0, 0, -973]], -+ ["hours", [0, 0, 0, 973, 5], [0, 0, 0, -973, -4]], -+ ["minutes", [0, 0, 0, 973, 4, 18], [0, 0, 0, -973, -4, -17]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 5], [0, 0, 0, -973, -4, -17, -4]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 865], [0, 0, 0, -973, -4, -17, -4, -864]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 198], [0, 0, 0, -973, -4, -17, -4, -864, -197]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532], [0, 0, 0, -973, -4, -17, -4, -864, -197, -532]] -+]; -+const roundingMode = "ceil"; -+incrementOneCeil.forEach(([smallestUnit, expectedPositive, expectedNegative]) => { -+ const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive; -+ const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative; -+ TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit, roundingMode }), -+ py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns, -+ `rounds up to ${smallestUnit} (roundingMode = ceil, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit, roundingMode }), -+ ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns, -+ `rounds up to ${smallestUnit} (rounding mode = ceil, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-floor-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-floor-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e075d51dbf7b6e9a40baa02826fd73f8637e7558 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-floor-basic.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Floor rounding mode basic tests -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+const incrementOneFloor = [ -+ ["years", [2], [-3]], -+ ["months", [0, 31], [0, -32]], -+ ["weeks", [0, 0, 139], [0, 0, -140]], -+ ["days", [0, 0, 0, 973], [0, 0, 0, -974]], -+ ["hours", [0, 0, 0, 973, 4], [0, 0, 0, -973, -5]], -+ ["minutes", [0, 0, 0, 973, 4, 17], [0, 0, 0, -973, -4, -18]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 4], [0, 0, 0, -973, -4, -17, -5]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 864], [0, 0, 0, -973, -4, -17, -4, -865]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197], [0, 0, 0, -973, -4, -17, -4, -864, -198]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532], [0, 0, 0, -973, -4, -17, -4, -864, -197, -532]] -+]; -+ -+const roundingMode = "floor"; -+ -+incrementOneFloor.forEach(([smallestUnit, expectedPositive, expectedNegative]) => { -+ const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive; -+ const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative; -+ TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit, roundingMode }), -+ py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns, -+ `rounds down to ${smallestUnit} (rounding mode = ${roundingMode}, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit, roundingMode }), -+ ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns, -+ `rounds down to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..92d28c3734441d0dd8a8d49d209a3c1475a8add1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-basic.js -@@ -0,0 +1,52 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Half-expand rounding mode basic tests -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+function ensureUnsignedZero(x) { -+ return Object.is(x, -0) ? 0 : x; -+} -+ -+const incrementOneNearest = [ -+ ["years", [3]], -+ ["months", [0, 32]], -+ ["weeks", [0, 0, 139]], -+ ["days", [0, 0, 0, 973]], -+ ["hours", [0, 0, 0, 973, 4]], -+ ["minutes", [0, 0, 0, 973, 4, 17]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 5]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 864]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 198]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532]] -+]; -+const roundingMode = "halfExpand"; -+incrementOneNearest.forEach(([smallestUnit, expected]) => { -+ const [y, m = 0, w = 0, d = 0, h = 0, min = 0, s = 0, ms = 0, µs = 0, ns = 0] = expected; -+ TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit, roundingMode }), -+ y, m, w, d, h, min, s, ms, µs, ns, -+ `rounds to nearest ${smallestUnit} (rounding mode = ${roundingMode}, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit, roundingMode }), -+ ensureUnsignedZero(-y), -+ ensureUnsignedZero(-m), -+ ensureUnsignedZero(-w), -+ ensureUnsignedZero(-d), -+ ensureUnsignedZero(-h), -+ ensureUnsignedZero(-min), -+ ensureUnsignedZero(-s), -+ ensureUnsignedZero(-ms), -+ ensureUnsignedZero(-µs), -+ ensureUnsignedZero(-ns), -+ `rounds to nearest ${smallestUnit} (rounding mode = ${roundingMode}, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-default-changes.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-default-changes.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eb7aca6ebdb97e003b3e3b8bc698ab030d4e3cb8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-halfexpand-default-changes.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: A different default for largest unit will be used if smallest unit is larger than "days" -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "years", roundingMode: "halfExpand" }), -+ 3, 0, 0, 0, 0, 0, 0, 0, 0,0, -+ "assumes a different default for largestUnit if smallestUnit is larger than days (smallest unit = years)" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "months", roundingMode: "halfExpand" }), -+ 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, -+ "assumes a different default for largestUnit if smallestUnit is larger than days (smallest unit = months)" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "weeks", roundingMode: "halfExpand" }), -+ 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, -+ "assumes a different default for largestUnit if smallestUnit is larger than days (smallest unit = weeks)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-invalid-string.js -index 59b1314d56670c5e5f0bfb259902114a8a2e3f15..52f4b8fe3bf239f4238b45e46bc8da6c67973a19 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainDateTime(2000, 5, 3, 13, 35, 57, 123, 987, 500); --assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4874694cc951d7d41cc29223411f440ec102a4e8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-basic.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Truncation rounding mode basic tests -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+function ensureUnsignedZero(x) { -+ return Object.is(x, -0) ? 0 : x; -+} -+ -+const incrementOneTrunc = [ -+ ["years", [2]], -+ ["months", [0, 31]], -+ ["weeks", [0, 0, 139]], -+ ["days", [0, 0, 0, 973]], -+ ["hours", [0, 0, 0, 973, 4]], -+ ["minutes", [0, 0, 0, 973, 4, 17]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 4]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 864]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532]] -+]; -+ -+const roundingMode = "trunc"; -+ -+incrementOneTrunc.forEach(([smallestUnit, expected]) => { -+ const [y, m = 0, w = 0, d = 0, h = 0, min = 0, s = 0, ms = 0, µs = 0, ns = 0] = expected; -+ TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit, roundingMode }), -+ y, m, w, d, h, min, s, ms, µs, ns, -+ `truncates to ${smallestUnit} (rounding mode = ${roundingMode}, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit, roundingMode }), -+ ensureUnsignedZero(-y), -+ ensureUnsignedZero(-m), -+ ensureUnsignedZero(-w), -+ ensureUnsignedZero(-d), -+ ensureUnsignedZero(-h), -+ ensureUnsignedZero(-min), -+ ensureUnsignedZero(-s), -+ ensureUnsignedZero(-ms), -+ ensureUnsignedZero(-µs), -+ ensureUnsignedZero(-ns), -+ `truncates to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-is-default.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-is-default.js -new file mode 100644 -index 0000000000000000000000000000000000000000..90804658226de2c369ced507ba18a0aba4279355 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/roundingmode-trunc-is-default.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Truncation (trunc) is the default rounding mode -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes" }), -+ 0, 0, 0, 973, 4, 17, 0, 0, 0, 0, -+ "trunc is the default (round up)" -+); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds" }), -+ 0, 0, 0, 973, 4, 17, 4, 0, 0, 0, -+ "trunc is the default (round down)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/smallestunit-invalid-string.js -index a031b3f0fffdc946eadd02141e45e71a54b6019e..6fc80aa6a06cbf7f4d96103eee89ab1992c5c40e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/smallestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainDateTime(2000, 5, 3, 13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/subseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/subseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9572f9cb1f2dd5ee4eff10123b84b32a3f885a76 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/subseconds.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Returned granularity may be finer than seconds -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2020, 2, 2, 0, 0, 0, 250, 250, 250); -+ -+TemporalHelpers.assertDuration( -+ feb21.since(feb20, { largestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 86400250, 250, 250, -+ "can return subseconds (milliseconds)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb21.since(feb20, { largestUnit: "microseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 86400250250, 250, -+ "can return subseconds (microseconds)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb21.since(feb20, { largestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 86400250250250, -+ "can return subseconds (nanoseconds)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/weeks-months-mutually-exclusive.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/weeks-months-mutually-exclusive.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1191dadcfb62399b1cd03f292a5df9792102abb0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/weeks-months-mutually-exclusive.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.since -+description: Weeks and months are mutually exclusive -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const laterDateTime = dt.add({ days: 42, hours: 3 }); -+ -+TemporalHelpers.assertDuration( -+ laterDateTime.since(dt, { largestUnit: "weeks" }), -+ 0, 0, 6, 0, 3, 0, 0, 0, 0, 0, -+ "weeks and months are mutually exclusive (prefer weeks)" -+); -+ -+TemporalHelpers.assertDuration( -+ laterDateTime.since(dt, { largestUnit: "months" }), -+ 0, 1, 0, 12, 3, 0, 0, 0,0, 0, -+ "weeks and months are mutually exclusive (prefer months)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js -index e7b6146a57962d06804a89168ecbce2a9c6628ae..bc376c23533598cbce2e92c2a31497fd6bbfbc6f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/since/year-zero.js -@@ -8,14 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -+ "-000000-12-07", - "-000000-12-07T03:24:30", -- "-000000-12-07T03:24:30+01:00[UTC]" -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { instance.since(arg); }, -+ () => instance.since(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/ambiguous-date.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/ambiguous-date.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f6fe8738aeca4367c28b30e6acc79ed56f1e882f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/ambiguous-date.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Ambiguous subtraction is handled according to the overflow option -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const mar31 = new Temporal.PlainDateTime(2020, 3, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ mar31.subtract({ months: 1 }), -+ 2020, 2, "M02", 29, 15, 0, 0, 0, 0, 0, -+ "constrain when ambiguous result (overflow options not supplied)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ mar31.subtract({ months: 1 }, { overflow: "constrain" }), -+ 2020, 2, "M02", 29, 15, 0, 0, 0, 0, 0, -+ "constrain when ambiguous result (overflow options supplied)" -+); -+ -+assert.throws( -+ RangeError, -+ () => mar31.subtract({ months: 1 }, { overflow: "reject" }), -+ "throw when ambiguous result with reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fb0d3d1f8e5bcb27155accdbd4b20b8137165686 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-duration.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Duration object arguments are handled -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+const subtractWithDuration = jan31.subtract(new Temporal.Duration(0, 1, 0, 0, 0, 1)); -+TemporalHelpers.assertPlainDateTime( -+ subtractWithDuration, -+ 2019, 12, "M12", 31, 14, 59, 0, 0, 0, 0, -+ "Duration argument" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..450d14cefef05fa1ddbd39aba4b152811dd0db57 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-object-insufficient-data.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: At least one recognized property has to be present in argument -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+assert.throws( -+ TypeError, -+ () => jan31.subtract({}), -+ "empty object not acceptable" -+); -+ -+assert.throws( -+ TypeError, -+ () => jan31.subtract({ month: 12 }), // should be "months" -+ "misspelled property in argument throws if no other properties are present" -+); -+ -+assert.throws( -+ TypeError, -+ () => jan31.subtract({ nonsense: true }), -+ "unrecognized properties throw if no other recognized property is present" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.subtract({ nonsense: 1, days: 1 }), -+ 2020, 1, "M01", 30, 15, 0, 0, 0, 0, 0, -+ "unrecognized properties ignored provided at least one recognized property is present" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-plain-object-mixed-signs.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-plain-object-mixed-signs.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cabfd209396ac1e63370054280e5d3ab0d9313c7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/argument-plain-object-mixed-signs.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Positive and negative values in the temporalDurationLike argument are not acceptable -+features: [Temporal] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+["constrain", "reject"].forEach((overflow) => { -+ assert.throws( -+ RangeError, -+ () => jan31.subtract({ hours: 1, minutes: -30 }, { overflow }), -+ `mixed positive and negative values always throw (overflow = "${overflow}")` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/hour-overflow.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/hour-overflow.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bda7309920c18bf0bfb946414b40f1bb6cee0e66 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/hour-overflow.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Testing overflow hours (subtracting hours that push one to the next/previous day) -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+const later = new Temporal.PlainDateTime(2020, 5, 31, 23, 12, 38, 271, 986, 102); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.subtract({ hours: 12 }), -+ 2019, 10, "M10", 28, 22, 46, 38, 271, 986, 102, -+ "subtract result" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.add({ hours: -12 }), -+ 2019, 10, "M10", 28, 22, 46, 38, 271, 986, 102, -+ "hour overflow (pushes to previous day)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ later.subtract({ hours: -2 }), -+ 2020, 6, "M06", 1, 1, 12, 38, 271, 986, 102, -+ "subtracting a negative amount of hours is equivalent to adding hours" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..038f97fe78dbc53be8467f352539b49d832f674b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/limits.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+---*/ -+ -+const min = new Temporal.PlainDateTime(-271821, 4, 19, 0, 0, 0, 0, 0, 1); -+const max = new Temporal.PlainDateTime(275760, 9, 13, 23, 59, 59, 999, 999, 999); -+ -+["reject", "constrain"].forEach((overflow) => { -+ assert.throws( -+ RangeError, -+ () => min.subtract({ nanoseconds: 1 }, { overflow }), -+ `subtracting 1 nanosecond beyond minimum limit (overflow = ${overflow})` -+ ); -+ assert.throws( -+ RangeError, -+ () => max.subtract({ nanoseconds: -1 }, { overflow }), -+ `subtracting -1 nanosecond beyond maximum limit (overflow = ${overflow})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/negative-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/negative-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..672d87d9fc49d818a64e93d718dea63d239f46f4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/negative-duration.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Negative durations can be supplied -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.subtract({ minutes: -30 }), -+ 2020, 1, "M01", 31, 15, 30, 0, 0, 0, 0, -+ "negative minutes" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.subtract({ seconds: -30 }), -+ 2020, 1, "M01", 31, 15, 0, 30, 0, 0, 0, -+ "negative seconds" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-empty.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-empty.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ca9fd5112a8b5f9f063710dcc64ea9f62a7950b6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-empty.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Verify that undefined options are handled correctly. -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.subtract({ months: 2 }, {}), -+ 2019, 11, "M11", 30, 15, 0, 0, 0, 0, 0, -+ "options may be empty object" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ jan31.subtract({ months: 2 }, () => {}), -+ 2019, 11, "M11", 30, 15, 0, 0, 0, 0, 0, -+ "options may be function object" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ad8b1244e59588e44c36f70699ba782c2ebe0116 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-invalid.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: Various invalid (wrong type) values for options argument -+features: [Temporal, Symbol] -+---*/ -+ -+const jan31 = new Temporal.PlainDateTime(2020, 1, 31, 15, 0); -+ -+const badOptions = [null, 1, 'hello', true, Symbol('foo'), 1n]; -+ -+badOptions.forEach((bad) => { -+ assert.throws( -+ TypeError, -+ () => jan31.subtract({ years: 1 }, bad), -+ `invalid options (${typeof bad})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..38172d541d8bf8e4338b8c5d091607f77f598355 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.subtract -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.subtract({ months: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/overflow-invalid-string.js -index 1e1f1761c81466751938fe49725ddbfe0b3d275e..c3e4b694f44e2b347b69840c03f71bfe6450f004 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/subtract/overflow-invalid-string.js -@@ -20,4 +20,11 @@ features: [Temporal] - - const date = new Temporal.PlainDateTime(2000, 5, 2, 12); - const duration = new Temporal.Duration(3, 3, 0, 3, 3); --assert.throws(RangeError, () => date.subtract(duration, { overflow: "other string" })); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => date.subtract(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toJSON/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toJSON/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..261e9e6ec076ed0735cef863ffdeeffcd8f2b165 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toJSON/year-format.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tojson -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+let instance = new Temporal.PlainDateTime(-100000, 12, 3, 4, 56, 7, 890); -+assert.sameValue(instance.toJSON(), "-100000-12-03T04:56:07.89", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-10000, 4, 5, 6, 7, 8, 910); -+assert.sameValue(instance.toJSON(), "-010000-04-05T06:07:08.91", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-9999, 6, 7, 8, 9, 10, 987); -+assert.sameValue(instance.toJSON(), "-009999-06-07T08:09:10.987", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-1000, 8, 9, 10, 9, 8, 765); -+assert.sameValue(instance.toJSON(), "-001000-08-09T10:09:08.765", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-999, 10, 9, 8, 7, 6, 543); -+assert.sameValue(instance.toJSON(), "-000999-10-09T08:07:06.543", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-1, 8, 7, 6, 54, 32, 100); -+assert.sameValue(instance.toJSON(), "-000001-08-07T06:54:32.1", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(0, 6, 5, 4, 32, 10, 123); -+assert.sameValue(instance.toJSON(), "0000-06-05T04:32:10.123", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(1, 4, 3, 21, 0, 12, 345); -+assert.sameValue(instance.toJSON(), "0001-04-03T21:00:12.345", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(999, 2, 10, 12, 34, 56, 789); -+assert.sameValue(instance.toJSON(), "0999-02-10T12:34:56.789", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(1000, 1, 23, 4, 56, 7, 890); -+assert.sameValue(instance.toJSON(), "1000-01-23T04:56:07.89", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(9999, 4, 5, 6, 7, 8, 910); -+assert.sameValue(instance.toJSON(), "9999-04-05T06:07:08.91", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(10000, 6, 7, 8, 9, 10, 987); -+assert.sameValue(instance.toJSON(), "+010000-06-07T08:09:10.987", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(100000, 8, 9, 10, 9, 8, 765); -+assert.sameValue(instance.toJSON(), "+100000-08-09T10:09:08.765", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ee8746eb4b036d0b67cb0457f29745af3acad173 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.toplainmonthday -+description: > -+ Calendar.monthDayFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar); -+instance.toPlainMonthDay(); -+assert.sameValue(calendar.monthDayFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainTime/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainTime/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1ec62ba2d91905cf61fe0213dd8d04d8da73c2bc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainTime/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.toplaintime -+description: Basic usage -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainDateTime = Temporal.PlainDateTime.from("2020-02-12T11:42:56.987654321+01:00[Europe/Amsterdam]"); -+TemporalHelpers.assertPlainTime(plainDateTime.toPlainTime(), 11, 42, 56, 987, 654, 321); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0a8deb44c9ef139e220e6737c68fb70c550ca158 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.toplainyearmonth -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar); -+instance.toPlainYearMonth(); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5e5b7596a46a79b17b92eb05c6bd5ea2402059b3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/basic.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Checking the string form of an explicitly constructed instance with all arguments -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+ -+assert.sameValue(datetime.toString(), "1976-11-18T15:23:30.123456789", "check string value"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-always.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-always.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5ae257d8bd02f069e87ac42fd95ae737034df495 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-always.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Show ISO calendar if calendar name is "always" -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+ -+assert.sameValue( -+ dt.toString({ calendarName: "always" }), -+ "1976-11-18T15:23:00[u-ca=iso8601]", -+ "shows ISO calendar if calendarName = always" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7440f549227ee296b2f4f9857a15da6d3b32174a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Possibly display calendar when calendarName is "auto" -+features: [Temporal] -+---*/ -+ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+const customCal = { -+ toString() { return "bogus"; } -+}; -+const fakeISO8601Cal = { -+ toString() { return "iso8601"; } -+}; -+const expected = "1976-11-18T15:23:00"; -+ -+assert.sameValue(dt.toString(), expected, "default is calendar = auto (zero arguments)"); -+assert.sameValue(dt.toString({ calendarName: "auto" }), expected, "shows only non-ISO calendar if calendarName = auto"); -+ -+assert.sameValue( -+ dt.withCalendar(fakeISO8601Cal).toString({ calendarName: "auto" }), -+ expected, -+ "Don't show ISO calendar even if calendarName = auto" -+); -+ -+const dt2 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 0, 0, 0, 0, customCal); -+ -+assert.sameValue( -+ dt2.toString({ calendarName: "auto" }), -+ "1976-11-18T15:23:00[u-ca=bogus]", -+ "Don't show calendar if calendarName = auto & PlainDateTime has non-ISO calendar" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-invalid-string.js -index 985ad225ac72031b3bd7d9df4d90a9f2d9a38371..e17d9d1e443efabfb699a0ea21e971e4b87400ac 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-invalid-string.js -@@ -15,4 +15,11 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); --assert.throws(RangeError, () => datetime.toString({ calendarName: "other string" })); -+const invalidCals = ["other string", "ALWAYS", "sometimes", "auto\0"]; -+ -+invalidCals.forEach((cal) => { -+ assert.throws( -+ RangeError, -+ () => datetime.toString({ calendarName: cal }), -+ `invalid calendar (${cal})`); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-never.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-never.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a27cec98d23df650963a577bb7ff68d3691957bd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/calendarname-never.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Do not show calendar if calendar name option is "never" -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+const cal = { -+ toString() { return "bogus"; } -+}; -+const expected = "1976-11-18T15:23:00"; -+ -+assert.sameValue( -+ dt.toString({ calendarName: "never" }), -+ expected, -+ "Do not show calendar if calendarName = never" -+); -+ -+assert.sameValue( -+ dt.withCalendar(cal).toString({ calendarName: "never" }), -+ expected, -+ "Do not show calendar when calendarName = never, even if non-ISO calendar is used" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-auto.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-auto.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2567d0427586d18b92b19fac2b00761b1cf27fe3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-auto.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: auto value for fractionalSecondDigits option -+features: [Temporal] -+---*/ -+ -+const zeroSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+const wholeSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30); -+const subSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 400); -+ -+const tests = [ -+ [zeroSeconds, "1976-11-18T15:23:00"], -+ [wholeSeconds, "1976-11-18T15:23:30"], -+ [subSeconds, "1976-11-18T15:23:30.1234"], -+]; -+ -+for (const [datetime, expected] of tests) { -+ assert.sameValue(datetime.toString(), expected, "default is to emit seconds and drop trailing zeroes"); -+ assert.sameValue(datetime.toString({ fractionalSecondDigits: "auto" }), expected, "auto is the default"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -index 150d868658a319715eaf64831f04d3b4e7aa5e4c..9fa496c2955e7148b5ec26051b23909014c89640 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -@@ -10,10 +10,13 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaindatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 650, 0); - --assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: "other string" })); -+for (const fractionalSecondDigits of ["other string", "AUTO", "not-auto", "autos", "auto\0"]) { -+ assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits }), -+ `"${fractionalSecondDigits}" is not a valid value for fractionalSecondDigits`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-non-integer.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-non-integer.js -index 7de58c30b349e8cf911c6982af37362582d1a18c..281d78f1abd86406f1780e0ead9444119364862e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-non-integer.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-non-integer.js -@@ -10,7 +10,7 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaindatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..843ef74f78833bbdf7a2d088b931c85dab529b37 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-number.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Number for fractionalSecondDigits option -+features: [Temporal] -+---*/ -+ -+const zeroSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+const wholeSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30); -+const subSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 400); -+ -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 0 }), "1976-11-18T15:23:30", -+ "truncates 4 decimal places to 0"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 2 }), "1976-11-18T15:23:00.00", -+ "pads zero seconds to 2 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 2 }), "1976-11-18T15:23:30.00", -+ "pads whole seconds to 2 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 2 }), "1976-11-18T15:23:30.12", -+ "truncates 4 decimal places to 2"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 3 }), "1976-11-18T15:23:30.123", -+ "truncates 4 decimal places to 3"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 6 }), "1976-11-18T15:23:30.123400", -+ "pads 4 decimal places to 6"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 7 }), "1976-11-18T15:23:00.0000000", -+ "pads zero seconds to 7 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 7 }), "1976-11-18T15:23:30.0000000", -+ "pads whole seconds to 7 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 7 }), "1976-11-18T15:23:30.1234000", -+ "pads 4 decimal places to 7"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 9 }), "1976-11-18T15:23:30.123400000", -+ "pads 4 decimal places to 9"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -index 948d707eb35ac67473ee15bebf165ef27f8fd055..2ccbafaeec02bdb7f5d2bc11a9d69f5b46375820 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -@@ -10,11 +10,17 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaindatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 650, 0); - --assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: -1 })); --assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: 10 })); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: -Infinity }), -+ "−∞ is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: -1 }), -+ "−1 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: 10 }), -+ "10 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: Infinity }), -+ "∞ is out of range for fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-undefined.js -index 12a0f77b873b211e414ace70369737d0c63feb86..d5ebb9c7e68a960620d516726abeb167c992c0e7 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-undefined.js -@@ -8,17 +8,31 @@ info: | - sec-getoption step 3: - 3. If _value_ is *undefined*, return _fallback_. - sec-getstringornumberoption step 2: -- 2. Let _value_ be ? GetOption(_options_, _property_, *"stringOrNumber"*, *undefined*, _fallback_). -+ 2. Let _value_ be ? GetOption(_options_, _property_, « Number, String », *undefined*, _fallback_). - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaindatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - --const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 650, 0); -+const zeroSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+const wholeSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30); -+const subSeconds = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 400); - --const explicit = datetime.toString({ fractionalSecondDigits: undefined }); --assert.sameValue(explicit, "2000-05-02T12:34:56.98765", "default fractionalSecondDigits is auto"); -+const tests = [ -+ [zeroSeconds, "1976-11-18T15:23:00"], -+ [wholeSeconds, "1976-11-18T15:23:30"], -+ [subSeconds, "1976-11-18T15:23:30.1234"], -+]; - --// See options-undefined.js for {} -+for (const [datetime, expected] of tests) { -+ const explicit = datetime.toString({ fractionalSecondDigits: undefined }); -+ assert.sameValue(explicit, expected, "default fractionalSecondDigits is auto (property present but undefined)"); -+ -+ const implicit = datetime.toString({}); -+ assert.sameValue(implicit, expected, "default fractionalSecondDigits is auto (property not present)"); -+ -+ const lambda = datetime.toString(() => {}); -+ assert.sameValue(lambda, expected, "default fractionalSecondDigits is auto (property not present, function object)"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -index 9177b82196a93294ac60ef0d200fe91ea46a3661..5ecaf7a6d1f940611fc1abe8edb65bded55b0376 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -@@ -22,4 +22,26 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 650, 0); --TemporalHelpers.checkFractionalSecondDigitsOptionWrongType(datetime); -+ -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: null }), -+ "null is not a number and converts to the string 'null' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: true }), -+ "true is not a number and converts to the string 'true' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: false }), -+ "false is not a number and converts to the string 'false' which is not valid for fractionalSecondDigits"); -+assert.throws(TypeError, () => datetime.toString({ fractionalSecondDigits: Symbol() }), -+ "symbols are not numbers and cannot convert to strings"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: 2n }), -+ "bigints are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: {} }), -+ "plain objects are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+ -+const expected = [ -+ "get fractionalSecondDigits.toString", -+ "call fractionalSecondDigits.toString", -+]; -+const actual = []; -+const observer = TemporalHelpers.toPrimitiveObserver(actual, "auto", "fractionalSecondDigits"); -+const result = datetime.toString({ fractionalSecondDigits: observer }); -+assert.sameValue(result, "2000-05-02T12:34:56.98765", "object with toString uses toString return value"); -+assert.compareArray(actual, expected, "object with toString calls toString and not valueOf"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b535b7e07c9a82eb70db249b4b2ea10e478d7ef4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-cross-midnight.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-cross-midnight.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fe29b3b9c510e5ee8962dd9c5d269a72b5e7ab63 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-cross-midnight.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Rounding can cross midnight -+features: [Temporal] -+---*/ -+ -+const plainDateTime = new Temporal.PlainDateTime(1999, 12, 31, 23, 59, 59, 999, 999, 999); // one nanosecond before 2000-01-01T00:00:00 -+for (const roundingMode of ["ceil", "halfExpand"]) { -+ assert.sameValue(plainDateTime.toString({ fractionalSecondDigits: 8, roundingMode }), "2000-01-01T00:00:00.00000000"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-direction.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-direction.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a4d7dec32d74f7cb0261cb48754d7521de5eba44 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/rounding-direction.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Rounding down is towards the Big Bang, not the epoch or 1 BCE -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(-99, 12, 15, 12, 0, 0, 500); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "floor" }), -+ "-000099-12-15T12:00:00", -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "trunc" }), -+ "-000099-12-15T12:00:00", -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc)" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "ceil" }), -+ "-000099-12-15T12:00:01", -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode ceil)" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "halfExpand" }), -+ "-000099-12-15T12:00:01", -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode halfExpand)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..762b3a5cd3319ae27fbbbd87f93dab088c910b0c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-ceil.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: ceil value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "ceil" }); -+assert.sameValue(result1, "2000-05-02T12:34:56.123988", -+ "roundingMode is ceil (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "ceil" }); -+assert.sameValue(result2, "2000-05-02T12:34:56.123988", -+ "roundingMode is ceil (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "ceil" }); -+assert.sameValue(result3, "2000-05-02T12:34:56.124", -+ "roundingMode is ceil (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "ceil" }); -+assert.sameValue(result4, "2000-05-02T12:34:56.124", -+ "roundingMode is ceil (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "ceil" }); -+assert.sameValue(result5, "2000-05-02T12:34:57", -+ "roundingMode is ceil (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "ceil" }); -+assert.sameValue(result6, "2000-05-02T12:34:57", -+ "roundingMode is ceil (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "ceil" }); -+assert.sameValue(result7, "2000-05-02T12:35", "roundingMode is ceil (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4899d4cfa26b5a3cef984a17cb6a3cc52bdd7d84 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-floor.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: floor value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "floor" }); -+assert.sameValue(result1, "2000-05-02T12:34:56.123987", -+ "roundingMode is floor (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "floor" }); -+assert.sameValue(result2, "2000-05-02T12:34:56.123987", -+ "roundingMode is floor (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "floor" }); -+assert.sameValue(result3, "2000-05-02T12:34:56.123", -+ "roundingMode is floor (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "floor" }); -+assert.sameValue(result4, "2000-05-02T12:34:56.123", -+ "roundingMode is floor (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "floor" }); -+assert.sameValue(result5, "2000-05-02T12:34:56", -+ "roundingMode is floor (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "floor" }); -+assert.sameValue(result6, "2000-05-02T12:34:56", -+ "roundingMode is floor (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "floor" }); -+assert.sameValue(result7, "2000-05-02T12:34", "roundingMode is floor (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9dcad461121f9330c5df775ae8c5ba8e1be9dd1a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-halfExpand.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: halfExpand value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "halfExpand" }); -+assert.sameValue(result1, "2000-05-02T12:34:56.123988", -+ "roundingMode is halfExpand (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "halfExpand" }); -+assert.sameValue(result2, "2000-05-02T12:34:56.123988", -+ "roundingMode is halfExpand (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "halfExpand" }); -+assert.sameValue(result3, "2000-05-02T12:34:56.124", -+ "roundingMode is halfExpand (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "halfExpand" }); -+assert.sameValue(result4, "2000-05-02T12:34:56.124", -+ "roundingMode is halfExpand (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "halfExpand" }); -+assert.sameValue(result5, "2000-05-02T12:34:56", -+ "roundingMode is halfExpand (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "halfExpand" }); -+assert.sameValue(result6, "2000-05-02T12:34:56", -+ "roundingMode is halfExpand (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "halfExpand" }); -+assert.sameValue(result7, "2000-05-02T12:35", "roundingMode is halfExpand (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-invalid-string.js -index 3a3c9af8e8fdf3242fd7d4d525322bbc03b0d14c..bc2e1e2c4a8e63eb0e4070fe97265e257ab9efaf 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => datetime.toString({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => datetime.toString({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fa3e86319fc53655d53cf76eff87f0ff4db84b3c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/roundingmode-trunc.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: trunc value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "trunc" }); -+assert.sameValue(result1, "2000-05-02T12:34:56.123987", -+ "roundingMode is trunc (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "trunc" }); -+assert.sameValue(result2, "2000-05-02T12:34:56.123987", -+ "roundingMode is trunc (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "trunc" }); -+assert.sameValue(result3, "2000-05-02T12:34:56.123", -+ "roundingMode is trunc (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "trunc" }); -+assert.sameValue(result4, "2000-05-02T12:34:56.123", -+ "roundingMode is trunc (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "trunc" }); -+assert.sameValue(result5, "2000-05-02T12:34:56", -+ "roundingMode is trunc (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "trunc" }); -+assert.sameValue(result6, "2000-05-02T12:34:56", -+ "roundingMode is trunc (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "trunc" }); -+assert.sameValue(result7, "2000-05-02T12:34", "roundingMode is trunc (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-fractionalseconddigits.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-fractionalseconddigits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9918d045fc7fde860974d29c426ddca71f03b9ae ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-fractionalseconddigits.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: fractionalSecondDigits option is not used with smallestUnit present -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 12, 34, 56, 789, 999, 999); -+const tests = [ -+ ["minute", "1976-11-18T12:34"], -+ ["second", "1976-11-18T12:34:56"], -+ ["millisecond", "1976-11-18T12:34:56.789"], -+ ["microsecond", "1976-11-18T12:34:56.789999"], -+ ["nanosecond", "1976-11-18T12:34:56.789999999"], -+]; -+ -+for (const [smallestUnit, expected] of tests) { -+ const string = datetime.toString({ -+ smallestUnit, -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+ }); -+ assert.sameValue(string, expected, `smallestUnit: "${smallestUnit}" overrides fractionalSecondDigits`); -+} -+ -+assert.throws(RangeError, () => datetime.toString({ -+ smallestUnit: "hour", -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+}), "hour is an invalid smallestUnit but still overrides fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-invalid-string.js -index 1d1a6aaeca2abf198108926a1cd36d3d02e0d2ad..10e19530c1a5c4deb37e0286caef0b678f3f0924 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-invalid-string.js -@@ -8,4 +8,30 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => datetime.toString({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "hour", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "hours", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => datetime.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-valid-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-valid-units.js -index 34928a9c6d9e94986b6b8cb34421ab2d56b76129..6aff7a613b2ba4d282439777df904f363370b786 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-valid-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/smallestunit-valid-units.js -@@ -7,15 +7,41 @@ description: Valid units for the smallestUnit option - features: [Temporal] - ---*/ - --const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 789, 999, 999); -+const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 123, 456, 789); - --assert.sameValue(datetime.toString({ smallestUnit: "minute" }), "2000-05-02T12:34"); --assert.sameValue(datetime.toString({ smallestUnit: "second" }), "2000-05-02T12:34:56"); --assert.sameValue(datetime.toString({ smallestUnit: "millisecond" }), "2000-05-02T12:34:56.789"); --assert.sameValue(datetime.toString({ smallestUnit: "microsecond" }), "2000-05-02T12:34:56.789999"); --assert.sameValue(datetime.toString({ smallestUnit: "nanosecond" }), "2000-05-02T12:34:56.789999999"); -+function test(instance, expectations, description) { -+ for (const [smallestUnit, expectedResult] of expectations) { -+ assert.sameValue(instance.toString({ smallestUnit }), expectedResult, -+ `${description} with smallestUnit "${smallestUnit}"`); -+ } -+} -+ -+test( -+ datetime, -+ [ -+ ["minute", "2000-05-02T12:34"], -+ ["second", "2000-05-02T12:34:56"], -+ ["millisecond", "2000-05-02T12:34:56.123"], -+ ["microsecond", "2000-05-02T12:34:56.123456"], -+ ["nanosecond", "2000-05-02T12:34:56.123456789"], -+ ], -+ "subseconds toString" -+); -+ -+test( -+ new Temporal.PlainDateTime(2000, 5, 2, 12, 34), -+ [ -+ ["minute", "2000-05-02T12:34"], -+ ["second", "2000-05-02T12:34:00"], -+ ["millisecond", "2000-05-02T12:34:00.000"], -+ ["microsecond", "2000-05-02T12:34:00.000000"], -+ ["nanosecond", "2000-05-02T12:34:00.000000000"], -+ ], -+ "whole minutes toString" -+); - - const notValid = [ -+ "era", - "year", - "month", - "week", -@@ -24,5 +50,6 @@ const notValid = [ - ]; - - notValid.forEach((smallestUnit) => { -- assert.throws(RangeError, () => datetime.toString({ smallestUnit }), smallestUnit); -+ assert.throws(RangeError, () => datetime.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid unit for the smallestUnit option`); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d94ed41240f2b9e32ed4dc9fb69b05983b93e60a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toString/year-format.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+let instance = new Temporal.PlainDateTime(-100000, 12, 3, 4, 56, 7, 890); -+assert.sameValue(instance.toString(), "-100000-12-03T04:56:07.89", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-10000, 4, 5, 6, 7, 8, 910); -+assert.sameValue(instance.toString(), "-010000-04-05T06:07:08.91", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-9999, 6, 7, 8, 9, 10, 987); -+assert.sameValue(instance.toString(), "-009999-06-07T08:09:10.987", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-1000, 8, 9, 10, 9, 8, 765); -+assert.sameValue(instance.toString(), "-001000-08-09T10:09:08.765", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-999, 10, 9, 8, 7, 6, 543); -+assert.sameValue(instance.toString(), "-000999-10-09T08:07:06.543", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(-1, 8, 7, 6, 54, 32, 100); -+assert.sameValue(instance.toString(), "-000001-08-07T06:54:32.1", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(0, 6, 5, 4, 32, 10, 123); -+assert.sameValue(instance.toString(), "0000-06-05T04:32:10.123", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(1, 4, 3, 21, 0, 12, 345); -+assert.sameValue(instance.toString(), "0001-04-03T21:00:12.345", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(999, 2, 10, 12, 34, 56, 789); -+assert.sameValue(instance.toString(), "0999-02-10T12:34:56.789", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(1000, 1, 23, 4, 56, 7, 890); -+assert.sameValue(instance.toString(), "1000-01-23T04:56:07.89", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(9999, 4, 5, 6, 7, 8, 910); -+assert.sameValue(instance.toString(), "9999-04-05T06:07:08.91", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainDateTime(10000, 6, 7, 8, 9, 10, 987); -+assert.sameValue(instance.toString(), "+010000-06-07T08:09:10.987", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainDateTime(100000, 8, 9, 10, 9, 8, 765); -+assert.sameValue(instance.toString(), "+100000-08-09T10:09:08.765", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..78d23ba94233ff3c8ff23e2b75422db815635879 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/basic.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: Straightforward case of using UTC -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2020, 1, 1, 0, 0); -+const zdt = dt.toZonedDateTime("UTC"); -+ -+assert.sameValue(zdt.epochNanoseconds, 1577836800000000000n, "nanoseconds"); -+assert.sameValue(zdt.calendar.toString(), "iso8601", "calendar"); -+assert.sameValue(zdt.timeZone.toString(), "UTC", "timezone"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguation-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguation-invalid-string.js -index 65eab04c1543b6ce9fe1556a6cabaa7056221a0e..ab7127ce59ffaf084958b56232a3d6d6797bc9d7 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguation-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguation-invalid-string.js -@@ -16,4 +16,11 @@ features: [Temporal] - - const datetime = new Temporal.PlainDateTime(2001, 9, 9, 1, 46, 40, 987, 654, 321); - const timeZone = new Temporal.TimeZone("UTC"); --assert.throws(RangeError, () => datetime.toZonedDateTime(timeZone, { disambiguation: "other string" })); -+const invalidStrings = ["obviously bad", "", "EARLIER", "earlıer", "late\u0131r", "reject\0"]; -+invalidStrings.forEach((s) => { -+ assert.throws( -+ RangeError, -+ () => datetime.toZonedDateTime(timeZone, { disambiguation: s }), -+ `invalid disambiguation string (${s})`); -+}); -+ -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/invalid-instant.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/invalid-instant.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d1ec3c3d73269d74499a036ec56cf0c86ccc8e01 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/invalid-instant.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: Convert to zoned datetime outside valid range -+features: [Temporal] -+---*/ -+ -+const max = new Temporal.PlainDateTime(275760, 9, 13, 23, 59, 59, 999, 999, 999); -+const min = new Temporal.PlainDateTime(-271821, 4, 19, 0, 0, 0, 0, 0, 1); -+ -+assert.throws( -+ RangeError, -+ () => max.toZonedDateTime("UTC"), -+ "outside of Instant range (too big)" -+); -+ -+assert.throws( -+ RangeError, -+ () => min.toZonedDateTime("UTC"), -+ "outside of Instant range (too small)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/multiple-instants.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/multiple-instants.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5863513091c08875e84fc951420cae4ac7066acb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/multiple-instants.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: Checking disambiguation options for daylight savings time changes -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const tz = TemporalHelpers.springForwardFallBackTimeZone(); -+ -+const dt1 = new Temporal.PlainDateTime(2000, 4, 2, 2); -+ -+const zdt1 = dt1.toZonedDateTime(tz); -+const zdt1_compatible = dt1.toZonedDateTime(tz, { disambiguation: "compatible" }); -+const zdt1_earlier = dt1.toZonedDateTime(tz, { disambiguation: "earlier" }); -+const zdt1_later = dt1.toZonedDateTime(tz, { disambiguation: "later" }); -+ -+assert.sameValue(zdt1.epochNanoseconds, 954669600000000000n, "Fall DST (no disambiguation)"); -+assert.sameValue(zdt1_compatible.epochNanoseconds, 954669600000000000n, "Fall DST (disambiguation = compatible)"); -+assert.sameValue(zdt1_earlier.epochNanoseconds, 954666000000000000n, "Fall DST (disambiguation = earlier)"); -+assert.sameValue(zdt1_later.epochNanoseconds, 954669600000000000n, "Fall DST (disambiguation = later)"); -+ -+assert.throws( -+ RangeError, -+ () => dt1.toZonedDateTime(tz, { disambiguation: "reject" }), -+ "Fall DST (disambiguation = reject)" -+); -+ -+const dt2 = new Temporal.PlainDateTime(2000, 10, 29, 1); -+ -+const zdt2 = dt2.toZonedDateTime(tz); -+const zdt2_compatible = dt2.toZonedDateTime(tz, { disambiguation: "compatible" }); -+const zdt2_earlier = dt2.toZonedDateTime(tz, { disambiguation: "earlier" }); -+const zdt2_later = dt2.toZonedDateTime(tz, { disambiguation: "later" }); -+ -+assert.sameValue(zdt2.epochNanoseconds, 972806400000000000n, "Spring DST (no disambiguation)"); -+assert.sameValue(zdt2_compatible.epochNanoseconds, 972806400000000000n, "Spring DST (disambiguation = compatible)"); -+assert.sameValue(zdt2_earlier.epochNanoseconds, 972806400000000000n, "Spring DST (disambiguation = earlier)"); -+assert.sameValue(zdt2_later.epochNanoseconds, 972810000000000000n, "Spring DST (disambiguation = later)"); -+ -+assert.throws( -+ RangeError, -+ () => dt2.toZonedDateTime(tz, { disambiguation: "reject" }), -+ "Spring DST (disambiguation = reject)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e7cd07013c39dfc1d06ddde518d43bda7cec0822 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-object.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindate.prototype.tozoneddatetime -+description: Empty object may be used as options -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38, 271, 986, 102); -+ -+assert.sameValue( -+ dt.toZonedDateTime("UTC", {}).epochNanoseconds, -+ 1572345998271986102n, -+ "options may be an empty plain object" -+); -+ -+assert.sameValue( -+ dt.toZonedDateTime("UTC", () => {}).epochNanoseconds, -+ 1572345998271986102n, -+ "options may be a function object" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c2a63768399fcc37685967491cc031798723c823 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toZonedDateTime("UTC", value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9b02984eb90242fa36fde6b4ba61baadd5c0ec0c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.toZonedDateTime(timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.toZonedDateTime({ timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.toZonedDateTime(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..79caa639eb31ef382acaa32798c2f67b95fa5059 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1fac66b7f9e431d9cfaf03f5b8727432c24c951d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.toZonedDateTime({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.toZonedDateTime({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e6c05841d806089ef02d0f51adb1ce77c22a3bfd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: A number is converted to a string, then to Temporal.PlainDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+let arg = 19761118; -+ -+const result = instance.until(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19761118 is a valid ISO string for PlainDateTime"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..18f38a6ff0940114147363c8bf3efdc984949492 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-object.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Plain objects are accepted as an argument -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration( -+ dt.until({ year: 2019, month: 10, day: 29, hour: 10 }), -+ 0, 0, 0, 15684, 18, 36, 29, 876, 543, 211, -+ "casts argument (plain object)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b49bd1593dcb60b6adbc16825eeeece2bd0070ee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8cf4915c7f68598722fdd2ea16a4dd3c786daadb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..611f6724cc098b6dd02def9fbcdf207d326e2107 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.until(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..377398049721d07df17b2b77929eab24d5dece63 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..015b66fd9d89a7c7d22ba585277e6ce804742639 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Date-like strings are accepted -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration( -+ dt.until("2019-10-29T10:46:38.271986102"), -+ 0, 0, 0, 15684, 19, 23, 8, 148, 529, 313, -+ "casts argument (string)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..66c4439bf947b0c50139117a4628d7cfb5617c28 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration.js -index 2de57f305e5aef2a7f5beb09265b225fa5de3741..81c7336090663082f575ca9042237641e35c303a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration.js -@@ -25,10 +25,10 @@ features: [Temporal] - - const earlier1 = new Temporal.PlainDateTime(2000, 5, 2, 9); - const later1 = new Temporal.PlainDateTime(2000, 5, 5, 10); --const result1 = later1.until(earlier1, { largestUnit: 'day' }); -+const result1 = later1.until(earlier1, { largestUnit: "day" }); - TemporalHelpers.assertDuration(result1, 0, 0, 0, -3, -1, 0, 0, 0, 0, 0, "date sign == time sign"); - - const earlier2 = new Temporal.PlainDateTime(2000, 5, 2, 10); - const later2 = new Temporal.PlainDateTime(2000, 5, 5, 9); --const result2 = later2.until(earlier2, { largestUnit: 'day' }); -+const result2 = later2.until(earlier2, { largestUnit: "day" }); - TemporalHelpers.assertDuration(result2, 0, 0, 0, -2, -23, 0, 0, 0, 0, 0, "date sign != time sign"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance.js -index 08687951c4e5d43404aed70b4ff87b32fa643de7..05eff7a63aaf947362566b57cf55ad9ad0744491 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/balance.js -@@ -8,18 +8,18 @@ includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const a = Temporal.PlainDateTime.from('2017-10-05T08:07:14+00:00[UTC]'); --const b = Temporal.PlainDateTime.from('2021-03-05T03:32:45+00:00[UTC]'); --const c = Temporal.PlainDateTime.from('2021-03-05T09:32:45+00:00[UTC]'); -+const a = Temporal.PlainDateTime.from("2017-10-05T08:07:14+00:00[UTC]"); -+const b = Temporal.PlainDateTime.from("2021-03-05T03:32:45+00:00[UTC]"); -+const c = Temporal.PlainDateTime.from("2021-03-05T09:32:45+00:00[UTC]"); - --const r1 = a.until(b, { largestUnit: 'months' }); -+const r1 = a.until(b, { largestUnit: "months" }); - TemporalHelpers.assertDuration(r1, 0, 40, 0, 27, 19, 25, 31, 0, 0, 0, "r1"); - assert.sameValue(a.add(r1).toString(), b.toString(), "a.add(r1)"); - --const r2 = b.until(a, { largestUnit: 'months' }); -+const r2 = b.until(a, { largestUnit: "months" }); - TemporalHelpers.assertDuration(r2, 0, -40, 0, -30, -19, -25, -31, 0, 0, 0, "r2"); - assert.sameValue(b.add(r2).toString(), a.toString(), "b.add(r2)"); - --const r3 = c.until(a, { largestUnit: 'months' }); -+const r3 = c.until(a, { largestUnit: "months" }); - TemporalHelpers.assertDuration(r3, 0, -41, 0, 0, -1, -25, -31, 0, 0, 0, "r3"); - assert.sameValue(c.add(r3).toString(), a.toString(), "c.add(r3)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/casts-argument.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/casts-argument.js -new file mode 100644 -index 0000000000000000000000000000000000000000..979759ddf67b1d57722dc7ed718276b367a073ee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/casts-argument.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: String and object arguments get cast -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration( -+ datetime.until({ year: 2019, month: 10, day: 29, hour: 10 }), -+ 0, 0, 0, 15684, 18, 36, 29, 876, 543, 211, -+ "plain object argument" -+); -+ -+TemporalHelpers.assertDuration( -+ datetime.until("2019-10-29T10:46:38.271986102"), -+ 0, 0, 0, 15684, 19, 23, 8, 148, 529, 313, -+ "string argument gets cast" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/different-calendars-throws.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/different-calendars-throws.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1fe7a721911fdaf0c5b3fdcd218a4baa32832121 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/different-calendars-throws.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Using different calendars is not acceptable -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(2000, 1, 1, 0, 0, 0, 0, 0, 0); -+const dt2 = new Temporal.PlainDateTime(2000, 1, 1, 0, 0, 0, 0, 0, 0, {}); -+ -+assert.throws( -+ RangeError, -+ () => dt1.until(dt2), -+ "cannot use until with PDTs having different calendars" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/inverse.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/inverse.js -new file mode 100644 -index 0000000000000000000000000000000000000000..026024e3100af4c6dbe7b642b948c77b1f5ee9e8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/inverse.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: The since and until operations act as inverses -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2016, 3, 3, 18); -+ -+TemporalHelpers.assertDurationsEqual(dt.until(later), later.since(dt), "until and since act as inverses"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-invalid-string.js -index a3cf0f6aff3d50323ca8e9e3307d1edc7386a97f..aa7ca9a4c346027134a18434b052c931f2fdf466 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/largestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainDateTime(2001, 6, 3, 13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..352899ac089a565b73789774a2597b0ddfcfda00 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Leap second is a valid ISO string for PlainDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2016, 12, 31, 23, 59, 59); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainDateTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/no-unnecessary-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/no-unnecessary-units.js -new file mode 100644 -index 0000000000000000000000000000000000000000..081f9502efc9879f1d0d20e39ce436104095cc31 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/no-unnecessary-units.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Do not return Durations with unnecessary units -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const feb29 = new Temporal.PlainDateTime(2020, 2, 29, 0, 0); -+const feb28 = new Temporal.PlainDateTime(2021, 2, 28, 0, 0); -+ -+TemporalHelpers.assertDuration( -+ feb29.until(feb28, { largestUnit: "months" }), -+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, -+ "does not include higher units than necessary (largest unit = months)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb29.until(feb28, { largestUnit: "years" }), -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "does not include higher units than necessary (largest unit = years)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-empty.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-empty.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6708ac5f143c2a235a96e948bc78b2269d11cdef ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-empty.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Empty options are valid -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+TemporalHelpers.assertDuration(feb20.until(feb21, {}), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "empty options (plain object) are acceptable"); -+ -+TemporalHelpers.assertDuration(feb20.until(feb21, () => {}), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "empty options (function object) are acceptable"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8442c32b6a7db6e11d5e2bdd56faa10a0baee44c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-invalid.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: A variety of invalid option arguments -+features: [Temporal, Symbol] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+const badOptions = [null, 1, 'obviously invalid', true, Symbol('foo'), 1n]; -+badOptions.forEach((bad) => { -+ assert.throws( -+ TypeError, -+ () => feb20.until(feb21, bad), -+ `unacceptable options (${typeof bad})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6b248d2e110d0b2667befd5f0306418a2413d4df ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.until(new Temporal.PlainDateTime(1976, 11, 18), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/returns-days.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/returns-days.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b6e00ead5d52229b8465425b4f020cea47da24b4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/returns-days.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Return days by default -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "auto" }), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "defaults to returning days (largest unit = auto)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "days" }), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, -+ "defaults to returning days (largest unit = days)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(new Temporal.PlainDateTime(2021, 2, 1, 0, 0, 0, 0, 0, 1)), -+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 1, -+ "returns nanoseconds if argument is PDT with non-zero nanoseconds" -+); -+ -+const dt = new Temporal.PlainDateTime(2020, 2, 1, 0, 0, 0, 0, 0, 1); -+ -+TemporalHelpers.assertDuration( -+ dt.until(feb21), -+ 0, 0, 0, 365, 23, 59, 59, 999, 999, 999, -+ "one nanosecond away from one year away" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/round-relative-to-receiver.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/round-relative-to-receiver.js -new file mode 100644 -index 0000000000000000000000000000000000000000..496913564b1b53f71ecae2a8f70e5fe1551fc5d9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/round-relative-to-receiver.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Rounding happens relative to receiver -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(2019, 1, 1); -+const dt2 = new Temporal.PlainDateTime(2020, 7, 2); -+const options = { smallestUnit: "years", roundingMode: "halfExpand" }; -+ -+TemporalHelpers.assertDuration( -+ dt1.until(dt2, options), -+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "rounds relative to the receiver (positive case)" -+); -+ -+TemporalHelpers.assertDuration( -+ dt2.until(dt1, options), -+ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "rounds relative to the receiver (negative case)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..aad8a6d9a8b524c3a9fe89986593c7ccd4733d3b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-basic.js -@@ -0,0 +1,48 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: A variety of rounding increments -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "hours", roundingIncrement: 3, roundingMode: "halfExpand"}), -+ 0, 0, 0, 973, 3, 0, 0, 0, 0, 0, -+ "rounds to an increment of hours" -+); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "minutes", roundingIncrement: 30, roundingMode: "halfExpand"}), -+ 0, 0, 0, 973, 4, 30, 0, 0, 0, 0, -+ "rounds to an increment of minutes" -+); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "seconds", roundingIncrement: 15, roundingMode: "halfExpand"}), -+ 0, 0, 0, 973, 4, 17, 0, 0, 0, 0, -+ "rounds to an increment of seconds" -+); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "milliseconds", roundingIncrement: 10, roundingMode: "halfExpand"}), -+ 0, 0, 0, 973, 4, 17, 4, 860, 0, 0, -+ "rounds to an increment of milliseconds" -+); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "microseconds", roundingIncrement: 10, roundingMode: "halfExpand"}), -+ 0, 0, 0, 973, 4, 17, 4, 864, 200, 0, -+ "rounds to an increment of microseconds" -+); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "nanoseconds", roundingIncrement: 10, roundingMode: "halfExpand"}), -+ 0, 0, 0, 973, 4, 17, 4, 864, 197, 530, -+ "rounds to an increment of nanoseconds" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-cleanly-divides.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-cleanly-divides.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d42a933fa286b27f54f88d34791b17cb608f3fc8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-cleanly-divides.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Rounding increments that cleanly divide relevant units -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+[1, 2, 3, 4, 6, 8, 12].forEach((roundingIncrement) => { -+ const options = {smallestUnit: "hours", roundingIncrement}; -+ assert( -+ earlier.until(later, options) instanceof Temporal.Duration, -+ `valid hour increments divide 24 (rounding increment = ${roundingIncrement})` -+ ); -+}); -+ -+["minutes", "seconds"].forEach((smallestUnit) => { -+ [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30].forEach((roundingIncrement) => { -+ const options = {smallestUnit, roundingIncrement}; -+ assert( -+ earlier.until(later, options) instanceof Temporal.Duration, -+ `valid ${smallestUnit} increments divide 60 (rounding increment = ${roundingIncrement})` -+ ); -+ }); -+}); -+ -+["milliseconds", "microseconds", "nanoseconds"].forEach((smallestUnit) => { -+ [1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500].forEach((roundingIncrement) => { -+ const options = {smallestUnit, roundingIncrement}; -+ assert( -+ earlier.until(later, options) instanceof Temporal.Duration, -+ `valid ${smallestUnit} increments divide 1000 (rounding increment = ${roundingIncrement}` -+ ); -+ }); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-does-not-divide.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-does-not-divide.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9207928957f6c11226802a980e33e0c1a754a275 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingincrement-does-not-divide.js -@@ -0,0 +1,45 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Rounding increments that do not cleanly divide the relevant unit -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+const nondivisibleUnits = { -+ "hours": 11, -+ "minutes": 29, -+ "seconds": 29, -+ "milliseconds": 29, -+ "microseconds": 29, -+ "nanoseconds": 29 -+}; -+ -+Object.entries(nondivisibleUnits).forEach(([unit, increment]) => { -+ assert.throws( -+ RangeError, -+ () => earlier.until(later, {smallestUnit: unit, roundingIncrement: increment}), -+ `throws on increments that do not divide evenly into the next highest (unit = ${unit}, increment = ${increment})` -+ ); -+}); -+ -+const equalDivisibleUnits = { -+ "hours": 24, -+ "minutes": 60, -+ "seconds": 60, -+ "milliseconds": 1000, -+ "microseconds": 1000, -+ "nanoseconds": 1000 -+}; -+ -+Object.entries(equalDivisibleUnits).forEach(([unit, increment]) => { -+ assert.throws( -+ RangeError, -+ () => earlier.until(later, {smallestUnit: unit, roundingIncrement: increment}), -+ `throws on increments that are equal to the next highest (unit = ${unit}, rounding increment = ${increment})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-ceil-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-ceil-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4f4a4ded7d79752f818edfaf05062464c00bf025 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-ceil-basic.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Checking that ceiling rounding mode rounds correctly -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+const incrementOneCeil = [ -+ ["years", [3], [-2]], -+ ["months", [0, 32], [0, -31]], -+ ["weeks", [0, 0, 140], [0, 0, -139]], -+ ["days", [0, 0, 0, 974], [0, 0, 0, -973]], -+ ["hours", [0, 0, 0, 973, 5], [0, 0, 0, -973, -4]], -+ ["minutes", [0, 0, 0, 973, 4, 18], [0, 0, 0, -973, -4, -17]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 5], [0, 0, 0, -973, -4, -17, -4]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 865], [0, 0, 0, -973, -4, -17, -4, -864]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 198], [0, 0, 0, -973, -4, -17, -4, -864, -197]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532], [0, 0, 0, -973, -4, -17, -4, -864, -197, -532]] -+]; -+incrementOneCeil.forEach(([smallestUnit, expectedPositive, expectedNegative]) => { -+ const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive; -+ const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative; -+ TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit, roundingMode: "ceil" }), -+ py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns, -+ `rounds up to ${smallestUnit} (roundingMode = ceil, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ later.until(earlier, {smallestUnit, roundingMode: "ceil"}), -+ ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns, -+ `rounds up to ${smallestUnit} (rounding mode = ceil, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-floor-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-floor-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d9a021e9ace9c709737f5f640295a62c78977e4c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-floor-basic.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Checking that floor rounding mode rounds correctly -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+const incrementOneFloor = [ -+ ["years", [2], [-3]], -+ ["months", [0, 31], [0, -32]], -+ ["weeks", [0, 0, 139], [0, 0, -140]], -+ ["days", [0, 0, 0, 973], [0, 0, 0, -974]], -+ ["hours", [0, 0, 0, 973, 4], [0, 0, 0, -973, -5]], -+ ["minutes", [0, 0, 0, 973, 4, 17], [0, 0, 0, -973, -4, -18]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 4], [0, 0, 0, -973, -4, -17, -5]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 864], [0, 0, 0, -973, -4, -17, -4, -865]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197], [0, 0, 0, -973, -4, -17, -4, -864, -198]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532], [0, 0, 0, -973, -4, -17, -4, -864, -197, -532]] -+]; -+incrementOneFloor.forEach(([smallestUnit, expectedPositive, expectedNegative]) => { -+ const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive; -+ const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative; -+ TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit, roundingMode: "floor" }), -+ py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns, -+ `rounds down to ${smallestUnit} (rounding mode = floor, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ later.until(earlier, {smallestUnit, roundingMode: "floor"}), -+ ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns, -+ `rounds down to ${smallestUnit} (rounding mode = floor, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f0d4ff1cd5c2d9148fed0b1ad2745634e47f97c5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-basic.js -@@ -0,0 +1,51 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Checking that half-expand rounding mode rounds correctly -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+function ensureUnsignedZero(x) { -+ return Object.is(x, -0) ? 0 : x; -+} -+ -+const incrementOneNearest = [ -+ ["years", [3]], -+ ["months", [0, 32]], -+ ["weeks", [0, 0, 139]], -+ ["days", [0, 0, 0, 973]], -+ ["hours", [0, 0, 0, 973, 4]], -+ ["minutes", [0, 0, 0, 973, 4, 17]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 5]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 864]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 198]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532]] -+]; -+incrementOneNearest.forEach(([smallestUnit, expected]) => { -+ const [y, m = 0, w = 0, d = 0, h = 0, min = 0, s = 0, ms = 0, µs = 0, ns = 0] = expected; -+ TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit, roundingMode: "halfExpand"}), -+ y, m, w, d, h, min, s, ms, µs, ns, -+ `rounds to nearest ${smallestUnit} (positive case, rounding mode = halfExpand)` -+ ); -+ TemporalHelpers.assertDuration( -+ later.until(earlier, {smallestUnit, roundingMode: "halfExpand"}), -+ ensureUnsignedZero(-y), -+ ensureUnsignedZero(-m), -+ ensureUnsignedZero(-w), -+ ensureUnsignedZero(-d), -+ ensureUnsignedZero(-h), -+ ensureUnsignedZero(-min), -+ ensureUnsignedZero(-s), -+ ensureUnsignedZero(-ms), -+ ensureUnsignedZero(-µs), -+ ensureUnsignedZero(-ns), -+ `rounds to nearest ${smallestUnit} (negative case, rounding mode = halfExpand)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-default-changes.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-default-changes.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2cecf4b37d924cd0567f34586a5d005b1f1c769d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-halfexpand-default-changes.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: A different default for largest unit will be used if smallest unit is larger than "days" -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "years", roundingMode: "halfExpand"}), -+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "assumes a different default for largestUnit if smallestUnit is larger than days (largest unit = years)" -+); -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "months", roundingMode: "halfExpand"}), -+ 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, -+ "assumes a different default for largestUnit if smallestUnit is larger than days (largest unit = months)" -+); -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "weeks", roundingMode: "halfExpand"}), -+ 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, -+ "assumes a different default for largestUnit if smallestUnit is larger than days (largest unit = weeks)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-invalid-string.js -index f907ababfd02da33e30f4ca3b29c0ed3881112c9..47455e7a1916c75c1e55d18e5ceefd2d85dcc44f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainDateTime(2000, 5, 3, 13, 35, 57, 123, 987, 500); --assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..844e3083c2153c72e6ce01fdb1d3ef85836a1642 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-basic.js -@@ -0,0 +1,51 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: A variety of tests for truncation (trunc) round mode -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+function ensureUnsignedZero(x) { -+ return Object.is(x, -0) ? 0 : x; -+} -+ -+const incrementOneTrunc = [ -+ ["years", [2]], -+ ["months", [0, 31]], -+ ["weeks", [0, 0, 139]], -+ ["days", [0, 0, 0, 973]], -+ ["hours", [0, 0, 0, 973, 4]], -+ ["minutes", [0, 0, 0, 973, 4, 17]], -+ ["seconds", [0, 0, 0, 973, 4, 17, 4]], -+ ["milliseconds", [0, 0, 0, 973, 4, 17, 4, 864]], -+ ["microseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197]], -+ ["nanoseconds", [0, 0, 0, 973, 4, 17, 4, 864, 197, 532]] -+]; -+incrementOneTrunc.forEach(([smallestUnit, expected]) => { -+ const [y, m = 0, w = 0, d = 0, h = 0, min = 0, s = 0, ms = 0, µs = 0, ns = 0] = expected; -+ TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit, roundingMode: "trunc"}), -+ y, m, w, d, h, min, s, ms, µs, ns, -+ `truncates to ${smallestUnit} (rounding mode = trunc, positive case)` -+ ); -+ TemporalHelpers.assertDuration( -+ later.until(earlier, {smallestUnit, roundingMode: "trunc"}), -+ ensureUnsignedZero(-y), -+ ensureUnsignedZero(-m), -+ ensureUnsignedZero(-w), -+ ensureUnsignedZero(-d), -+ ensureUnsignedZero(-h), -+ ensureUnsignedZero(-min), -+ ensureUnsignedZero(-s), -+ ensureUnsignedZero(-ms), -+ ensureUnsignedZero(-µs), -+ ensureUnsignedZero(-ns), -+ `truncates to ${smallestUnit} (rounding mode = trunc, negative case)` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-is-default.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-is-default.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3ae7ecbedc42ad93b3d9508cf93b1228fc5e766d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/roundingmode-trunc-is-default.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Show that truncation is the default rounding mode -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainDateTime(2019, 1, 8, 8, 22, 36, 123, 456, 789); -+const later = new Temporal.PlainDateTime(2021, 9, 7, 12, 39, 40, 987, 654, 321); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "minutes"}), -+ 0, 0, 0, 973, 4, 17,0, 0, 0, 0, -+ "trunc is the default (round up)" -+); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, {smallestUnit: "seconds"}), -+ 0, 0, 0, 973, 4, 17, 4, 0, 0, 0, -+ "trunc is the default (round down)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/smallestunit-invalid-string.js -index 781434f7af6aef6bc98a245ed1fe12c859ff0007..d12bb40e32cc46724c6f10d448331e47b037467e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/smallestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainDateTime(2000, 5, 3, 13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/subseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/subseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..389963400e46e283d2990fd8ac600bafff737766 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/subseconds.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Returned granularity may be finer than seconds -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2020, 2, 2, 0, 0, 0, 250, 250, 250); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 86400250, 250, 250, -+ "can return subseconds (millisecond precision)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "microseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 86400250250, 250, -+ "can return subseconds (microsecond precision)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 86400250250250, -+ "can return subseconds (nanosecond precision)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/units-changed.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/units-changed.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e13f520ea33db0df0cdc0d44861978f12a0f3323 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/units-changed.js -@@ -0,0 +1,66 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Largest unit is respected -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const feb20 = new Temporal.PlainDateTime(2020, 2, 1, 0, 0); -+const feb21 = new Temporal.PlainDateTime(2021, 2, 1, 0, 0); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "years" }), -+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "can return lower or higher units (years)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "months" }), -+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, -+ "can return lower or higher units (months)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "weeks" }), -+ 0, 0, 52, 2, 0, 0, 0, 0, 0, 0, -+ "can return lower or higher units (weeks)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "hours" }), -+ 0, 0, 0, 0, 8784, 0, 0, 0, 0, 0, -+ "can return lower or higher units (hours)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "minutes" }), -+ 0, 0, 0, 0, 0, 527040, 0, 0, 0, 0, -+ "can return lower or higher units (minutes)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "seconds" }), -+ 0, 0, 0, 0, 0, 0, 31622400, 0, 0, 0, -+ "can return lower or higher units (seconds)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 31622400000, 0, 0, -+ "can return lower or higher units (milliseconds)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "microseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 31622400000000, 0, -+ "can return lower or higher units (microseconds)" -+); -+ -+TemporalHelpers.assertDuration( -+ feb20.until(feb21, { largestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 31622400000000000, -+ "can return lower or higher units (nanoseconds)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/weeks-months-mutually-exclusive.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/weeks-months-mutually-exclusive.js -new file mode 100644 -index 0000000000000000000000000000000000000000..412673117e1e7b0808fff267ce0203957e5ceb82 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/weeks-months-mutually-exclusive.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.until -+description: Weeks and months are mutually exclusive -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const laterDateTime = dt.add({ days: 42, hours: 3 }); -+ -+TemporalHelpers.assertDuration( -+ dt.until(laterDateTime, { largestUnit: "weeks" }), -+ 0, 0, 6, 0, 3, 0, 0, 0, 0, 0, -+ "weeks and months mutually exclusive (prefer weeks)" -+); -+ -+TemporalHelpers.assertDuration( -+ dt.until(laterDateTime, { largestUnit: "months" }), -+ 0, 1, 0, 12, 3, 0, 0, 0, 0, 0, -+ "weeks and months mutually exclusive (prefer months)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js -index 028410a06d576dd42dc7eea4cabf2890f202a8c3..dd7ac76c968a9e15751ca471989325a228f88186 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/until/year-zero.js -@@ -8,14 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -+ "-000000-12-07", - "-000000-12-07T03:24:30", -- "-000000-12-07T03:24:30+01:00[UTC]" -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { instance.until(arg); }, -+ () => instance.until(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/valueOf/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/valueOf/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3da2878448ed2b9acf5780a1319cb06e1a45b7b7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/valueOf/basic.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.valueof -+description: Comparison operators (except !== and ===) do not work -+features: [Temporal] -+---*/ -+ -+const dt1 = new Temporal.PlainDateTime(1963, 2, 13, 9, 36, 29, 123, 456, 789); -+const dt1again = new Temporal.PlainDateTime(1963, 2, 13, 9, 36, 29, 123, 456, 789); -+const dt2 = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+assert.sameValue(dt1 === dt1, true, "object equality implies ==="); -+assert.sameValue(dt1 !== dt1again, true, "object non-equality, even if all data is the same, implies !=="); -+assert.throws(TypeError, () => dt1 < dt1, "< throws (same objects)"); -+assert.throws(TypeError, () => dt1 < dt2, "< throws (different objects)"); -+assert.throws(TypeError, () => dt1 > dt1, "> throws (same objects)"); -+assert.throws(TypeError, () => dt1 > dt2, "> throws (different objects)"); -+assert.throws(TypeError, () => dt1 <= dt1, "<= does not throw (same objects)"); -+assert.throws(TypeError, () => dt1 <= dt2, "<= throws (different objects)"); -+assert.throws(TypeError, () => dt1 >= dt1, ">= throws (same objects)"); -+assert.throws(TypeError, () => dt1 >= dt2, ">= throws (different objects)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/weekOfYear/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/weekOfYear/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6273dbc54cd4820d60491ceeef6822128a71acbd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/weekOfYear/basic.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-get-temporal.plaindatetime.prototype.weekofyear -+description: Checking week of year for a "normal" case (non-undefined, non-boundary case, etc.) -+features: [Temporal] -+---*/ -+ -+const calendar = Temporal.Calendar.from("iso8601"); -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+assert.sameValue(datetime.weekOfYear, 47, "check week of year information"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-not-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-not-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..65c474da5385506e5e8efdf7a2f6474e99381f38 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-not-object.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.with -+description: Non-object arguments throw. -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+const args = [ -+ undefined, -+ null, -+ true, -+ "2020-01-12T10:20:30", -+ Symbol(), -+ 2020, -+ 2020n, -+]; -+for (const argument of args) { -+ assert.throws(TypeError, () => instance.with(argument), `Does not support ${typeof argument}`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5c4c4e2b5bf0ef63fdd859deb32423c1a96cbdb2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/argument-object-insufficient-data.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: Unrecognized properties (incl. plurals of recognized units) are ignored -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+assert.throws( -+ TypeError, -+ () => instance.with({}), -+ "empty object not acceptable" -+); -+ -+const units = ["year", "month", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"]; -+ -+units.forEach((unit) => { -+ let plural = `${unit}s`; -+ let options = {}; -+ options[plural] = 1; -+ assert.throws( -+ TypeError, -+ () => instance.with(options), -+ `plural unit ("${plural}" vs "${unit}") is not acceptable` -+ ); -+}); -+ -+assert.throws( -+ TypeError, -+ () => instance.with({nonsense: true}), -+ "throw if no recognized properties present" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ instance.with({year: 1965, nonsense: true}), -+ 1965, 5, "M05", 2, 12, 34, 56, 987, 654, 321, -+ "unrecognized properties ignored & does not throw if recognized properties present)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d021389adcf2111ab92b4f20d32554f60bb04d18 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/basic.js -@@ -0,0 +1,77 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: A variety of "normal" (non-throwing, non-boundary case, non-null, etc.) arguments -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ year: 2019 }), -+ 2019, 11, "M11", 18, 15, 23, 30, 123, 456, 789, -+ "with year works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ month: 5 }), -+ 1976, 5, "M05", 18, 15, 23, 30, 123, 456, 789, -+ "with month works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ monthCode: "M05" }), -+ 1976, 5, "M05", 18, 15, 23, 30, 123, 456, 789, -+ "with month code works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ day: 5 }), -+ 1976, 11, "M11", 5, 15, 23, 30, 123, 456, 789, -+ "with day works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ hour: 5 }), -+ 1976, 11, "M11", 18, 5, 23, 30, 123, 456, 789, -+ "with hour works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ minute: 5 }), -+ 1976, 11, "M11", 18, 15, 5, 30, 123, 456, 789, -+ "with minute works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ second: 5 }), -+ 1976, 11, "M11", 18, 15, 23, 5, 123, 456, 789, -+ "with second works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ millisecond: 5 }), -+ 1976, 11, "M11", 18, 15, 23, 30, 5, 456, 789, -+ "with millisecond works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ microsecond: 5 }), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 5, 789, -+ "with microsecond works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ nanosecond: 5 }), -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 5, -+ "with nanosecond works" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ month: 5, second: 15 }), -+ 1976, 5, "M05", 18, 15, 23, 15, 123, 456, 789, -+ "with month and second works" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-options.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-options.js -new file mode 100644 -index 0000000000000000000000000000000000000000..935c1333d122f0c496a8b40e0f0db4b2891ae468 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-options.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.with -+description: The options argument is passed through to Calendar#dateFromFields as-is. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const options = {}; -+let calledDateFromFields = 0; -+class Calendar extends Temporal.Calendar { -+ constructor() { -+ super("iso8601"); -+ } -+ dateFromFields(fields, optionsArg) { -+ ++calledDateFromFields; -+ assert.sameValue(optionsArg, options, "should pass options object through"); -+ return super.dateFromFields(fields, optionsArg); -+ } -+}; -+const calendar = new Calendar(); -+const plaindatetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar); -+const result = plaindatetime.with({ year: 2005 }, options); -+TemporalHelpers.assertPlainDateTime(result, 2005, 5, "M05", 2, 12, 34, 56, 987, 654, 321); -+assert.sameValue(calledDateFromFields, 1, "should have called overridden dateFromFields once"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-temporal-object-throws.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-temporal-object-throws.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ae6887e31a17fe32feec9209698edc2f3a106f26 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-temporal-object-throws.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: Throws if a Temporal object with a calendar is supplied -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+const values = [ -+ Temporal.PlainDate.from("2022-04-12"), -+ Temporal.PlainDateTime.from("2022-04-12T15:19:45"), -+ Temporal.PlainMonthDay.from("04-12"), -+ Temporal.PlainTime.from("15:19:45"), -+ Temporal.PlainYearMonth.from("2022-04"), -+ Temporal.ZonedDateTime.from("2022-04-12T15:19:45[UTC]"), -+]; -+ -+for (const value of values) { -+ Object.defineProperty(value, "calendar", { -+ get() { throw new Test262Error("should not get calendar property") } -+ }); -+ Object.defineProperty(value, "timeZone", { -+ get() { throw new Test262Error("should not get timeZone property") } -+ }); -+ assert.throws( -+ TypeError, -+ () => datetime.with(value), -+ "throws with temporal object" -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-throws.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-throws.js -new file mode 100644 -index 0000000000000000000000000000000000000000..165c7b57b2a7c724dc28d978544bb0150e6575e4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/calendar-throws.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: Throws if a calendar is supplied -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ TypeError, -+ () => datetime.with({ year: 2021, calendar: "iso8601" }), -+ "throws with calendar property" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/month-and-monthcode-must-agree.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/month-and-monthcode-must-agree.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6e81bac840ed71afbacd4694824f8ad7a953de6e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/month-and-monthcode-must-agree.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.with -+description: The month and month code should agree -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ RangeError, -+ () => datetime.with({ month: 5, monthCode: "M06" }), -+ "month and monthCode must agree" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/multiple-unrecognized-properties-ignored.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/multiple-unrecognized-properties-ignored.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5a5309f2e20572c7aa852c87b500bc2661c8a5fc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/multiple-unrecognized-properties-ignored.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: Unrecognized units are ignored -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const units = ["year", "month", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"]; -+ -+units.forEach((unit) => { -+ let plural = `${unit}s`; -+ let arg = { month: 12 }; -+ arg[plural] = 1; -+ TemporalHelpers.assertPlainDateTime( -+ datetime.with(arg), -+ 1976, 12, "M12", 18, 15, 23, 30, 123, 456, 789, -+ `unrecognized property (${plural}) gets ignored` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-empty.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-empty.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3bc92e0d8e6ecc61150c2dae3564e0f941521268 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-empty.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.with -+description: Verify that undefined options are handled correctly. -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ day: 40 }, {}), -+ 1976, 11, "M11", 30, 15, 23, 30, 123, 456, 789, -+ "options may be empty object" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ datetime.with({ day: 40 }, () => {}), -+ 1976, 11, "M11", 30, 15, 23, 30, 123, 456, 789, -+ "read empty options from function object" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8f52de349e67a3a101179eeadd9e3b3d32840f00 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-invalid.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.with -+description: Verify that undefined options are handled correctly. -+features: [Temporal, Symbol] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+const badOptions = [null, 1, 'hello', true, Symbol('foo'), 1n]; -+ -+badOptions.forEach((bad) => { -+ assert.throws( -+ TypeError, -+ () => datetime.with({ day: 5 }, bad), -+ `bad options (${typeof bad})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5c29d95e5e60ac2d4d4751d1624bd9c32b3ba611 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.with -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.with({ day: 5 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/order-of-operations.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/order-of-operations.js -index be6e0797b8377ba5994a31949e7e0dc6f08179fb..ce2bc34b9c68b9a1049b8fb04f8b5b56b8fb1ff9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/order-of-operations.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/order-of-operations.js -@@ -42,6 +42,12 @@ const expected = [ - "get year", - "get year.valueOf", - "call year.valueOf", -+ "get options.overflow", -+ "get options.overflow.toString", -+ "call options.overflow.toString", -+ "get options.overflow", -+ "get options.overflow.toString", -+ "call options.overflow.toString", - ]; - const actual = []; - const fields = { -@@ -70,7 +76,13 @@ const argument = new Proxy(fields, { - return key in target; - }, - }); --const result = instance.with(argument); -+const options = { -+ get overflow() { -+ actual.push("get options.overflow"); -+ return TemporalHelpers.toPrimitiveObserver(actual, "constrain", "options.overflow"); -+ } -+}; -+const result = instance.with(argument, options); - TemporalHelpers.assertPlainDateTime(result, 1, 1, "M01", 1, 1, 1, 1, 1, 1, 1); - assert.sameValue(result.calendar.id, "iso8601", "calendar result"); - assert.compareArray(actual, expected, "order of operations"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/overflow-invalid-string.js -index 9e3f561784620b6a32baaea0691917b4a4c0e4a0..4d3b05b0eac021236cef4287acf09fafd2afca47 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/overflow-invalid-string.js -@@ -18,4 +18,12 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.PlainDateTime(2000, 5, 2, 12); --assert.throws(RangeError, () => datetime.with({ minute: 45 }, { overflow: "other string" })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => datetime.with({ minute: 45 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/string-throws.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/string-throws.js -new file mode 100644 -index 0000000000000000000000000000000000000000..405a12fadbe83b5a3cc27758dcf6b2b176cd2431 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/string-throws.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: Throws if a string argument is supplied -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const baddies = ["12:00", "1995-04-07", "2019-05-17T12:34:56.007007007", "2019-05-17T12:34:56.007007007Z", "42"]; -+ -+baddies.forEach((bad) => { -+ assert.throws( -+ TypeError, -+ () => instance.with(bad), -+ `bad argument (${bad})` -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/timezone-throws.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/timezone-throws.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0931204b16f6b3e4233ea132c6a33b79f8862fcd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/with/timezone-throws.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: Throws if a timezone is supplied -+esid: sec-temporal.plaindatetime.prototype.with -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+ -+assert.throws( -+ TypeError, -+ () => datetime.with({ year: 2021, timeZone: "UTC" }), -+ "throws with timezone property" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/argument-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b75ace828f85e0a45eb2b4e19ac52a0f3c47802c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/argument-string.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withcalendar -+description: String argument, if it names a recognizable calendar, gets cast -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const calendar = { -+ toString() { return "something special"; } -+}; -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, calendar); -+const result = dt.withCalendar("iso8601"); -+ -+TemporalHelpers.assertPlainDateTime( -+ result, -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 789, -+ "'iso8601' is a recognizable calendar" -+); -+ -+const resultCalendar = result.calendar; -+ -+assert.sameValue( -+ resultCalendar instanceof Temporal.Calendar, -+ true, -+ "underlying calendar is no longer a plain object" -+); -+ -+assert.sameValue(resultCalendar.toString(), "iso8601", "underlying calendar has changed"); -+ -+assert.throws( -+ RangeError, -+ () => dt.withCalendar("this will fail"), -+ "unknown calendar throws" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..318f552ab5429093253d4ddcdd4cdd4ddd1f2393 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/basic.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withcalendar -+description: Non-throwing non-edge case -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789); -+const calendar = new Temporal.Calendar("iso8601"); -+ -+const result = dt.withCalendar(calendar); -+ -+TemporalHelpers.assertPlainDateTime( -+ result, -+ 1976, 11, "M11", 18, 15, 23, 30, 123, 456, 789, -+ "works" -+); -+ -+assert.sameValue(result.calendar, calendar, "underlying calendar is unchanged"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3289014fc493ddb2353667214a83a93c52f0deb3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withcalendar -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, { id: "replace-me" }); -+ -+const arg = 19761118; -+ -+const result = instance.withCalendar(arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withCalendar(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..02ea408591f633159c592f5c6b816cb0174b909b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-string-leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withcalendar -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, { id: "replace-me" }); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withCalendar(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = instance.withCalendar(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-temporal-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-temporal-object.js -index d433a932aadcd49816f2843f5aa3420332bd6be8..b5aa7ac67f10f283c3c48f7985794c2c8ad8755e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-temporal-object.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-temporal-object.js -@@ -17,5 +17,5 @@ features: [Temporal] - TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject, calendar) => { - const plainDateTime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); - const result = plainDateTime.withCalendar(temporalObject); -- assert.sameValue(result.calendar, calendar, 'Temporal object coerced to calendar'); -+ assert.sameValue(result.calendar, calendar, "Temporal object coerced to calendar"); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e08a087f2b0d5812a20a5042e5fcb72f97048637 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withCalendar/calendar-wrong-type.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withcalendar -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789, { id: "replace-me" }); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withCalendar(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withCalendar(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cb2c9337a3da1828c8117005fc0e464449af40e4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: A number is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const arg = 19761118; -+ -+const result = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime(result, 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0ddb21932d17699ae2d2de4742cbf830dc241867 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object-insufficient-data.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Unrecognized properties of plain object ignored -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30); -+ -+assert.throws( -+ TypeError, -+ () => dt.withPlainDate({}), -+ "empty object not acceptable" -+); -+ -+assert.throws( -+ TypeError, -+ () => dt.withPlainDate({ months: 12 }), // should be "month" -+ "no recognized properties (look like it might work)" -+); -+ -+assert.throws( -+ TypeError, -+ () => dt.with({nonsense: true}), -+ "no recognized properties (clearly won't work)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainDate({ year: 2000, month: 6, day: 1, months: 123 }), // 'months' unrecognized; see above -+ 2000, 6, "M06", 1, 3, 24, 30, 0, 0, 0, -+ "unrecognized properties ignored & does not throw if recognized properties present)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b7e336344aa096ce6599009628b0ef35dfbb800c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-object.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Plain object may be acceptable -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainDate({ year: 2000, month: 6, day: 1 }), -+ 2000, 6, "M06", 1, 3, 24, 30, 0, 0, 0, -+ "plain object works" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js -new file mode 100644 -index 0000000000000000000000000000000000000000..326aed7c76240abdabce591fa08dbbf5ca097894 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate calendar is preserved with ISO PDT -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal = { -+ id: 'thisisnotiso', -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0); -+assert.sameValue(pdt.calendar.toString(), "iso8601", "PlainDateTime with ISO calendar"); -+const pd = new Temporal.PlainDate(2010, 11, 12, cal); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is changed if receiver has ISO calendar (1)" -+ // Testing of era and eraYear should only be coded under intl402 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is changed if receiver has ISO calendar (2)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5c7536640bcf2260f4b93653ba8d424701104036 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate calendar is preserved when both calendars have the same id -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal1 = { -+ toString() { return "this is a string"; }, -+}; -+const cal2 = { -+ id: 'thisisnotiso', -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal1); -+const pd = new Temporal.PlainDate(2010, 11, 12, cal2); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is changed with same id (1)" -+ // Testing of era and eraYear should only be coded under intl402 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal2, -+ "calendar is changed with same id (2)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9eaba18a9405a00b65c1053ba7de399ba13eb066 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate calendar is preserved when both calendars are the same object -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+let calls = 0; -+const cal = { -+ id: 'thisisnotiso', -+ toString() { -+ ++calls; -+ return "this is a string"; -+ }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+const pd = new Temporal.PlainDate(2010, 11, 12, cal); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is unchanged with same calendars (1)" -+ // Testing of era and eraYear should only be coded under intl402 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is unchanged with same calendars (2)" -+); -+assert.sameValue(calls, 0, "should not have called cal.toString()"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js -new file mode 100644 -index 0000000000000000000000000000000000000000..12a28cb78eb883c9a3bbce2200d28585ee045040 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Original PDT calendar is preserved with ISO PlainDate -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal = { -+ id: 'thisisnotiso', -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+const pd = new Temporal.PlainDate(2010, 11, 12); -+assert.sameValue(pd.calendar.toString(), "iso8601", "PlainDate with ISO calendar"); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is unchanged if input has ISO calendar (1)" -+ // Testing of era and eraYear should only be coded under intl402 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is unchanged if input has ISO calendar (2)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate.js -new file mode 100644 -index 0000000000000000000000000000000000000000..14ebb69c035db7e717c07ac809bb9bd8befa3db7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate object is acceptable -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30); -+const date = new Temporal.PlainDate(2020, 1, 23); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainDate(date), -+ 2020, 1, "M01", 23, 3, 24, 30, 0, 0, 0, -+ "PlainDate argument works" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..db9a51215e7d2d268f7bfe1041903876c21d58cd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c9ae966915434a3265ed48ef01969d2403b4f0e3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime(result1, 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime(result2, 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7fbae64fc59a91f48498b7112ab06597b0027132 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.withPlainDate(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.withPlainDate(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.withPlainDate(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.withPlainDate(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.withPlainDate(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bb85c7bec1e10a88912cc3a8cfc5f1f57e439865 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a4f4d9350f010e1c8f7020e7cb566eef0a5569c5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f587118608c76fa6603c39a95c2044feb6077def ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Original PDT calendar is preserved with ISO string -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal = { -+ id: "thisisnotiso", -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+const shifted = dt.withPlainDate("2010-11-12"); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is unchanged if input has ISO calendar (1)" -+ // Testing of era and eraYear should only be coded under intl402 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is unchanged if input has ISO calendar (2)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..902cae34dc089ebcb4991c5a7d35f35e20ff900a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate-like string argument is acceptable -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainDate("2018-09-15"), -+ 2018, 9, "M09", 15, 3, 24, 30, 0, 0, 0, -+ "PlainDate-like string argument works" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..37daa75ccd428130eb0b90abf9400b5461cd2212 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withPlainDate(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withPlainDate(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b67561e482900dce5e3235d1a04bde9b8e79f073 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar); -+instance.withPlainDate({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..39c6186177fca56ab21ed82d1a41e696a7208e4d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 2016, 12, "M12", 31, 12, 34, 56, 987, 654, 321, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.withPlainDate(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 2016, 12, "M12", 31, 12, 34, 56, 987, 654, 321, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/non-compatible-calendars-throw.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/non-compatible-calendars-throw.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9e3920d2bb066eb528ab75fddc20ffca30e71268 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/non-compatible-calendars-throw.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.withplaindate -+description: If two non-ISO calendars are involved, an error is raised -+features: [Temporal] -+---*/ -+ -+const cal = { -+ id: "foo", -+ toString() { return "this is a string"; }, -+}; -+ -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+ -+const anotherCal = { -+ id: "bar", -+ toString() { return "this is another string"; }, -+}; -+ -+const date = new Temporal.PlainDate(2008, 9, 6, anotherCal); -+ -+assert.throws( -+ RangeError, -+ () => dt.withPlainDate(date), -+ "throws if both `this` and `other` have a non-ISO calendar" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js -index 392a7ec2c077bcd54242ca24f1da06f731878a14..b6fffe30e42fd042dd2f0ccc6535f72ffa810813 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainDate/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.withPlainDate(arg); }, -+ () => instance.withPlainDate(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a2dc97347decf4c944ca965ef616bb64ac5fd498 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-number.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: A number is converted to a string, then to Temporal.PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2); -+ -+const arg = 123456.987654321; -+ -+const result = instance.withPlainTime(arg); -+TemporalHelpers.assertPlainDateTime(result, 2000, 5, "M05", 2, 12, 34, 56, 987, 654, 321, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainTime(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-object-insufficient-data.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-object-insufficient-data.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3143b43c5e8a6caf9f7d8e8d2fe4091cb1082820 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-object-insufficient-data.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: A plain object can be used as an argument -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2015, 12, 7, 3, 24, 30, 0, 3, 500); -+ -+assert.throws( -+ TypeError, -+ () => dt.withPlainTime({}), -+ "empty object not an acceptable argument" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainTime({ hour: 10 }), -+ 2015, 12, "M12", 7, 10, 0, 0, 0, 0, 0, -+ "plain object (hour) works" -+); -+ -+assert.throws( -+ TypeError, -+ () => dt.withPlainTime({ hours: 9 }), // should be "hour", see above -+ "plain object with a single unrecognized property fails" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainTime({ hour: 10, seconds: 123 }), -+ 2015, 12, "M12", 7, 10, 0, 0, 0, 0, 0, -+ "unrecognized properties are ignored if at least one recognized property is present" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -index 2b0988cda55e8401b1183e6a62ae4b723d1e0c23..62b61c51eeeaec3d350296d7c23d9a0822bc55c5 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.withPlainTime(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.withPlainTime(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-without-time-designator.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-without-time-designator.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2acd0c8a3ac18715aa93eb5ab7b475d3a50ee3b2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-without-time-designator.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: String argument without ISO 8601 time designator "T" allowed -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2015, 12, 7, 3, 24, 30, 0, 3, 500); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainTime("12:34"), -+ 2015, 12, "M12", 7, 12, 34, 0, 0, 0, 0, -+ "time-like string works" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-time.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-time.js -new file mode 100644 -index 0000000000000000000000000000000000000000..885116f7d06b9965ba4c8a4e97ab39e1c42484a3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-time.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: An instance of PlainTime can be used as an argument -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2015, 12, 7, 3, 24, 30, 0, 3, 500); -+const hour = 11; -+const minute = 22; -+const time = new Temporal.PlainTime(hour, minute); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainTime(time), -+ 2015, -+ 12, -+ "M12", -+ 7, -+ hour, -+ minute, -+ 0, -+ 0, -+ 0, -+ 0, -+ "PlainTime argument works" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b8308b37f536a1cb56aa319fe68a8521f6fe69bd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-wrong-type.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withPlainTime(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withPlainTime(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4cfd1e0ec32e0cbe99fdf935453acde2e4473440 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: Leap second is a valid ISO string for PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withPlainTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 2000, 5, "M05", 2, 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.withPlainTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 2000, 5, "M05", 2, 23, 59, 59, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/no-argument-default-to-midnight.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/no-argument-default-to-midnight.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bcda293fb20d5bc629259097efabd666aeb47d49 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/no-argument-default-to-midnight.js -@@ -0,0 +1,17 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaintime -+description: If no argument is given, default to midnight -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(2015, 12, 7, 3, 24, 30, 0, 3, 500); -+ -+TemporalHelpers.assertPlainDateTime( -+ dt.withPlainTime(), -+ 2015, 12, "M12", 7, 0, 0, 0, 0, 0, 0, -+ "no argument defaults to midnight" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -index df9181a483fa013b77a47f4a19c8b71f0e1850fd..5c749e611f466b26cb176a95bc2dd57970f7db55 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -@@ -11,7 +11,7 @@ features: [Temporal] - const instance = new Temporal.PlainDateTime(2000, 1, 1, 12, 30, 45, 123, 456, 789); - - const props = {}; --assert.throws(TypeError, () => instance.withPlainTime(props), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.withPlainTime(props), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.withPlainTime(props); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js -index 0b74c516c6cb60948bc2bcd9251f606c602a2625..19734655f17368c1f313b66a86effc03c563646e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/year-zero.js -@@ -8,8 +8,9 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/second-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/second-undefined.js -index 9ec2ea3ef79b5fd27d73dba7b673d54aed097437..4b8422d4c352591b1e46ed61e00df011f3f2e6c0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainDateTime/second-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainDateTime/second-undefined.js -@@ -4,13 +4,20 @@ - /*--- - esid: sec-temporal.plaindatetime - description: Second argument defaults to 0 if not given -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - - const args = [2000, 5, 2, 12, 34]; - --const explicit = new Temporal.PlainDateTime(...args, undefined); --assert.sameValue(explicit.second, 0, "second default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args, undefined), -+ 2000, 5, "M05", 2, 12, 34, 0, 0, 0, 0, -+ "second default argument (argument present)" -+); - --const implicit = new Temporal.PlainDateTime(...args); --assert.sameValue(implicit.second, 0, "second default argument"); -+TemporalHelpers.assertPlainDateTime( -+ new Temporal.PlainDateTime(...args), -+ 2000, 5, "M05", 2, 12, 34, 0, 0, 0, 0, -+ "second default argument (argument missing)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-always.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-always.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8b9d87ff0a012602c5fe0cadee5ffdc13b05ef37 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-always.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday -+description: If calendar name is to be emitted, include additional reference info -+features: [Temporal] -+---*/ -+ -+const pmd = new Temporal.PlainMonthDay(10, 31, "iso8601", 2019); -+ -+assert.sameValue( -+ pmd.toString({ calendarName: 'always' }), -+ "2019-10-31[u-ca=iso8601]", -+ "emit year-month-day if calendarName = 'always' (four-argument constructor)" -+); -+ -+const anotherPMD = Temporal.PlainMonthDay.from("2019-10-31"); // 2019 will get dropped -+ -+assert.sameValue( -+ anotherPMD.toString({ calendarName: 'always' }), -+ "1972-10-31[u-ca=iso8601]", -+ "emit fallback year if calendarName = 'always' (static from)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bc2edac62fabd29a90448a07c9326072efe2378b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = new Temporal.PlainMonthDay(12, 15, arg, 1972); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => new Temporal.PlainMonthDay(12, 15, arg, 1972), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d2f3038539472e06b0546ba6a908274bbe2ea4f0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => new Temporal.PlainMonthDay(12, 15, arg, 1972), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => new Temporal.PlainMonthDay(12, 15, arg, 1972), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e9b0edcbf45536cecea37f74c0d8907ff2b4a8ea ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-number.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: A number is converted to a string, then to Temporal.PlainMonthDay -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const arg = 1118; -+ -+const result = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay(result, "M11", 18, "1118 is a valid ISO string for PlainMonthDay"); -+ -+const numbers = [ -+ 1, -+ -1118, -+ 12345, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainMonthDay.from(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainMonthDay` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-plainmonthday.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-plainmonthday.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5304f5539695bfd945b9e62d44b91cb19eb4ff42 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-plainmonthday.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: A PlainMonthDay object is copied, not returned directly -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const orig = new Temporal.PlainMonthDay(5, 2, undefined, 2000); -+const result = Temporal.PlainMonthDay.from(orig); -+ -+TemporalHelpers.assertPlainMonthDay( -+ result, -+ "M05", 2, -+ "PlainMonthDay is copied", -+ /* isoYear = */ 2000 -+); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a PlainMonthDay is given, the returned value is not the original PlainMonthDay" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1a2d2cd042ce8620926605d0e6e395628ff27d64 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay( -+ result1, -+ "M11", 18, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay( -+ result2, -+ "M11", 18, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..56eec0c4271cda00eebaa8fd7567fa8599d03e4e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-number.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { monthCode: "M11", day: 18, calendar }; -+const result1 = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay(result1, "M11", 18, "19970327 is a valid ISO string for calendar"); -+ -+arg = { monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay(result2, "M11", 18, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainMonthDay.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainMonthDay.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fceeb50eabbeac0e46ef4c068a23513d935d1619 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,44 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainMonthDay.from(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainMonthDay.from(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainMonthDay.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainMonthDay.from(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainMonthDay.from(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c71ce5ee2d7aaed946994e9b55aee974e84725bb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainMonthDay.from(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..42ea70dfd26d08d1c97845633cfbd22c1c1f9b45 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/argument-wrong-type.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainMonthDay -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainMonthDay.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainMonthDay, "Temporal.PlainMonthDay, object"], -+ [Temporal.PlainMonthDay.prototype, "Temporal.PlainMonthDay.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainMonthDay.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/calendar-monthdayfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/calendar-monthdayfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..aa302eb1aba1bd2b90c240f022082d8f6f90c6ff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/calendar-monthdayfromfields-called-with-options-undefined.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: > -+ Calendar.monthDayFromFields method is called with undefined as the options -+ value when call originates internally -+features: [Temporal] -+---*/ -+ -+const realMonthDayFromFields = Temporal.Calendar.prototype.monthDayFromFields; -+let monthDayFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.monthDayFromFields = function (fields, options) { -+ monthDayFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "monthDayFromFields shouldn't be called with options"); -+ return realMonthDayFromFields.call(this, fields, options); -+} -+ -+Temporal.PlainMonthDay.from("2000-05-02"); -+assert.sameValue(monthDayFromFieldsCallCount, 1); -+ -+Temporal.Calendar.prototype.monthDayFromFields = realMonthDayFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..450a2f832cb9341ca5523ed007f86ea089e863ff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/leap-second.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: Leap second is a valid ISO string for PlainMonthDay -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+ -+const result1 = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay( -+ result1, -+ "M12", 31, -+ "leap second is a valid ISO string for PlainMonthDay" -+); -+ -+const result2 = Temporal.PlainMonthDay.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainMonthDay( -+ result2, -+ "M12", 31, -+ "leap second is a valid ISO string for PlainMonthDay" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainMonthDay.from(arg); -+TemporalHelpers.assertPlainMonthDay( -+ result3, -+ "M12", 31, -+ "second: 60 is ignored in property bag for PlainMonthDay" -+); -+ -+const result4 = Temporal.PlainMonthDay.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainMonthDay( -+ result4, -+ "M12", 31, -+ "second: 60 is ignored in property bag for PlainMonthDay even with overflow: reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c4c559bc6a89b3773cdd1ae75b1257632815bc1f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.from -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.PlainMonthDay.from({ monthCode: "M12", day: 15 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/overflow-invalid-string.js -index c2427006fdc9d7cf94681de71d2228cc942094d5..48ccf8436433280254bc6c26190fab67dfb5c5d9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/overflow-invalid-string.js -@@ -27,6 +27,14 @@ const validValues = [ - { monthCode: "M05", day: 2 }, - "05-02", - ]; --validValues.forEach((value) => { -- assert.throws(RangeError, () => Temporal.PlainMonthDay.from(value, { overflow: "other string" })); --}); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const value of validValues) { -+ for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainMonthDay.from(value, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/year-zero.js -index 347dba092828b3129b07934a8e5b2b19fb0108ac..782debd933a6925aee9242bac6fc76c07beb60a4 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/from/year-zero.js -@@ -8,15 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-08", -- "-000000-08-24", -- "-000000-08-24T15:43:27", -- "-000000-08-24T15:43:27+01:00[UTC]" -+ "-000000-08-24", -+ "-000000-08-24T15:43:27", -+ "-000000-08-24T15:43:27+01:00", -+ "-000000-08-24T15:43:27+00:00[UTC]", - ]; -+ - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { Temporal.PlainMonthDay.from(arg); }, -+ () => Temporal.PlainMonthDay.from(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b24f80790fe97a91b98a99fdc072815d3bf0aace ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: A number is converted to a string, then to Temporal.PlainMonthDay -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainMonthDay(11, 18); -+ -+const arg = 1118; -+ -+const result = instance.equals(arg); -+assert.sameValue(result, true, "1118 is a valid ISO string for PlainMonthDay"); -+ -+const numbers = [ -+ 1, -+ -1118, -+ 12345, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainMonthDay` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..202f5f4318d39a77a1294abdd4f386a90a38c8fb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainMonthDay(11, 18); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { monthCode: "M11", day: 18, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..be40e79001a171c3a7ffe8f2e1d4d8c45ecf0ec8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainMonthDay(11, 18); -+ -+const calendar = 19970327; -+ -+let arg = { monthCode: "M11", day: 18, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue(result1, true, "19970327 is a valid ISO string for calendar"); -+ -+arg = { monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue(result2, true, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b3b856b20b01ddfefc13d01256f5c0bd8a26c57a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainMonthDay(5, 2); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.equals(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b50c75421c34bfb2a6ff3dcf626efd860f3c2431 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainMonthDay(5, 2); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type.js -index c89ad73130edee5c0e94969b48e82f405f3be9fb..8c91b61fc4b5adaa5f67ca720fd953c082fced3d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type.js -@@ -1,20 +1,36 @@ --// Copyright (C) 2020 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plainmonthday.prototype.equals --description: Appropriate error thrown when argument cannot be converted to a valid string --features: [Symbol, Temporal] -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainMonthDay -+features: [BigInt, Symbol, Temporal] - ---*/ - --const instance = Temporal.PlainMonthDay.from({ month: 5, day: 2 }); -+const instance = new Temporal.PlainMonthDay(5, 2); - --assert.throws(RangeError, () => instance.equals(undefined), "undefined"); --assert.throws(RangeError, () => instance.equals(null), "null"); --assert.throws(RangeError, () => instance.equals(true), "true"); --assert.throws(RangeError, () => instance.equals(""), "empty string"); --assert.throws(TypeError, () => instance.equals(Symbol()), "symbol"); --assert.throws(RangeError, () => instance.equals(1), "1"); --assert.throws(TypeError, () => instance.equals({}), "plain object"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainMonthDay), "Temporal.PlainMonthDay"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainMonthDay.prototype), "Temporal.PlainMonthDay.prototype"); -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainMonthDay, "Temporal.PlainMonthDay, object"], -+ [Temporal.PlainMonthDay.prototype, "Temporal.PlainMonthDay.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/calendar-monthdayfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/calendar-monthdayfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..649812219f9dade5da0a10d2c15c73a1932e8386 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/calendar-monthdayfromfields-called-with-options-undefined.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: > -+ Calendar.monthDayFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainMonthDay(5, 2, calendar); -+instance.equals({ monthCode: "M05", day: 3, calendar }); -+assert.sameValue(calendar.monthDayFromFieldsCallCount, 1); -+ -+// Test again, but overriding the global Temporal.Calendar.prototype method so -+// we can observe the call to monthDayFromFields() on the ISO8601 calendar -+// that occurs when we parse the string -+ -+const realMonthDayFromFields = Temporal.Calendar.prototype.monthDayFromFields; -+let monthDayFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.monthDayFromFields = function (fields, options) { -+ monthDayFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "monthDayFromFields shouldn't be called with options"); -+ return realMonthDayFromFields.call(this, fields, options); -+} -+ -+instance.equals("2000-05-03"); -+assert.sameValue(monthDayFromFieldsCallCount, 1); -+ -+Temporal.Calendar.prototype.monthDayFromFields = realMonthDayFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f950ce0f1d892d129e935a64866394508b79922d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.equals -+description: Leap second is a valid ISO string for PlainMonthDay -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainMonthDay(12, 31); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for PlainMonthDay" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "second: 60 is ignored in property bag for PlainMonthDay" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js -index f420f38b46ab60a5beffdf4b7ea49a509276afda..155b4a114a195154989cb72042b8e3492c0753b5 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/equals/year-zero.js -@@ -8,10 +8,10 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-08", -- "-000000-08-24", -- "-000000-08-24T15:43:27", -- "-000000-08-24T15:43:27+01:00[UTC]" -+ "-000000-08-24", -+ "-000000-08-24T15:43:27", -+ "-000000-08-24T15:43:27+01:00", -+ "-000000-08-24T15:43:27+00:00[UTC]", - ]; - const instance = new Temporal.PlainMonthDay(5, 2); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toJSON/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toJSON/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..90b633fb299fb3ee7c26386e7a3e6cec9e469005 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toJSON/year-format.js -@@ -0,0 +1,55 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.tojson -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+// For PlainMonthDay, the ISO reference year is only present in the string if -+// the calendar is not ISO 8601 -+class NotISO extends Temporal.Calendar { -+ constructor() { super("iso8601"); } -+ toString() { return "not-iso"; } -+} -+const calendar = new NotISO(); -+ -+let instance = new Temporal.PlainMonthDay(12, 3, calendar, -100000); -+assert.sameValue(instance.toJSON(), "-100000-12-03[u-ca=not-iso]", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(4, 5, calendar, -10000); -+assert.sameValue(instance.toJSON(), "-010000-04-05[u-ca=not-iso]", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(6, 7, calendar, -9999); -+assert.sameValue(instance.toJSON(), "-009999-06-07[u-ca=not-iso]", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(8, 9, calendar, -1000); -+assert.sameValue(instance.toJSON(), "-001000-08-09[u-ca=not-iso]", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(10, 9, calendar, -999); -+assert.sameValue(instance.toJSON(), "-000999-10-09[u-ca=not-iso]", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(8, 7, calendar, -1); -+assert.sameValue(instance.toJSON(), "-000001-08-07[u-ca=not-iso]", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(6, 5, calendar, 0); -+assert.sameValue(instance.toJSON(), "0000-06-05[u-ca=not-iso]", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(4, 3, calendar, 1); -+assert.sameValue(instance.toJSON(), "0001-04-03[u-ca=not-iso]", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(2, 10, calendar, 999); -+assert.sameValue(instance.toJSON(), "0999-02-10[u-ca=not-iso]", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(1, 23, calendar, 1000); -+assert.sameValue(instance.toJSON(), "1000-01-23[u-ca=not-iso]", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(4, 5, calendar, 9999); -+assert.sameValue(instance.toJSON(), "9999-04-05[u-ca=not-iso]", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(6, 7, calendar, 10000); -+assert.sameValue(instance.toJSON(), "+010000-06-07[u-ca=not-iso]", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(8, 9, calendar, 100000); -+assert.sameValue(instance.toJSON(), "+100000-08-09[u-ca=not-iso]", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/calendarname-always.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/calendarname-always.js -index fadff8929f487870240c9dec880f327c208d4c34..4d1d85b67976ce70bd984adf2b9fbc3e9252803a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/calendarname-always.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/calendarname-always.js -@@ -8,9 +8,9 @@ features: [Temporal] - ---*/ - - const tests = [ -- [[], "05-02[u-ca=iso8601]"], -+ [[], "1972-05-02[u-ca=iso8601]"], - [[{ toString() { return "custom"; } }], "1972-05-02[u-ca=custom]"], -- [[{ toString() { return "iso8601"; } }], "05-02[u-ca=iso8601]"], -+ [[{ toString() { return "iso8601"; } }], "1972-05-02[u-ca=iso8601]"], - [[{ toString() { return "ISO8601"; } }], "1972-05-02[u-ca=ISO8601]"], - [[{ toString() { return "\u0131so8601"; } }], "1972-05-02[u-ca=\u0131so8601]"], // dotless i - ]; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..67575fe09f8ef70cc1d1e56e331117b188c6835b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainMonthDay(5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3898ff66b655dc93930101eabe50b74105286257 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/toString/year-format.js -@@ -0,0 +1,55 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.tostring -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+// For PlainMonthDay, the ISO reference year is only present in the string if -+// the calendar is not ISO 8601 -+class NotISO extends Temporal.Calendar { -+ constructor() { super("iso8601"); } -+ toString() { return "not-iso"; } -+} -+const calendar = new NotISO(); -+ -+let instance = new Temporal.PlainMonthDay(12, 3, calendar, -100000); -+assert.sameValue(instance.toString(), "-100000-12-03[u-ca=not-iso]", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(4, 5, calendar, -10000); -+assert.sameValue(instance.toString(), "-010000-04-05[u-ca=not-iso]", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(6, 7, calendar, -9999); -+assert.sameValue(instance.toString(), "-009999-06-07[u-ca=not-iso]", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(8, 9, calendar, -1000); -+assert.sameValue(instance.toString(), "-001000-08-09[u-ca=not-iso]", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(10, 9, calendar, -999); -+assert.sameValue(instance.toString(), "-000999-10-09[u-ca=not-iso]", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(8, 7, calendar, -1); -+assert.sameValue(instance.toString(), "-000001-08-07[u-ca=not-iso]", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(6, 5, calendar, 0); -+assert.sameValue(instance.toString(), "0000-06-05[u-ca=not-iso]", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(4, 3, calendar, 1); -+assert.sameValue(instance.toString(), "0001-04-03[u-ca=not-iso]", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(2, 10, calendar, 999); -+assert.sameValue(instance.toString(), "0999-02-10[u-ca=not-iso]", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(1, 23, calendar, 1000); -+assert.sameValue(instance.toString(), "1000-01-23[u-ca=not-iso]", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(4, 5, calendar, 9999); -+assert.sameValue(instance.toString(), "9999-04-05[u-ca=not-iso]", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainMonthDay(6, 7, calendar, 10000); -+assert.sameValue(instance.toString(), "+010000-06-07[u-ca=not-iso]", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainMonthDay(8, 9, calendar, 100000); -+assert.sameValue(instance.toString(), "+100000-08-09[u-ca=not-iso]", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5dbd34864b031f790186295c6e550910a0c5bf52 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainmonthday.prototype.with -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainMonthDay(5, 2); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.with({ day: 5 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/overflow-invalid-string.js -index 5ed47e975385b504ba8a55d631e7a796b9050c6a..0036dfe638022079dacf96c9aefddd0576d8158c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainMonthDay/prototype/with/overflow-invalid-string.js -@@ -17,6 +17,12 @@ features: [Temporal] - ---*/ - - const monthday = new Temporal.PlainMonthDay(5, 2); --for (const overflow of ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"]) { -- assert.throws(RangeError, () => monthday.with({ day: 8 }, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => monthday.with({ day: 8 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..aedb3f9b84ddd0f910b011b15fa753cf428f0b70 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-number.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.compare -+description: A number is converted to a string, then to Temporal.PlainTime -+features: [Temporal] -+---*/ -+ -+const arg = 123456.987654321; -+ -+const result1 = Temporal.PlainTime.compare(arg, new Temporal.PlainTime(12, 34, 56, 987, 654, 321)); -+assert.sameValue(result1, 0, "123456.987654321 is a valid ISO string for PlainTime (first argument)"); -+const result2 = Temporal.PlainTime.compare(new Temporal.PlainTime(12, 34, 56, 987, 654, 321), arg); -+assert.sameValue(result2, 0, "123456.987654321 is a valid ISO string for PlainTime (second argument)"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.compare(arg, new Temporal.PlainTime(12, 34, 56, 987, 654, 321)), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.compare(new Temporal.PlainTime(12, 34, 56, 987, 654, 321), arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime (second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js -index 1fc7ead2d00bc2ab06cbd87189056d560b051a56..a3cbbf96ee84553a8e6ce198bc0fa84fda404ba8 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-string-time-designator-required-for-disambiguation.js -@@ -33,6 +33,18 @@ ambiguousStrings.forEach((string) => { - arg = `T${string}`; - Temporal.PlainTime.compare(arg, midnight); - Temporal.PlainTime.compare(midnight, arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.compare(arg, midnight), -+ 'space is not accepted as a substitute for T prefix (first argument)' -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.compare(midnight, arg), -+ 'space is not accepted as a substitute for T prefix (second argument)' -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9efa7f69f0061307ff9edb857ca5fd3a6810be00 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainTime.compare(arg, new Temporal.PlainTime(12, 34, 56, 987, 654, 321)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainTime.compare(new Temporal.PlainTime(12, 34, 56, 987, 654, 321), arg), `${description} does not convert to a valid ISO string (second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainTime.compare(arg, new Temporal.PlainTime(12, 34, 56, 987, 654, 321)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainTime.compare(new Temporal.PlainTime(12, 34, 56, 987, 654, 321), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..186fed3a8e50f74c6cb9590be8f2943851ab2533 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.compare -+description: Leap second is a valid ISO string for PlainTime -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = Temporal.PlainTime.compare(arg, new Temporal.PlainTime(23, 59, 59)); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for PlainTime (first argument)"); -+const result2 = Temporal.PlainTime.compare(new Temporal.PlainTime(23, 59, 59), arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for PlainTime (first argument)"); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result3 = Temporal.PlainTime.compare(arg, new Temporal.PlainTime(23, 59, 59)); -+assert.sameValue(result3, 0, "second: 60 is ignored in property bag for PlainTime (first argument)"); -+const result4 = Temporal.PlainTime.compare(new Temporal.PlainTime(23, 59, 59), arg); -+assert.sameValue(result4, 0, "second: 60 is ignored in property bag for PlainTime (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js -index 9b0d146d55b5d3c7a99234ed57cb708caa12bd02..e9c7ddef2bf43233412ec58d8e2d5dfc2b62bea2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/plaintime-propertybag-no-time-units.js -@@ -8,7 +8,7 @@ features: [Temporal] - ---*/ - - const props = {}; --assert.throws(TypeError, () => Temporal.PlainTime.compare(props, new Temporal.PlainTime(0, 30)), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => Temporal.PlainTime.compare(props, new Temporal.PlainTime(0, 30)), "TypeError if no properties are present"); - - props.minute = 30; - const result = Temporal.PlainTime.compare(props, new Temporal.PlainTime(0, 30)); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/year-zero.js -index 470b42fda1c665e0a421d4b98bf6375c2baa1207..ca3d4b5e4765d7ec9be2c444e788224156fa0a83 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/compare/year-zero.js -@@ -8,16 +8,22 @@ features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); --const bad = "-000000-12-07T03:24:30"; -+const invalidStrings = [ -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", -+]; - --assert.throws( -- RangeError, -- () => Temporal.PlainTime.compare(bad, time), -- "Cannot use minus zero as extended year (first argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.compare(arg, time), -+ "Cannot use minus zero as extended year (first argument)" -+ ); - --assert.throws( -- RangeError, -- () => Temporal.PlainTime.compare(time, bad), -- "Cannot use minus zero as extended year (second argument)" --); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.compare(time, arg), -+ "Cannot use minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bc83036e0f82018963290f997d874e3843f6fe24 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: A number is converted to a string, then to Temporal.PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const arg = 123456.987654321; -+ -+const result = Temporal.PlainTime.from(arg); -+TemporalHelpers.assertPlainTime(result, 12, 34, 56, 987, 654, 321, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.from(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-object-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-object-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..de580b23316feb92d49848f93aa7c39609d5cbf5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-object-leap-second.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: Object argument handles leap seconds according to the overflow option. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+for (const options of [undefined, {}, { overflow: "constrain" }]) { -+ TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 23, minute: 59, second: 60 }, options), -+ 23, 59, 59, 0, 0, 0); -+ TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 12, minute: 30, second: 60 }, options), -+ 12, 30, 59, 0, 0, 0); -+ TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 23, minute: 59, second: 60, millisecond: 170 }, options), -+ 23, 59, 59, 170, 0, 0); -+} -+ -+const options = { overflow: "reject" }; -+assert.throws(RangeError, () => Temporal.PlainTime.from({ hour: 23, minute: 59, second: 60 }, options)); -+assert.throws(RangeError, () => Temporal.PlainTime.from({ hour: 12, minute: 30, second: 60 }, options)); -+assert.throws(RangeError, () => Temporal.PlainTime.from({ hour: 23, minute: 59, second: 60, millisecond: 170 }, options)); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..59a69c880658290da7b848551e6fbbcd53318101 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-object.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: Plain object argument is supported and ignores plural properties -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 15, minute: 23 }), -+ 15, 23, 0, 0, 0, 0); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ minute: 30, microsecond: 555 }), -+ 0, 30, 0, 0, 555, 0); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ year: 2019, month: 10, day: 1, hour: 14, minute: 20, second: 36 }), -+ 14, 20, 36, 0, 0, 0); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hours: 2, minute: 30, microsecond: 555 }), -+ 0, 30, 0, 0, 555, 0); -+ -+assert.throws(TypeError, () => Temporal.PlainTime.from({})); -+assert.throws(TypeError, () => Temporal.PlainTime.from({ minutes: 12 })); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-plaintime.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-plaintime.js -index 2c6af716f37b5602149f0ae041b8d70f8202c0fa..b00215ca270d69339d79f94cf6d9c4743626fcc5 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-plaintime.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-plaintime.js -@@ -4,11 +4,21 @@ - /*--- - esid: sec-temporal.plaintime.from - description: A PlainTime object is copied, not returned directly --includes: [compareArray.js, temporalHelpers.js] -+includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const plainTime = Temporal.PlainTime.from("11:42:00"); --const result = Temporal.PlainTime.from(plainTime); --assert.notSameValue(result, plainTime); --TemporalHelpers.assertPlainTime(result, 11, 42, 0, 0, 0, 0); -+const orig = new Temporal.PlainTime(11, 42, 0, 0, 0, 0); -+const result = Temporal.PlainTime.from(orig); -+ -+TemporalHelpers.assertPlainTime( -+ result, -+ 11, 42, 0, 0, 0, 0, -+ "PlainTime is copied" -+); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a PlainTime is given, the returned value is not the original PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cb960920eedbd487d77998d84b8fcd51e87795dd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: Leap second is replaced by :59 in ISO strings. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+for (const options of [undefined, {}, { overflow: "constrain" }, { overflow: "reject" }]) { -+ TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("23:59:60", options), -+ 23, 59, 59, 0, 0, 0); -+ TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("12:30:60", options), -+ 12, 30, 59, 0, 0, 0); -+ TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("23:59:60.170", options), -+ 23, 59, 59, 170, 0, 0); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js -index 15f5f105483b81ceef92128a3437f1c2c94a49c5..20dcb43eb41883023efb4db0a241f23c25c05a5a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-time-designator-required-for-disambiguation.js -@@ -25,6 +25,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - Temporal.PlainTime.from(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.from(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9786937f3294b14346de04b4a840ed29d2fd5896 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-wrong-type.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainTime.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainTime.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5626c74666e4938851d4c4f38e759e4c5b1e0ed6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/leap-second.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: Leap second is a valid ISO string for PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+ -+const result1 = Temporal.PlainTime.from(arg); -+TemporalHelpers.assertPlainTime( -+ result1, -+ 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+const result2 = Temporal.PlainTime.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainTime( -+ result2, -+ 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainTime.from(arg); -+TemporalHelpers.assertPlainTime( -+ result3, -+ 23, 59, 59, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainTime" -+); -+ -+assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.from(arg, { overflow: "reject" }), -+ "second: 60 is rejected in property bag for PlainTime with overflow: reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/observable-get-overflow-argument-string-invalid.js -similarity index 100% -rename from JSTests/test262/test/built-ins/Temporal/PlainTime/from/argument-string-invalid.js -rename to JSTests/test262/test/built-ins/Temporal/PlainTime/from/observable-get-overflow-argument-string-invalid.js -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..587674dd12857d3252c68f993dc38a701c65c4a7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.PlainTime.from({ hour: 12, minute: 34 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-constrain.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-constrain.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9048d1b7a0beec9d538b9f87dabaeb2329891207 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-constrain.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: constrain value for overflow option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 26 }, { overflow: "constrain" }), -+ 23, 0, 0, 0, 0, 0); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 22 }, { overflow: "constrain" }), -+ 22, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-invalid-string.js -index 856d071453e57e3212091f990c68069ed0640a20..dcefde8a682cc7cc1fcdb1f063c5035cdb302f7a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-invalid-string.js -@@ -19,8 +19,14 @@ const validValues = [ - { hour: 12 }, - "12:00", - ]; --validValues.forEach((value) => { -- ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"].forEach((overflow) => { -- assert.throws(RangeError, () => Temporal.PlainTime.from(value, { overflow })); -- }); --}); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const value of validValues) { -+ for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainTime.from(value, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-reject.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-reject.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7f76deab506a7f4b66f33716f2bd7a3b359332d0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/overflow-reject.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.from -+description: reject value for overflow option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+assert.throws(RangeError, () => Temporal.PlainTime.from({ hour: 26 }, { overflow: "reject" })); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from({ hour: 22 }, { overflow: "reject" }), -+ 22, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/year-zero.js -index 671e5c5c68a98e753d233c2a56b1c8da6d7f1f32..39b849c69b819484fda06218700e0c0a5ff88d28 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/from/year-zero.js -@@ -8,13 +8,15 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; -+ - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { Temporal.PlainTime.from(arg); }, -+ () => Temporal.PlainTime.from(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/negative-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/negative-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4959e4323df73303a23b046f3afb566a4743deef ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/negative-zero.js -@@ -0,0 +1,12 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime -+description: Negative zero arguments are treated as zero. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(-0, -0, -0, -0, -0, -0); -+TemporalHelpers.assertPlainTime(plainTime, 0, 0, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0a4e1070f351b82919845bb2e8896fbaf9602c73 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-duration.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.add -+description: Duration arguments are supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+const duration = Temporal.Duration.from("PT16H"); -+TemporalHelpers.assertPlainTime(plainTime.add(duration), -+ 7, 23, 30, 123, 456, 789); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-higher-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-higher-units.js -new file mode 100644 -index 0000000000000000000000000000000000000000..af4913e217dafa0151acb5bf9d44fe62e6263b95 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-higher-units.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.add -+description: Higher units are ignored. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+const values = [ -+ new Temporal.Duration(0, 0, 0, 1), -+ new Temporal.Duration(0, 0, 1), -+ new Temporal.Duration(0, 1), -+ new Temporal.Duration(1), -+ { days: 1 }, -+ { weeks: 1 }, -+ { months: 1 }, -+ { years: 1 }, -+ "P1D", -+ "P1W", -+ "P1M", -+ "P1Y", -+]; -+for (const value of values) { -+ TemporalHelpers.assertPlainTime(plainTime.add(value), -+ 15, 23, 30, 123, 456, 789); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4f0bdaa2b5f511a97b11a4944113818cd5ea6f6c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/add/argument-object.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.add -+description: Plain object arguments are supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ hours: 16 }), -+ 7, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ minutes: 45 }), -+ 16, 8, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ seconds: 800 }), -+ 15, 36, 50, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ milliseconds: 800 }), -+ 15, 23, 30, 923, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ microseconds: 800 }), -+ 15, 23, 30, 124, 256, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ nanoseconds: 300 }), -+ 15, 23, 30, 123, 457, 89); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("07:23:30.123456789").add({ hours: -16 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("16:08:30.123456789").add({ minutes: -45 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:36:50.123456789").add({ seconds: -800 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:23:30.923456789").add({ milliseconds: -800 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:23:30.124256789").add({ microseconds: -800 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:23:30.123457089").add({ nanoseconds: -300 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.add({ minute: 1, hours: 1 }), -+ 16, 23, 30, 123, 456, 789); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4894d5934e4fad727f6431ad95e548995e235c9c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.equals -+description: A number is converted to a string, then to Temporal.PlainTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const arg = 123456.987654321; -+ -+const result = instance.equals(arg); -+assert.sameValue(result, true, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js -index ca750d2eb7977f70241f054c5ca81fa7b7a734d9..b5efb776c3d3836f96698ace715b4ca3dbe30b71 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.equals(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js -index d01e485613ad5bfaff6c65dac6fc11baa251751a..70bb470a9e5400fc47357673ff092019ab37e208 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/argument-wrong-type.js -@@ -1,20 +1,36 @@ --// Copyright (C) 2020 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plaintime.prototype.equals --description: Appropriate error thrown when argument cannot be converted to a valid string --features: [Symbol, Temporal] -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] - ---*/ - --const instance = Temporal.PlainTime.from({ minute: 34, second: 56, millisecond: 987, microsecond: 654, nanosecond: 321 }); -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); - --assert.throws(RangeError, () => instance.equals(undefined), "undefined"); --assert.throws(RangeError, () => instance.equals(null), "null"); --assert.throws(RangeError, () => instance.equals(true), "true"); --assert.throws(RangeError, () => instance.equals(""), "empty string"); --assert.throws(TypeError, () => instance.equals(Symbol()), "symbol"); --assert.throws(RangeError, () => instance.equals(1), "1"); --assert.throws(TypeError, () => instance.equals({}), "plain object"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainTime), "Temporal.PlainTime"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainTime.prototype), "Temporal.PlainTime.prototype"); -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..066a2cafec658a5192781fa5b6ba12efdd4df2fc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.equals -+description: Leap second is a valid ISO string for PlainTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(23, 59, 59); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js -index 1b4edfa6a293d0b810e43e492f386f9971b93bce..d342498899207ab737df0eecc5a3b91a6d96e670 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/plaintime-propertybag-no-time-units.js -@@ -10,7 +10,7 @@ features: [Temporal] - const instance = new Temporal.PlainTime(0, 30, 0, 0, 0, 0); - - const props = {}; --assert.throws(TypeError, () => instance.equals(props), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.equals(props), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.equals(props); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js -index c58365d4b0574edba237e88756d2d0cc140e11f8..56ea599d8a2096dfcb51afca8e5ca8f908ddec1b 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/equals/year-zero.js -@@ -8,8 +8,9 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2edf4591a14a5fe4476387e2df07298a42896185 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/options-wrong-type.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: TypeError thrown when options argument is missing or a non-string primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ undefined, -+ null, -+ true, -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainTime(); -+assert.throws(TypeError, () => instance.round(), "TypeError on missing options argument"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.round(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/rounding-cross-midnight.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/rounding-cross-midnight.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9b281783144ae5833832f59acac5304044a99ce3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/rounding-cross-midnight.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Rounding can cross midnight -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = Temporal.PlainTime.from("23:59:59.999999999"); -+for (const smallestUnit of ["hour", "minute", "second", "millisecond", "microsecond"]) { -+ TemporalHelpers.assertPlainTime(plainTime.round({ smallestUnit }), 0, 0, 0, 0, 0, 0); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-hours.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-hours.js -new file mode 100644 -index 0000000000000000000000000000000000000000..666fd223d0b57e479408c5e9454fceabf96f80d1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-hours.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(3, 34, 56, 987, 654, 321); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 1 }), -+ 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 2 }), -+ 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 3 }), -+ 3, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 4 }), -+ 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 6 }), -+ 6, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hours", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 0, 0, "hours"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..185875418fb703e2e929d03f98df236e84b150ae ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-invalid.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Tests roundingIncrement restrictions. -+features: [Temporal] -+---*/ -+ -+const plainTime = Temporal.PlainTime.from("08:22:36.123456789"); -+ -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "hours", roundingIncrement: 11 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "minutes", roundingIncrement: 29 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "seconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "hours", roundingIncrement: 24 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "minutes", roundingIncrement: 60 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "seconds", roundingIncrement: 60 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 1000 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 1000 })); -+assert.throws(RangeError, () => plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 1000 })); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-microseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-microseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6eb685312a6dbb5664a5d49bdce30a903ef1db19 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-microseconds.js -@@ -0,0 +1,57 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(3, 34, 56, 987, 654, 321); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 1 }), -+ 3, 34, 56, 987, 654, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 2 }), -+ 3, 34, 56, 987, 654, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 4 }), -+ 3, 34, 56, 987, 656, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 5 }), -+ 3, 34, 56, 987, 655, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 8 }), -+ 3, 34, 56, 987, 656, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 10 }), -+ 3, 34, 56, 987, 650, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 20 }), -+ 3, 34, 56, 987, 660, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 25 }), -+ 3, 34, 56, 987, 650, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 40 }), -+ 3, 34, 56, 987, 640, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 50 }), -+ 3, 34, 56, 987, 650, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 100 }), -+ 3, 34, 56, 987, 700, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 125 }), -+ 3, 34, 56, 987, 625, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 200 }), -+ 3, 34, 56, 987, 600, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 250 }), -+ 3, 34, 56, 987, 750, 0, "microseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microseconds", roundingIncrement: 500 }), -+ 3, 34, 56, 987, 500, 0, "microseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-milliseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-milliseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a33615f4d1b934d8035f10f0f638df0b8e1cba1b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-milliseconds.js -@@ -0,0 +1,57 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(3, 34, 56, 987, 654, 321); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 1 }), -+ 3, 34, 56, 988, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 2 }), -+ 3, 34, 56, 988, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 4 }), -+ 3, 34, 56, 988, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 5 }), -+ 3, 34, 56, 990, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 8 }), -+ 3, 34, 56, 984, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 10 }), -+ 3, 34, 56, 990, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 20 }), -+ 3, 34, 56, 980, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 25 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 40 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 50 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 100 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 125 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 200 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 250 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "milliseconds", roundingIncrement: 500 }), -+ 3, 34, 57, 0, 0, 0, "milliseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-minutes.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-minutes.js -new file mode 100644 -index 0000000000000000000000000000000000000000..297407eb17459b1475287f12810bcef508e6d0c1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-minutes.js -@@ -0,0 +1,45 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(3, 34, 56, 987, 654, 321); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 1 }), -+ 3, 35, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 2 }), -+ 3, 34, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 3 }), -+ 3, 36, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 4 }), -+ 3, 36, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 5 }), -+ 3, 35, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 6 }), -+ 3, 36, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 10 }), -+ 3, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 12 }), -+ 3, 36, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 15 }), -+ 3, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 20 }), -+ 3, 40, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minutes", roundingIncrement: 30 }), -+ 3, 30, 0, 0, 0, 0, "minutes"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0992ce73a2dc49c6892fc0644e57bd03d320dac4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js -@@ -0,0 +1,57 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(3, 34, 56, 987, 654, 321); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 1 }), -+ 3, 34, 56, 987, 654, 321, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 2 }), -+ 3, 34, 56, 987, 654, 322, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 4 }), -+ 3, 34, 56, 987, 654, 320, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 5 }), -+ 3, 34, 56, 987, 654, 320, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 8 }), -+ 3, 34, 56, 987, 654, 320, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 10 }), -+ 3, 34, 56, 987, 654, 320, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 20 }), -+ 3, 34, 56, 987, 654, 320, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 25 }), -+ 3, 34, 56, 987, 654, 325, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 40 }), -+ 3, 34, 56, 987, 654, 320, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 50 }), -+ 3, 34, 56, 987, 654, 300, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 100 }), -+ 3, 34, 56, 987, 654, 300, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 125 }), -+ 3, 34, 56, 987, 654, 375, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 200 }), -+ 3, 34, 56, 987, 654, 400, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 250 }), -+ 3, 34, 56, 987, 654, 250, "nanoseconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanoseconds", roundingIncrement: 500 }), -+ 3, 34, 56, 987, 654, 500, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-seconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-seconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..11bbb6a7a64eabd65d1f19b10e268e4b9e9e48ea ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-seconds.js -@@ -0,0 +1,45 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(3, 34, 56, 987, 654, 321); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 1 }), -+ 3, 34, 57, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 2 }), -+ 3, 34, 56, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 3 }), -+ 3, 34, 57, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 4 }), -+ 3, 34, 56, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 5 }), -+ 3, 34, 55, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 6 }), -+ 3, 34, 54, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 10 }), -+ 3, 35, 0, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 12 }), -+ 3, 35, 0, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 15 }), -+ 3, 35, 0, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 20 }), -+ 3, 35, 0, 0, 0, 0, "seconds"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "seconds", roundingIncrement: 30 }), -+ 3, 35, 0, 0, 0, 0, "seconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5628f4e8582557f98a3940024aea70fe8fa340ce ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-ceil.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Tests calculations with roundingMode "ceil". -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const plainTime = Temporal.PlainTime.from("13:46:23.123456789"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hour", roundingMode: "ceil" }), -+ 14, 0, 0, 0, 0, 0, "hour"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minute", roundingMode: "ceil" }), -+ 13, 47, 0, 0, 0, 0, "minute"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "second", roundingMode: "ceil" }), -+ 13, 46, 24, 0, 0, 0, "second"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "millisecond", roundingMode: "ceil" }), -+ 13, 46, 23, 124, 0, 0, "millisecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microsecond", roundingMode: "ceil" }), -+ 13, 46, 23, 123, 457, 0, "microsecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanosecond", roundingMode: "ceil" }), -+ 13, 46, 23, 123, 456, 789, "nanosecond"); -+ -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..93d2c5603e15a0a65be1ed993b9bb2baf1c0ed9e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-floor.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Tests calculations with roundingMode "floor". -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const plainTime = Temporal.PlainTime.from("13:46:23.123456789"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hour", roundingMode: "floor" }), -+ 13, 0, 0, 0, 0, 0, "hour"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minute", roundingMode: "floor" }), -+ 13, 46, 0, 0, 0, 0, "minute"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "second", roundingMode: "floor" }), -+ 13, 46, 23, 0, 0, 0, "second"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "millisecond", roundingMode: "floor" }), -+ 13, 46, 23, 123, 0, 0, "millisecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microsecond", roundingMode: "floor" }), -+ 13, 46, 23, 123, 456, 0, "microsecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanosecond", roundingMode: "floor" }), -+ 13, 46, 23, 123, 456, 789, "nanosecond"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f6fdd5e554c47aebe4993165bbd3c93262fc8c14 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-halfExpand.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Tests calculations with roundingMode "floor". -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const plainTime = Temporal.PlainTime.from("13:46:23.123456789"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hour", roundingMode: "halfExpand" }), -+ 14, 0, 0, 0, 0, 0, "hour"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minute", roundingMode: "halfExpand" }), -+ 13, 46, 0, 0, 0, 0, "minute"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "second", roundingMode: "halfExpand" }), -+ 13, 46, 23, 0, 0, 0, "second"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "millisecond", roundingMode: "halfExpand" }), -+ 13, 46, 23, 123, 0, 0, "millisecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microsecond", roundingMode: "halfExpand" }), -+ 13, 46, 23, 123, 457, 0, "microsecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanosecond", roundingMode: "halfExpand" }), -+ 13, 46, 23, 123, 456, 789, "nanosecond"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-invalid-string.js -index 200c100d2e841357bd436fd4e886dd21386684b6..ba3fa48a7e02b3dfe24542a6983cbe53caaf1518 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-invalid-string.js -@@ -8,6 +8,6 @@ features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); --for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l"]) { -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { - assert.throws(RangeError, () => time.round({ smallestUnit: "microsecond", roundingMode })); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8975b381f342fbb5db93d5af37eb315658f1cc47 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-trunc.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: Tests calculations with roundingMode "trunc". -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const plainTime = Temporal.PlainTime.from("13:46:23.123456789"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hour", roundingMode: "trunc" }), -+ 13, 0, 0, 0, 0, 0, "hour"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minute", roundingMode: "trunc" }), -+ 13, 46, 0, 0, 0, 0, "minute"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "second", roundingMode: "trunc" }), -+ 13, 46, 23, 0, 0, 0, "second"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "millisecond", roundingMode: "trunc" }), -+ 13, 46, 23, 123, 0, 0, "millisecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microsecond", roundingMode: "trunc" }), -+ 13, 46, 23, 123, 456, 0, "microsecond"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanosecond", roundingMode: "trunc" }), -+ 13, 46, 23, 123, 456, 789, "nanosecond"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-undefined.js -index 9e02425c01eb84317a07ead1ee8d3586c381741e..bc3ef4131b3c27454428eeda11e893d13bcac097 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingmode-undefined.js -@@ -1,26 +1,53 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plaintime.prototype.round --description: Fallback value for roundingMode option --includes: [temporalHelpers.js] -+description: Tests calculations with roundingMode undefined. - features: [Temporal] -+includes: [temporalHelpers.js] - ---*/ - --const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); -+const plainTime = Temporal.PlainTime.from("13:46:23.123456789"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hour", roundingMode: undefined }), -+ 14, 0, 0, 0, 0, 0, "hour"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "hour" }), -+ 14, 0, 0, 0, 0, 0, "hour"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minute", roundingMode: undefined }), -+ 13, 46, 0, 0, 0, 0, "minute"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "minute" }), -+ 13, 46, 0, 0, 0, 0, "minute"); -+ -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "second", roundingMode: undefined }), -+ 13, 46, 23, 0, 0, 0, "second"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "second" }), -+ 13, 46, 23, 0, 0, 0, "second"); - --const explicit1 = time.round({ smallestUnit: "microsecond", roundingMode: undefined }); --TemporalHelpers.assertPlainTime(explicit1, 12, 34, 56, 123, 988, 0, "default roundingMode is halfExpand"); --const implicit1 = time.round({ smallestUnit: "microsecond" }); --TemporalHelpers.assertPlainTime(implicit1, 12, 34, 56, 123, 988, 0, "default roundingMode is halfExpand"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "millisecond", roundingMode: undefined }), -+ 13, 46, 23, 123, 0, 0, "millisecond"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "millisecond" }), -+ 13, 46, 23, 123, 0, 0, "millisecond"); - --const explicit2 = time.round({ smallestUnit: "millisecond", roundingMode: undefined }); --TemporalHelpers.assertPlainTime(explicit2, 12, 34, 56, 124, 0, 0, "default roundingMode is halfExpand"); --const implicit2 = time.round({ smallestUnit: "millisecond" }); --TemporalHelpers.assertPlainTime(implicit2, 12, 34, 56, 124, 0, 0, "default roundingMode is halfExpand"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microsecond", roundingMode: undefined }), -+ 13, 46, 23, 123, 457, 0, "microsecond"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "microsecond" }), -+ 13, 46, 23, 123, 457, 0, "microsecond"); - --const explicit3 = time.round({ smallestUnit: "second", roundingMode: undefined }); --TemporalHelpers.assertPlainTime(explicit3, 12, 34, 56, 0, 0, 0, "default roundingMode is halfExpand"); --const implicit3 = time.round({ smallestUnit: "second" }); --TemporalHelpers.assertPlainTime(implicit3, 12, 34, 56, 0, 0, 0, "default roundingMode is halfExpand"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanosecond", roundingMode: undefined }), -+ 13, 46, 23, 123, 456, 789, "nanosecond"); -+TemporalHelpers.assertPlainTime( -+ plainTime.round({ smallestUnit: "nanosecond" }), -+ 13, 46, 23, 123, 456, 789, "nanosecond"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundto-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundto-invalid-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..53a665f9518399399c8692cf0725f4b663805fa2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/roundto-invalid-string.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: RangeError thrown when smallestUnit option not one of the allowed string values -+features: [Temporal] -+---*/ -+ -+const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => time.round(smallestUnit), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-disallowed-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-disallowed-units.js -deleted file mode 100644 -index 1a9da4e74ac6987cb710ac3f8d9a3e793442e7fc..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-disallowed-units.js -+++ /dev/null -@@ -1,34 +0,0 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-temporal.plaintime.prototype.round --description: Specifically disallowed units for the smallestUnit option --features: [Temporal, arrow-function] -----*/ -- --const instance = new Temporal.PlainTime(12, 34, 56, 789, 999, 999); --const invalidUnits = [ -- "era", -- "eras", -- "year", -- "month", -- "week", -- "years", -- "months", -- "weeks", -- "day", -- "days", --]; --invalidUnits.forEach((smallestUnit) => { -- assert.throws( -- RangeError, -- () => instance.round({ smallestUnit }), -- `{ smallestUnit: "${smallestUnit}" } should not be allowed as an argument to round` -- ); -- assert.throws( -- RangeError, -- () => instance.round(smallestUnit), -- `"${smallestUnit}" should not be allowed as an argument to round` -- ); --}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-invalid-string.js -index 71a8d55f25d4e7dd31e34eaa371842afd5374652..917a5a409d29eba50c51ec302bab079e29a03499 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-invalid-string.js -@@ -8,4 +8,28 @@ features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); --assert.throws(RangeError, () => time.round({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => time.round({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-missing.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-missing.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c892b73361f359f965c055d5b655161d9e86a3fc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/round/smallestunit-missing.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.round -+description: RangeError thrown when smallestUnit option is missing -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); -+assert.throws(TypeError, () => plainTime.round()); -+assert.throws(RangeError, () => plainTime.round({})); -+assert.throws(RangeError, () => plainTime.round({ roundingIncrement: 1, roundingMode: "ceil" })); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-cast.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-cast.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2303a0bdb4879b082a21c1686ffa8e9ac675fc1c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-cast.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Casts the argument -+includes: [temporalHelpers.js] -+features: [Temporal, arrow-function] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertDuration(plainTime.since("16:34"), -+ 0, 0, 0, 0, /* hours = */ -1, /* minutes = */ -10, /* seconds = */ -29, -876, -543, -211, "string"); -+TemporalHelpers.assertDuration(plainTime.since({ hour: 16, minute: 34 }), -+ 0, 0, 0, 0, /* hours = */ -1, /* minutes = */ -10, /* seconds = */ -29, -876, -543, -211, "object"); -+ -+assert.throws(TypeError, () => plainTime.since({}), "empty"); -+assert.throws(TypeError, () => plainTime.since({ minutes: 30 }), "only plural 'minutes'"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3ca4003a0b21fe8c55ad16582905682c6e2af4eb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-number.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: A number is converted to a string, then to Temporal.PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const arg = 123456.987654321; -+ -+const result = instance.since(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js -index 5318a2177bf250e569f2de21d6bb2c61b1c8cb42..2e9c362004a3b4f838ac9ae472636a4a94496ad2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.since(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ee7142c89d235b94cd2152c2c85f70cf29b4d918 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..06a55ca9be2483bbfdfdc7d1622a65ee7c5eb22b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/basic.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Basic usage -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const one = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+const two = new Temporal.PlainTime(14, 23, 30, 123, 456, 789); -+const three = new Temporal.PlainTime(13, 30, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration(one.since(two), -+ 0, 0, 0, 0, /* hours = */ 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(two.since(one), -+ 0, 0, 0, 0, /* hours = */ -1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(one.since(three), -+ 0, 0, 0, 0, /* hours = */ 1, 53, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(three.since(one), -+ 0, 0, 0, 0, /* hours = */ -1, -53, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit-invalid-string.js -index f74105aba5115bb8117f8989e7060cb44b57126a..0faa16156a0449a5379f36515e9f0a5920df4e01 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainTime(13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit.js -index 1345c64361eae653d8427d53cb3bd58af918f4f6..799051aec8bd2ae1e5513b3c61174d6420c31b9c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/largestunit.js -@@ -3,13 +3,14 @@ - - /*--- - esid: sec-temporal.plaintime.prototype.since --description: Specify behavior of PlainTime.since when largest specified unit is years or months. -+description: PlainTime.since with various largestUnit values. - includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - const fourFortyEight = new Temporal.PlainTime(4, 48, 55); - const elevenFiftyNine = new Temporal.PlainTime(11, 59, 58); - TemporalHelpers.assertDuration(elevenFiftyNine.since(fourFortyEight), 0, 0, 0, 0, 7, 11, 3, 0, 0, 0, 'does not include higher units than necessary (largest unit unspecified)'); -+TemporalHelpers.assertDuration(elevenFiftyNine.since(fourFortyEight, { largestUnit: 'auto' }), 0, 0, 0, 0, 7, 11, 3, 0, 0, 0, 'does not include higher units than necessary (largest unit is auto)'); - TemporalHelpers.assertDuration(elevenFiftyNine.since(fourFortyEight, { largestUnit: 'hours' }), 0, 0, 0, 0, 7, 11, 3, 0, 0, 0, 'does not include higher units than necessary (largest unit is hours)'); - TemporalHelpers.assertDuration(elevenFiftyNine.since(fourFortyEight, { largestUnit: 'minutes' }), 0, 0, 0, 0, 0, 431, 3, 0, 0, 0, 'does not include higher units than necessary (largest unit is minutes)'); - TemporalHelpers.assertDuration(elevenFiftyNine.since(fourFortyEight, { largestUnit: 'seconds' }), 0, 0, 0, 0, 0, 0, 25863, 0, 0, 0, 'does not include higher units than necessary (largest unit is seconds)'); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7457e58233eb6f524d2e76e8ad4d2793e2ebdd37 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Leap second is a valid ISO string for PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(23, 59, 59); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f48b7c373bc1c12a5422e8f6592405a4473ed5cc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainTime(); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.since(new Temporal.PlainTime(12, 34, 56), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js -index 51be13a45de81aaadbb0b7efc03ee7a366a859b9..5a725a16119ddae0375c3555a529a77e3a9521d6 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/plaintime-propertybag-no-time-units.js -@@ -11,7 +11,7 @@ features: [Temporal] - const instance = new Temporal.PlainTime(1, 0, 0, 0, 0, 1); - - const props = {}; --assert.throws(TypeError, () => instance.since(props), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.since(props), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.since(props); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/result-sub-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/result-sub-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3f2742fa316487521f5bd1fb3f8242c8fb20c186 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/result-sub-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Supports sub-second precision -+includes: [temporalHelpers.js] -+features: [Temporal, arrow-function] -+---*/ -+ -+const time1 = Temporal.PlainTime.from("10:23:15"); -+const time2 = Temporal.PlainTime.from("17:15:57.250250250"); -+ -+TemporalHelpers.assertDuration(time2.since(time1, { largestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, /* milliseconds = */ 24762250, 250, 250, "milliseconds"); -+ -+TemporalHelpers.assertDuration(time2.since(time1, { largestUnit: "microseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, /* milliseconds = */ 0, 24762250250, 250, "microseconds"); -+ -+TemporalHelpers.assertDuration(time2.since(time1, { largestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, /* milliseconds = */ 0, 0, 24762250250250, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-hours.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-hours.js -new file mode 100644 -index 0000000000000000000000000000000000000000..dc57609720cffeb0fb6daa50366d15ced1157c43 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-hours.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 3 }), -+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 6 }), -+ 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "hours"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1daec9a1cae4882ffb200ea2ce604246bc670c9d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-invalid.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Tests roundingIncrement restrictions. -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "hours", roundingIncrement: 11 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 29 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "hours", roundingIncrement: 24 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 60 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 60 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 1000 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 1000 })); -+assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 1000 })); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-microseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-microseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ded0e0d90887b49dc7ff255f3135cd15c2655f1a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-microseconds.js -@@ -0,0 +1,58 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 196, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 195, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 192, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 190, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 180, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 25 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 175, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 40 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 160, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 50 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 150, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 100 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 100, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 125 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 125, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 200 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 250 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingIncrement: 500 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "microseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-milliseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-milliseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4a6c867dde8ceb711d7bbc5c518d6fc2137b9b94 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-milliseconds.js -@@ -0,0 +1,58 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 23, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 23, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 10, 35, 23, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 23, 860, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 23, 860, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 25 }), -+ 0, 0, 0, 0, 10, 35, 23, 850, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 40 }), -+ 0, 0, 0, 0, 10, 35, 23, 840, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 50 }), -+ 0, 0, 0, 0, 10, 35, 23, 850, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 100 }), -+ 0, 0, 0, 0, 10, 35, 23, 800, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 125 }), -+ 0, 0, 0, 0, 10, 35, 23, 750, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 200 }), -+ 0, 0, 0, 0, 10, 35, 23, 800, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 250 }), -+ 0, 0, 0, 0, 10, 35, 23, 750, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingIncrement: 500 }), -+ 0, 0, 0, 0, 10, 35, 23, 500, 0, 0, "milliseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-minutes.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-minutes.js -new file mode 100644 -index 0000000000000000000000000000000000000000..05a62d426940c820358e39e65e0769ae1d1953cf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-minutes.js -@@ -0,0 +1,46 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 34, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 3 }), -+ 0, 0, 0, 0, 10, 33, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 32, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 6 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 10, 24, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 15 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 20, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingIncrement: 30 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-nanoseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-nanoseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cc43a8e3e9e894a139f2dd26d18b279f11388ffd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-nanoseconds.js -@@ -0,0 +1,58 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 533, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 530, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 528, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 530, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 520, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 25 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 525, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 40 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 520, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 50 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 100 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 125 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 200 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 400, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 250 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingIncrement: 500 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-seconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-seconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ac24ee8ce8574416e49be0a5f1c79fab76e6bc5f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingincrement-seconds.js -@@ -0,0 +1,46 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 22, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 3 }), -+ 0, 0, 0, 0, 10, 35, 21, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 6 }), -+ 0, 0, 0, 0, 10, 35, 18, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 10, 35, 12, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 15 }), -+ 0, 0, 0, 0, 10, 35, 15, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingIncrement: 30 }), -+ 0, 0, 0, 0, 10, 35, 0, 0, 0, 0, "seconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6d83292fbc09805bf33572e451409c16fcd4558d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-ceil.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Tests calculations with roundingMode "ceil". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "hours", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 18, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "minutes", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 5, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "seconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 4, 865, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "milliseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "microseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "nanoseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..65ffaae11044b7a69fe1d340f32df4cf423955fb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-floor.js -@@ -0,0 +1,55 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Tests calculations with roundingMode "floor". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "hours", roundingMode: "floor" }), -+ 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "minutes", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -18, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "seconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -5, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "milliseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -4, -865, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "microseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -198, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "nanoseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -+ -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..22ad25414dbcc76a1449eaf98135a32921d0cf91 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-halfExpand.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Tests calculations with roundingMode "halfExpand". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "hours", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "minutes", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 5, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "seconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -5, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "milliseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "microseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -198, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "nanoseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-invalid-string.js -index 392c8565bef2b43b9b439b6b23a950f9cfa621a6..623d94637141354d18946d13b21f20d3a22478b1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-invalid-string.js -@@ -9,7 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainTime(13, 35, 57, 123, 987, 500); -- --for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l"]) { -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { - assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode })); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..521dead75793973090705f031f5b54319e7548ec ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-trunc.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.since -+description: Tests calculations with roundingMode "trunc". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "hours", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "minutes", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "seconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "milliseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "microseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "nanoseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-undefined.js -index 91eaf058416c0f75eef472fdf440c0690b951395..e16c0dcd5af058615572645e9e66ec65bff2a8f9 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/roundingmode-undefined.js -@@ -8,20 +8,83 @@ includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); --const later = new Temporal.PlainTime(13, 35, 57, 123, 987, 500); -- --const explicit1 = later.since(earlier, { smallestUnit: "microsecond", roundingMode: undefined }); --TemporalHelpers.assertDuration(explicit1, 0, 0, 0, 0, 1, 1, 1, 123, 987, 0, "default roundingMode is trunc"); --const implicit1 = later.since(earlier, { smallestUnit: "microsecond" }); --TemporalHelpers.assertDuration(implicit1, 0, 0, 0, 0, 1, 1, 1, 123, 987, 0, "default roundingMode is trunc"); -- --const explicit2 = later.since(earlier, { smallestUnit: "millisecond", roundingMode: undefined }); --TemporalHelpers.assertDuration(explicit2, 0, 0, 0, 0, 1, 1, 1, 123, 0, 0, "default roundingMode is trunc"); --const implicit2 = later.since(earlier, { smallestUnit: "millisecond" }); --TemporalHelpers.assertDuration(implicit2, 0, 0, 0, 0, 1, 1, 1, 123, 0, 0, "default roundingMode is trunc"); -- --const explicit3 = later.since(earlier, { smallestUnit: "second", roundingMode: undefined }); --TemporalHelpers.assertDuration(explicit3, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, "default roundingMode is trunc"); --const implicit3 = later.since(earlier, { smallestUnit: "second" }); --TemporalHelpers.assertDuration(implicit3, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, "default roundingMode is trunc"); -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "hours" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "hours", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "hours" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "minutes" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "minutes", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "minutes" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "seconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "seconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "seconds" }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "milliseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "milliseconds" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "microseconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "microseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "microseconds" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.since(earlier, { smallestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "nanoseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.since(later, { smallestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-invalid-string.js -index de440191cf2276b0c19e0e34f065ad5ec3ceb922..b375626bf591ab475baee8996c08304fa19bf0ca 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/smallestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainTime(13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js -index 1124fe8a7716a6e1cf0b283b7bc271756f0185d6..e2261ea82c34129fb4e61503fd563b7a8adeb285 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/since/year-zero.js -@@ -8,8 +8,9 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-duration.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-duration.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eff64119bc660276ad8d1c8a94958461823a830a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-duration.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.subtract -+description: Duration arguments are supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+const duration = Temporal.Duration.from("PT16H"); -+TemporalHelpers.assertPlainTime(plainTime.subtract(duration), -+ 23, 23, 30, 123, 456, 789); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-higher-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-higher-units.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8e647205735fdcb8b1cb27cb43edb7cb3702de68 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-higher-units.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.subtract -+description: Higher units are ignored. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+const values = [ -+ new Temporal.Duration(0, 0, 0, 1), -+ new Temporal.Duration(0, 0, 1), -+ new Temporal.Duration(0, 1), -+ new Temporal.Duration(1), -+ { days: 1 }, -+ { weeks: 1 }, -+ { months: 1 }, -+ { years: 1 }, -+ "P1D", -+ "P1W", -+ "P1M", -+ "P1Y", -+]; -+for (const value of values) { -+ TemporalHelpers.assertPlainTime(plainTime.subtract(value), -+ 15, 23, 30, 123, 456, 789); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-object.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a981492bdfbaa75c07d446590aae766e70d3dcb8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/subtract/argument-object.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.subtract -+description: Plain object arguments are supported. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ hours: 16 }), -+ 23, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ minutes: 45 }), -+ 14, 38, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ seconds: 45 }), -+ 15, 22, 45, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ milliseconds: 800 }), -+ 15, 23, 29, 323, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ microseconds: 800 }), -+ 15, 23, 30, 122, 656, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ nanoseconds: 800 }), -+ 15, 23, 30, 123, 455, 989); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("23:23:30.123456789").subtract({ hours: -16 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("14:38:30.123456789").subtract({ minutes: -45 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:22:45.123456789").subtract({ seconds: -45 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:23:29.323456789").subtract({ milliseconds: -800 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:23:30.122656789").subtract({ microseconds: -800 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(Temporal.PlainTime.from("15:23:30.123455989").subtract({ nanoseconds: -800 }), -+ 15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertPlainTime(plainTime.subtract({ minute: 1, hours: 1 }), -+ 14, 23, 30, 123, 456, 789); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1742c9a9d3eabd428a7227af63b0e5bb66f497c7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: A number is converted to a string, then to Temporal.PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const arg = 19761118; -+ -+const result = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime(result, 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6e38a93003829437163b07332fac7089a8b29456 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1353b30b991740f31391dbe2431de7d4b8470679 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime(result1, 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime(result2, 1976, 11, "M11", 18, 12, 34, 56, 987, 654, 321, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b74193686c08922d8a50f81f8452dfba6da0bdb6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.toPlainDateTime(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.toPlainDateTime(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.toPlainDateTime(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.toPlainDateTime(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.toPlainDateTime(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..802381765cf153ca09a93668bb8a54e7b2cefe76 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..768f1dba079c834af3cf0617da27e8444a423aa8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.toPlainDateTime(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..888760b50de02408cfdb82a476c5d3dcdc925ec5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toPlainDateTime(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toPlainDateTime(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5a594f23a4288213a11d412729b4d8a85f504f78 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321, calendar); -+instance.toPlainDateTime({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ea1ee612233f54495446928da66263a6b544fbf9 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: Leap second is a valid ISO string for PlainDate -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result1, -+ 2016, 12, "M12", 31, 12, 34, 56, 987, 654, 321, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.toPlainDateTime(arg); -+TemporalHelpers.assertPlainDateTime( -+ result2, -+ 2016, 12, "M12", 31, 12, 34, 56, 987, 654, 321, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fcde863d6451f730b05a8d0192bd1079e1e0236e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/limits.js -@@ -0,0 +1,39 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.toplaindatetime -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const midnight = new Temporal.PlainTime(0, 0); -+const firstNs = new Temporal.PlainTime(0, 0, 0, 0, 0, 1); -+const lastNs = new Temporal.PlainTime(23, 59, 59, 999, 999, 999); -+const min = new Temporal.PlainDate(-271821, 4, 19); -+const max = new Temporal.PlainDate(275760, 9, 13); -+ -+assert.throws( -+ RangeError, -+ () => midnight.toPlainDateTime(min), -+ "Cannot go below representable limit" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ midnight.toPlainDateTime(max), -+ 275760, 9, "M09", 13, 0, 0, 0, 0, 0, 0, -+ "Midnight of maximum representable PlainDate" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ firstNs.toPlainDateTime(min), -+ -271821, 4, "M04", 19, 0, 0, 0, 0, 0, 1, -+ "Computing the minimum (earliest) representable PlainDateTime" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ lastNs.toPlainDateTime(max), -+ 275760, 9, "M09", 13, 23, 59, 59, 999, 999, 999, -+ "Computing the maximum (latest) representable PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js -index 481f20b37afe81cdb646e111f68c665ca9dddb83..e08a6d03057be9e828fd00855d3ec89ec6e44a9c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toPlainDateTime/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.toPlainDateTime(arg); }, -+ () => instance.toPlainDateTime(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js -index 2bff43e90a745720ceb406c776e097731eb1935d..2c90ffaa47a89373c7b92f10eef3297d24898be5 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-auto.js -@@ -7,13 +7,17 @@ description: auto value for fractionalSecondDigits option - features: [Temporal] - ---*/ - -+const zeroSeconds = new Temporal.PlainTime(15, 23); -+const wholeSeconds = new Temporal.PlainTime(15, 23, 30); -+const subSeconds = new Temporal.PlainTime(15, 23, 30, 123, 400); -+ - const tests = [ -- ["15:23", "15:23:00"], -- ["15:23:30", "15:23:30"], -- ["15:23:30.1234", "15:23:30.1234"], -+ [zeroSeconds, "15:23:00"], -+ [wholeSeconds, "15:23:30"], -+ [subSeconds, "15:23:30.1234"], - ]; - --for (const [input, expected] of tests) { -- const plainTime = Temporal.PlainTime.from(input); -- assert.sameValue(plainTime.toString({ fractionalSecondDigits: "auto" }), expected); -+for (const [time, expected] of tests) { -+ assert.sameValue(time.toString(), expected, "default is to emit seconds and drop trailing zeroes"); -+ assert.sameValue(time.toString({ fractionalSecondDigits: "auto" }), expected, "auto is the default"); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-invalid-string.js -index 3d4ab17c4305feaabf4cd05be9114a0ceda96927..1be21d324c768ae99ba56a30099a47bd689478ae 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-invalid-string.js -@@ -10,12 +10,13 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaintime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 987, 650, 0); - --for (const fractionalSecondDigits of ["other string", "AUTO", "not-auto", "autos"]) { -- assert.throws(RangeError, () => time.toString({ fractionalSecondDigits })); -+for (const fractionalSecondDigits of ["other string", "AUTO", "not-auto", "autos", "auto\0"]) { -+ assert.throws(RangeError, () => time.toString({ fractionalSecondDigits }), -+ `"${fractionalSecondDigits}" is not a valid value for fractionalSecondDigits`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-non-integer.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-non-integer.js -index 9b7c5250e0d5ded33c3dfba538cd953f40f998bc..3ca8fed5aa0bb4e667eafceeaeb694e61991cab8 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-non-integer.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-non-integer.js -@@ -10,7 +10,7 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaintime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js -index 5973c534001aedf9c76ffc9f2742bccb59fc8c34..0ea1eb838eac6c859272a6daef3115cf5dc73e1a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-number.js -@@ -7,16 +7,27 @@ description: Number for fractionalSecondDigits option - features: [Temporal] - ---*/ - --const t1 = Temporal.PlainTime.from("15:23"); --const t2 = Temporal.PlainTime.from("15:23:30"); --const t3 = Temporal.PlainTime.from("15:23:30.1234"); --assert.sameValue(t3.toString({ fractionalSecondDigits: 0 }), "15:23:30"); --assert.sameValue(t1.toString({ fractionalSecondDigits: 2 }), "15:23:00.00"); --assert.sameValue(t2.toString({ fractionalSecondDigits: 2 }), "15:23:30.00"); --assert.sameValue(t3.toString({ fractionalSecondDigits: 2 }), "15:23:30.12"); --assert.sameValue(t3.toString({ fractionalSecondDigits: 3 }), "15:23:30.123"); --assert.sameValue(t3.toString({ fractionalSecondDigits: 6 }), "15:23:30.123400"); --assert.sameValue(t1.toString({ fractionalSecondDigits: 7 }), "15:23:00.0000000"); --assert.sameValue(t2.toString({ fractionalSecondDigits: 7 }), "15:23:30.0000000"); --assert.sameValue(t3.toString({ fractionalSecondDigits: 7 }), "15:23:30.1234000"); --assert.sameValue(t3.toString({ fractionalSecondDigits: 9 }), "15:23:30.123400000"); -+const zeroSeconds = new Temporal.PlainTime(15, 23); -+const wholeSeconds = new Temporal.PlainTime(15, 23, 30); -+const subSeconds = new Temporal.PlainTime(15, 23, 30, 123, 400); -+ -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 0 }), "15:23:30", -+ "truncates 4 decimal places to 0"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 2 }), "15:23:00.00", -+ "pads zero seconds to 2 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 2 }), "15:23:30.00", -+ "pads whole seconds to 2 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 2 }), "15:23:30.12", -+ "truncates 4 decimal places to 2"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 3 }), "15:23:30.123", -+ "truncates 4 decimal places to 3"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 6 }), "15:23:30.123400", -+ "pads 4 decimal places to 6"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 7 }), "15:23:00.0000000", -+ "pads zero seconds to 7 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 7 }), "15:23:30.0000000", -+ "pads whole seconds to 7 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 7 }), "15:23:30.1234000", -+ "pads 4 decimal places to 7"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 9 }), "15:23:30.123400000", -+ "pads 4 decimal places to 9"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-out-of-range.js -index 5959dd945913784daec987a09fdce49ea243088d..1d6e899312fe43d4964004f90b1d04229ccdd889 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-out-of-range.js -@@ -10,13 +10,17 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaintime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 987, 650, 0); - --assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: -Infinity })); --assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: -1 })); --assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: 10 })); --assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: Infinity })); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: -Infinity }), -+ "−∞ is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: -1 }), -+ "−1 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: 10 }), -+ "10 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: Infinity }), -+ "∞ is out of range for fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-undefined.js -index 1d9d2dff03817eb5ed3542dd6292b9114efde415..6c33c55f7f4613437aba42bef7835890ef732974 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-undefined.js -@@ -8,29 +8,31 @@ info: | - sec-getoption step 3: - 3. If _value_ is *undefined*, return _fallback_. - sec-getstringornumberoption step 2: -- 2. Let _value_ be ? GetOption(_options_, _property_, *"stringOrNumber"*, *undefined*, _fallback_). -+ 2. Let _value_ be ? GetOption(_options_, _property_, « Number, String », *undefined*, _fallback_). - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.plaintime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - -+const zeroSeconds = new Temporal.PlainTime(15, 23); -+const wholeSeconds = new Temporal.PlainTime(15, 23, 30); -+const subSeconds = new Temporal.PlainTime(15, 23, 30, 123, 400); -+ - const tests = [ -- ["15:23", "15:23:00"], -- ["15:23:30", "15:23:30"], -- ["15:23:30.1234", "15:23:30.1234"], -+ [zeroSeconds, "15:23:00"], -+ [wholeSeconds, "15:23:30"], -+ [subSeconds, "15:23:30.1234"], - ]; - --for (const [input, expected] of tests) { -- const time = Temporal.PlainTime.from(input); -- -+for (const [time, expected] of tests) { - const explicit = time.toString({ fractionalSecondDigits: undefined }); -- assert.sameValue(explicit, expected, "default fractionalSecondDigits is auto"); -+ assert.sameValue(explicit, expected, "default fractionalSecondDigits is auto (property present but undefined)"); - - const implicit = time.toString({}); -- assert.sameValue(implicit, expected, "default fractionalSecondDigits is auto"); -+ assert.sameValue(implicit, expected, "default fractionalSecondDigits is auto (property not present)"); - - const lambda = time.toString(() => {}); -- assert.sameValue(lambda, expected, "default fractionalSecondDigits is auto"); -+ assert.sameValue(lambda, expected, "default fractionalSecondDigits is auto (property not present, function object)"); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-wrong-type.js -index 54440155aa3c27985ce1143e63d10849a889eceb..79fcd2829382f8c6b3adcf052fe46307faa712e1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/fractionalseconddigits-wrong-type.js -@@ -22,4 +22,26 @@ features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 987, 650, 0); --TemporalHelpers.checkFractionalSecondDigitsOptionWrongType(time); -+ -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: null }), -+ "null is not a number and converts to the string 'null' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: true }), -+ "true is not a number and converts to the string 'true' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: false }), -+ "false is not a number and converts to the string 'false' which is not valid for fractionalSecondDigits"); -+assert.throws(TypeError, () => time.toString({ fractionalSecondDigits: Symbol() }), -+ "symbols are not numbers and cannot convert to strings"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: 2n }), -+ "bigints are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => time.toString({ fractionalSecondDigits: {} }), -+ "plain objects are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+ -+const expected = [ -+ "get fractionalSecondDigits.toString", -+ "call fractionalSecondDigits.toString", -+]; -+const actual = []; -+const observer = TemporalHelpers.toPrimitiveObserver(actual, "auto", "fractionalSecondDigits"); -+const result = time.toString({ fractionalSecondDigits: observer }); -+assert.sameValue(result, "12:34:56.98765", "object with toString uses toString return value"); -+assert.compareArray(actual, expected, "object with toString calls toString and not valueOf"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d77abfa038d70cfe717b15fe77990c7b2dfca149 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainTime(); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js -index 4c67d223aaccf3026c02381fb46ecce6a0406ab9..d580f6f5e237419c3e3da7089f7f618c36a6b89d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/rounding-cross-midnight.js -@@ -7,7 +7,7 @@ description: Rounding can cross midnight - features: [Temporal] - ---*/ - --const plainTime = Temporal.PlainTime.from("23:59:59.999999999"); -+const plainTime = new Temporal.PlainTime(23, 59, 59, 999, 999, 999); // one nanosecond before 00:00:00 - for (const roundingMode of ["ceil", "halfExpand"]) { - assert.sameValue(plainTime.toString({ fractionalSecondDigits: 8, roundingMode }), "00:00:00.00000000"); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js -index 4f6552b87be37073cb6dc8b3ddc5161213433c11..97006c66ff63e5966e057e4920642d3f7077d122 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-ceil.js -@@ -10,10 +10,28 @@ features: [Temporal] - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); - - const result1 = time.toString({ smallestUnit: "microsecond", roundingMode: "ceil" }); --assert.sameValue(result1, "12:34:56.123988", "roundingMode is ceil"); -+assert.sameValue(result1, "12:34:56.123988", -+ "roundingMode is ceil (with 6 digits from smallestUnit)"); - --const result2 = time.toString({ smallestUnit: "millisecond", roundingMode: "ceil" }); --assert.sameValue(result2, "12:34:56.124", "roundingMode is ceil"); -+const result2 = time.toString({ fractionalSecondDigits: 6, roundingMode: "ceil" }); -+assert.sameValue(result2, "12:34:56.123988", -+ "roundingMode is ceil (with 6 digits from fractionalSecondDigits)"); - --const result3 = time.toString({ smallestUnit: "second", roundingMode: "ceil" }); --assert.sameValue(result3, "12:34:57", "roundingMode is ceil"); -+const result3 = time.toString({ smallestUnit: "millisecond", roundingMode: "ceil" }); -+assert.sameValue(result3, "12:34:56.124", -+ "roundingMode is ceil (with 3 digits from smallestUnit)"); -+ -+const result4 = time.toString({ fractionalSecondDigits: 3, roundingMode: "ceil" }); -+assert.sameValue(result4, "12:34:56.124", -+ "roundingMode is ceil (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = time.toString({ smallestUnit: "second", roundingMode: "ceil" }); -+assert.sameValue(result5, "12:34:57", -+ "roundingMode is ceil (with 0 digits from smallestUnit)"); -+ -+const result6 = time.toString({ fractionalSecondDigits: 0, roundingMode: "ceil" }); -+assert.sameValue(result6, "12:34:57", -+ "roundingMode is ceil (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = time.toString({ smallestUnit: "minute", roundingMode: "ceil" }); -+assert.sameValue(result7, "12:35", "roundingMode is ceil (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js -index 63b30d3cc5b759baaca9f27bfbf18c3636c27da1..528d8cd0c84267f6b869b3768659f9133dd9c4de 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-floor.js -@@ -10,10 +10,28 @@ features: [Temporal] - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); - - const result1 = time.toString({ smallestUnit: "microsecond", roundingMode: "floor" }); --assert.sameValue(result1, "12:34:56.123987", "roundingMode is floor"); -+assert.sameValue(result1, "12:34:56.123987", -+ "roundingMode is floor (with 6 digits from smallestUnit)"); - --const result2 = time.toString({ smallestUnit: "millisecond", roundingMode: "floor" }); --assert.sameValue(result2, "12:34:56.123", "roundingMode is floor"); -+const result2 = time.toString({ fractionalSecondDigits: 6, roundingMode: "floor" }); -+assert.sameValue(result2, "12:34:56.123987", -+ "roundingMode is floor (with 6 digits from fractionalSecondDigits)"); - --const result3 = time.toString({ smallestUnit: "second", roundingMode: "floor" }); --assert.sameValue(result3, "12:34:56", "roundingMode is floor"); -+const result3 = time.toString({ smallestUnit: "millisecond", roundingMode: "floor" }); -+assert.sameValue(result3, "12:34:56.123", -+ "roundingMode is floor (with 3 digits from smallestUnit)"); -+ -+const result4 = time.toString({ fractionalSecondDigits: 3, roundingMode: "floor" }); -+assert.sameValue(result4, "12:34:56.123", -+ "roundingMode is floor (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = time.toString({ smallestUnit: "second", roundingMode: "floor" }); -+assert.sameValue(result5, "12:34:56", -+ "roundingMode is floor (with 0 digits from smallestUnit)"); -+ -+const result6 = time.toString({ fractionalSecondDigits: 0, roundingMode: "floor" }); -+assert.sameValue(result6, "12:34:56", -+ "roundingMode is floor (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = time.toString({ smallestUnit: "minute", roundingMode: "floor" }); -+assert.sameValue(result7, "12:34", "roundingMode is floor (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js -index cd7b8e4673a8ae6c4710349fad42d7a16b58c020..35a65a866650bf364b0dbc2003dc471a33274934 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-halfExpand.js -@@ -10,10 +10,28 @@ features: [Temporal] - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); - - const result1 = time.toString({ smallestUnit: "microsecond", roundingMode: "halfExpand" }); --assert.sameValue(result1, "12:34:56.123988", "roundingMode is halfExpand"); -+assert.sameValue(result1, "12:34:56.123988", -+ "roundingMode is halfExpand (with 6 digits from smallestUnit)"); - --const result2 = time.toString({ smallestUnit: "millisecond", roundingMode: "halfExpand" }); --assert.sameValue(result2, "12:34:56.124", "roundingMode is halfExpand"); -+const result2 = time.toString({ fractionalSecondDigits: 6, roundingMode: "halfExpand" }); -+assert.sameValue(result2, "12:34:56.123988", -+ "roundingMode is halfExpand (with 6 digits from fractionalSecondDigits)"); - --const result3 = time.toString({ smallestUnit: "second", roundingMode: "halfExpand" }); --assert.sameValue(result3, "12:34:56", "roundingMode is halfExpand"); -+const result3 = time.toString({ smallestUnit: "millisecond", roundingMode: "halfExpand" }); -+assert.sameValue(result3, "12:34:56.124", -+ "roundingMode is halfExpand (with 3 digits from smallestUnit)"); -+ -+const result4 = time.toString({ fractionalSecondDigits: 3, roundingMode: "halfExpand" }); -+assert.sameValue(result4, "12:34:56.124", -+ "roundingMode is halfExpand (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = time.toString({ smallestUnit: "second", roundingMode: "halfExpand" }); -+assert.sameValue(result5, "12:34:56", -+ "roundingMode is halfExpand (with 0 digits from smallestUnit)"); -+ -+const result6 = time.toString({ fractionalSecondDigits: 0, roundingMode: "halfExpand" }); -+assert.sameValue(result6, "12:34:56", -+ "roundingMode is halfExpand (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = time.toString({ smallestUnit: "minute", roundingMode: "halfExpand" }); -+assert.sameValue(result7, "12:35", "roundingMode is halfExpand (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-invalid-string.js -index 529541f2ad9330a42f412247c911bbf8418067dc..c66d624740cbbfd1be96475a0b5afdf7e85cc1f0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-invalid-string.js -@@ -8,6 +8,6 @@ features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); --for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l"]) { -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { - assert.throws(RangeError, () => time.toString({ smallestUnit: "microsecond", roundingMode })); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js -index e25101caf420ce4ad10da109e2cefb5e53665289..d3496b266bd15c9e3eb4e395b4c6dfb1f651267a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/roundingmode-trunc.js -@@ -10,10 +10,28 @@ features: [Temporal] - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); - - const result1 = time.toString({ smallestUnit: "microsecond", roundingMode: "trunc" }); --assert.sameValue(result1, "12:34:56.123987", "roundingMode is trunc"); -+assert.sameValue(result1, "12:34:56.123987", -+ "roundingMode is trunc (with 6 digits from smallestUnit)"); - --const result2 = time.toString({ smallestUnit: "millisecond", roundingMode: "trunc" }); --assert.sameValue(result2, "12:34:56.123", "roundingMode is trunc"); -+const result2 = time.toString({ fractionalSecondDigits: 6, roundingMode: "trunc" }); -+assert.sameValue(result2, "12:34:56.123987", -+ "roundingMode is trunc (with 6 digits from fractionalSecondDigits)"); - --const result3 = time.toString({ smallestUnit: "second", roundingMode: "trunc" }); --assert.sameValue(result3, "12:34:56", "roundingMode is trunc"); -+const result3 = time.toString({ smallestUnit: "millisecond", roundingMode: "trunc" }); -+assert.sameValue(result3, "12:34:56.123", -+ "roundingMode is trunc (with 3 digits from smallestUnit)"); -+ -+const result4 = time.toString({ fractionalSecondDigits: 3, roundingMode: "trunc" }); -+assert.sameValue(result4, "12:34:56.123", -+ "roundingMode is trunc (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = time.toString({ smallestUnit: "second", roundingMode: "trunc" }); -+assert.sameValue(result5, "12:34:56", -+ "roundingMode is trunc (with 0 digits from smallestUnit)"); -+ -+const result6 = time.toString({ fractionalSecondDigits: 0, roundingMode: "trunc" }); -+assert.sameValue(result6, "12:34:56", -+ "roundingMode is trunc (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = time.toString({ smallestUnit: "minute", roundingMode: "trunc" }); -+assert.sameValue(result7, "12:34", "roundingMode is trunc (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js -index 06ab3baac63f9ef9e349a40e8171f8c916209dd4..318041efa069db7fb3acaa8c55b4f367949a38fb 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-fractionalseconddigits.js -@@ -21,11 +21,10 @@ for (const [smallestUnit, expected] of tests) { - smallestUnit, - get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } - }); -- assert.sameValue(string, expected, smallestUnit); -+ assert.sameValue(string, expected, `smallestUnit: "${smallestUnit}" overrides fractionalSecondDigits`); - } - - assert.throws(RangeError, () => time.toString({ - smallestUnit: "hour", - get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } --})); -- -+}), "hour is an invalid smallestUnit but still overrides fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-invalid-string.js -index d5ea0a7b3e7627f2ef800085ec62237e1acd5ccb..d093928a48936a8eee4f199505d78ba69c64f0cf 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-invalid-string.js -@@ -8,6 +8,30 @@ features: [Temporal] - ---*/ - - const time = new Temporal.PlainTime(12, 34, 56, 123, 987, 500); --for (const smallestUnit of ["era", "year", "month", "day", "hour", "nonsense", "other string", "m\u0131nute", "SECOND"]) { -- assert.throws(RangeError, () => time.toString({ smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "hour", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "hours", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => time.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-valid-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-valid-units.js -index e2b4c71dbd23587ffbba682adcb4efd200c769dd..bb942179e2cfdfbd4a1a154160d08c4f007db7bd 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-valid-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toString/smallestunit-valid-units.js -@@ -7,21 +7,41 @@ description: Valid units for the smallestUnit option - features: [Temporal] - ---*/ - --const time = new Temporal.PlainTime(12, 34, 56, 789, 999, 999); --assert.sameValue(time.toString({ smallestUnit: "minute" }), "12:34"); --assert.sameValue(time.toString({ smallestUnit: "second" }), "12:34:56"); --assert.sameValue(time.toString({ smallestUnit: "millisecond" }), "12:34:56.789"); --assert.sameValue(time.toString({ smallestUnit: "microsecond" }), "12:34:56.789999"); --assert.sameValue(time.toString({ smallestUnit: "nanosecond" }), "12:34:56.789999999"); -+const time = new Temporal.PlainTime(12, 34, 56, 123, 456, 789); - --const time2 = new Temporal.PlainTime(12, 34); --assert.sameValue(time2.toString({ smallestUnit: "minute" }), "12:34"); --assert.sameValue(time2.toString({ smallestUnit: "second" }), "12:34:00"); --assert.sameValue(time2.toString({ smallestUnit: "millisecond" }), "12:34:00.000"); --assert.sameValue(time2.toString({ smallestUnit: "microsecond" }), "12:34:00.000000"); --assert.sameValue(time2.toString({ smallestUnit: "nanosecond" }), "12:34:00.000000000"); -+function test(instance, expectations, description) { -+ for (const [smallestUnit, expectedResult] of expectations) { -+ assert.sameValue(instance.toString({ smallestUnit }), expectedResult, -+ `${description} with smallestUnit "${smallestUnit}"`); -+ } -+} -+ -+test( -+ time, -+ [ -+ ["minute", "12:34"], -+ ["second", "12:34:56"], -+ ["millisecond", "12:34:56.123"], -+ ["microsecond", "12:34:56.123456"], -+ ["nanosecond", "12:34:56.123456789"], -+ ], -+ "subseconds toString" -+); -+ -+test( -+ new Temporal.PlainTime(12, 34), -+ [ -+ ["minute", "12:34"], -+ ["second", "12:34:00"], -+ ["millisecond", "12:34:00.000"], -+ ["microsecond", "12:34:00.000000"], -+ ["nanosecond", "12:34:00.000000000"], -+ ], -+ "whole minutes toString" -+); - - const notValid = [ -+ "era", - "year", - "month", - "week", -@@ -30,5 +50,6 @@ const notValid = [ - ]; - - notValid.forEach((smallestUnit) => { -- assert.throws(RangeError, () => time.toString({ smallestUnit }), smallestUnit); -+ assert.throws(RangeError, () => time.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid unit for the smallestUnit option`); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e466ad4e48cb7a220007ce045b98a4f5dc110bcf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const arg = 19761118; -+ -+const result = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue(result.epochNanoseconds, 217_168_496_987_654_321n, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..975d536ff80da2d7da4d6d3640e546c63da7e27f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 217_168_496_987_654_321n, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 217_168_496_987_654_321n, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1f40ffa0dcf2ded0b1613064efba6e88f39cd28d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue(result1.epochNanoseconds, 217_168_496_987_654_321n, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue(result2.epochNanoseconds, 217_168_496_987_654_321n, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..22a1101801c6602abadee1a1cd127ca109c861bf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fb6c3eca8006d909f60805a649972b30d1aed002 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7eee26a343a8ecf00a15f7370875a16bd542f29c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-with-utc-designator.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-with-utc-designator.js -index 7af7b65a9a5931ec3c90702c2a3f1259af1d9169..c02d4f4da6bece02a33c91de37d63e3cd5e02fc2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-with-utc-designator.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-string-with-utc-designator.js -@@ -15,7 +15,7 @@ const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => instance.toZonedDateTime({ plainDate: arg }), -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), - "String with UTC designator should not be valid as a PlainDate" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f668689be54d37b2f3a0132bdb6a149d84207e4b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [undefined, "undefined"], // plainDate property is required -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e6b9fc3e1229d52f35da9e65a287b61a7544d38f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321, calendar); -+instance.toZonedDateTime({ plainDate: { year: 2000, month: 5, day: 3, calendar }, timeZone: new Temporal.TimeZone("UTC") }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b882057429e5145a1f126e0441d5dc6193c10dd3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 1_483_187_696_987_654_321n, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 1_483_187_696_987_654_321n, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..78dffeb2c9b26e31cbba90b76534ac1b9d601dae ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone }); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone: { timeZone } }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone: { timeZone } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..80a06780bc797c973781aa6ee91634312b8070d0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainTime(); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..059326c6a2a848405a1a5b673de7b455cd457306 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.tozoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.toZonedDateTime({ plainDate: new Temporal.PlainDate(2000, 5, 2), timeZone: { timeZone } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js -index d5381ad4050a55292fc078606d006867d2ea0e1a..6fb496ea92497b559d9a047505fc849727f2e832 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.toZonedDateTime({ plainDate: arg }); }, -+ () => instance.toZonedDateTime({ plainDate: arg, timeZone: "UTC" }), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-cast.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-cast.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b027b400ed4cc0899e89fd08f10cb67f56c4247d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-cast.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Casts the argument -+includes: [temporalHelpers.js] -+features: [Temporal, arrow-function] -+---*/ -+ -+const plainTime = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+TemporalHelpers.assertDuration(plainTime.until("16:34"), -+ 0, 0, 0, 0, /* hours = */ 1, /* minutes = */ 10, /* seconds = */ 29, 876, 543, 211, "string"); -+TemporalHelpers.assertDuration(plainTime.until({ hour: 16, minute: 34 }), -+ 0, 0, 0, 0, /* hours = */ 1, /* minutes = */ 10, /* seconds = */ 29, 876, 543, 211, "object"); -+ -+assert.throws(TypeError, () => plainTime.until({}), "empty"); -+assert.throws(TypeError, () => plainTime.until({ minutes: 30 }), "only plural 'minutes'"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0ce8dcf2949b3e2767ea25ab28f928a3140980e5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-number.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: A number is converted to a string, then to Temporal.PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const arg = 123456.987654321; -+ -+const result = instance.until(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js -index 785e1efe6937c06e8381d81cda3615fbeece57c6..3f11bf7f3b309a2a10ee0f0be778c07d62f12d83 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.until(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2e9c5e29e23e8e752cbf4207fdd19024b4e48425 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/basic.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..74f4c37ceb680d4efbadb8b04b415a1e1dad3dcc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/basic.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Basic usage -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const one = new Temporal.PlainTime(15, 23, 30, 123, 456, 789); -+const two = new Temporal.PlainTime(16, 23, 30, 123, 456, 789); -+const three = new Temporal.PlainTime(17, 0, 30, 123, 456, 789); -+ -+TemporalHelpers.assertDuration(one.until(two), -+ 0, 0, 0, 0, /* hours = */ 1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(two.until(one), -+ 0, 0, 0, 0, /* hours = */ -1, 0, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(one.until(three), -+ 0, 0, 0, 0, /* hours = */ 1, 37, 0, 0, 0, 0); -+TemporalHelpers.assertDuration(three.until(one), -+ 0, 0, 0, 0, /* hours = */ -1, -37, 0, 0, 0, 0); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit-invalid-string.js -index 7fcf10a557ba2ae5f259d0121a34689899b7f5f4..ff95f0e78325782cc6359cc7f1614d924594c482 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainTime(13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d477d39074c44abd6736c554a8c5a23d38335daf ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/largestunit.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: PlainTime.until with various largestUnit values. -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+const fourFortyEight = new Temporal.PlainTime(4, 48, 55); -+const elevenFiftyNine = new Temporal.PlainTime(11, 59, 58); -+TemporalHelpers.assertDuration(fourFortyEight.until(elevenFiftyNine), 0, 0, 0, 0, 7, 11, 3, 0, 0, 0, "does not include higher units than necessary (largest unit unspecified)"); -+TemporalHelpers.assertDuration(fourFortyEight.until(elevenFiftyNine, { largestUnit: "auto" }), 0, 0, 0, 0, 7, 11, 3, 0, 0, 0, "does not include higher units than necessary (largest unit is auto)"); -+TemporalHelpers.assertDuration(fourFortyEight.until(elevenFiftyNine, { largestUnit: "hours" }), 0, 0, 0, 0, 7, 11, 3, 0, 0, 0, "does not include higher units than necessary (largest unit is hours)"); -+TemporalHelpers.assertDuration(fourFortyEight.until(elevenFiftyNine, { largestUnit: "minutes" }), 0, 0, 0, 0, 0, 431, 3, 0, 0, 0, "does not include higher units than necessary (largest unit is minutes)"); -+TemporalHelpers.assertDuration(fourFortyEight.until(elevenFiftyNine, { largestUnit: "seconds" }), 0, 0, 0, 0, 0, 0, 25863, 0, 0, 0, "does not include higher units than necessary (largest unit is seconds)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a19b99b4d9c44b9047bf0e03dff560a384b6dcfc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Leap second is a valid ISO string for PlainTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainTime(23, 59, 59); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4f30cb995d2db70d09afe49ededc5c77ec2ea820 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainTime(); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.until(new Temporal.PlainTime(12, 34, 56), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js -index 12b344b753bc7ff5f0071ac1593ea3e176e7bb6b..c8d511c02acb37342b79ae71c0120dea1d6902ce 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/plaintime-propertybag-no-time-units.js -@@ -11,7 +11,7 @@ features: [Temporal] - const instance = new Temporal.PlainTime(1, 0, 0, 0, 0, 1); - - const props = {}; --assert.throws(TypeError, () => instance.until(props), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.until(props), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.until(props); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/result-sub-second.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/result-sub-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8504b817c4e941b938b877d6ba70d557cd398db3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/result-sub-second.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Supports sub-second precision -+includes: [temporalHelpers.js] -+features: [Temporal, arrow-function] -+---*/ -+ -+const time1 = Temporal.PlainTime.from("10:23:15"); -+const time2 = Temporal.PlainTime.from("17:15:57.250250250"); -+ -+TemporalHelpers.assertDuration(time1.until(time2, { largestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, /* milliseconds = */ 24762250, 250, 250, "milliseconds"); -+ -+TemporalHelpers.assertDuration(time1.until(time2, { largestUnit: "microseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, /* milliseconds = */ 0, 24762250250, 250, "microseconds"); -+ -+TemporalHelpers.assertDuration(time1.until(time2, { largestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 0, 0, 0, /* milliseconds = */ 0, 0, 24762250250250, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-hours.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-hours.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9245498b407534d4b3897cc0b402c96a0e83aa71 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-hours.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 3 }), -+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 6 }), -+ 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "hours"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-invalid.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4d094b6b10c0dbb5009b02bdc5e79c60b23fc13d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-invalid.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Tests roundingIncrement restrictions. -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "hours", roundingIncrement: 11 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 29 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 29 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "hours", roundingIncrement: 24 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 60 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 60 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 1000 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 1000 })); -+assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 1000 })); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-microseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-microseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2bde9cd4af3139756df11a75631bacacb9d31ad6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-microseconds.js -@@ -0,0 +1,58 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 196, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 195, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 192, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 190, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 180, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 25 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 175, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 40 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 160, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 50 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 150, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 100 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 100, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 125 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 125, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 200 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 250 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingIncrement: 500 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "microseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-milliseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-milliseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2eade031db7525f6d61056068f915dc6d9432010 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-milliseconds.js -@@ -0,0 +1,58 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 23, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 23, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 10, 35, 23, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 23, 860, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 23, 860, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 25 }), -+ 0, 0, 0, 0, 10, 35, 23, 850, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 40 }), -+ 0, 0, 0, 0, 10, 35, 23, 840, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 50 }), -+ 0, 0, 0, 0, 10, 35, 23, 850, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 100 }), -+ 0, 0, 0, 0, 10, 35, 23, 800, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 125 }), -+ 0, 0, 0, 0, 10, 35, 23, 750, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 200 }), -+ 0, 0, 0, 0, 10, 35, 23, 800, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 250 }), -+ 0, 0, 0, 0, 10, 35, 23, 750, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingIncrement: 500 }), -+ 0, 0, 0, 0, 10, 35, 23, 500, 0, 0, "milliseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-minutes.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-minutes.js -new file mode 100644 -index 0000000000000000000000000000000000000000..371d8fcb83c9b8686dce4ee57192f4d3ec931cc5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-minutes.js -@@ -0,0 +1,46 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 34, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 3 }), -+ 0, 0, 0, 0, 10, 33, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 32, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 6 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 10, 24, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 15 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 20, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingIncrement: 30 }), -+ 0, 0, 0, 0, 10, 30, 0, 0, 0, 0, "minutes"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-nanoseconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-nanoseconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7ec306ff7a01fac1ac3d94f4d52f37998595cf20 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-nanoseconds.js -@@ -0,0 +1,58 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 533, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 530, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 8 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 528, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 530, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 520, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 25 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 525, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 40 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 520, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 50 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 100 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 125 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 200 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 400, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 250 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingIncrement: 500 }), -+ 0, 0, 0, 0, 10, 35, 23, 865, 198, 500, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-seconds.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-seconds.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eb5edd775a69758adede02eacfd849decb9c0e0b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingincrement-seconds.js -@@ -0,0 +1,46 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Valid values for roundingIncrement option -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = new Temporal.PlainTime(3, 12, 34, 123, 456, 789); -+const later = new Temporal.PlainTime(13, 47, 57, 988, 655, 322); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 1 }), -+ 0, 0, 0, 0, 10, 35, 23, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 2 }), -+ 0, 0, 0, 0, 10, 35, 22, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 3 }), -+ 0, 0, 0, 0, 10, 35, 21, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 4 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 5 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 6 }), -+ 0, 0, 0, 0, 10, 35, 18, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 10 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 12 }), -+ 0, 0, 0, 0, 10, 35, 12, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 15 }), -+ 0, 0, 0, 0, 10, 35, 15, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 20 }), -+ 0, 0, 0, 0, 10, 35, 20, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingIncrement: 30 }), -+ 0, 0, 0, 0, 10, 35, 0, 0, 0, 0, "seconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5d15c343f00dd45e91b2c1566c3428354443d6cc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-ceil.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Tests calculations with roundingMode "ceil". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "hours", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 18, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "minutes", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 5, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "seconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 4, 865, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "milliseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "microseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "nanoseconds", roundingMode: "ceil" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1ab01526c5c79cc4bb571ff340c00de65aec698d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-floor.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Tests calculations with roundingMode "floor". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "hours", roundingMode: "floor" }), -+ 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "minutes", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -18, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "seconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -5, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "milliseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -4, -865, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "microseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -198, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "nanoseconds", roundingMode: "floor" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fe4dbd69c5ef51dfb834d5fc0827038155aa1c4e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-halfExpand.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Tests calculations with roundingMode "halfExpand". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "hours", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "minutes", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 5, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "seconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -5, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "milliseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 198, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "microseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -198, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "nanoseconds", roundingMode: "halfExpand" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-invalid-string.js -index b92eec08a57551b335e84cb5da40e413ffd70b44..1b2aa526d12b7fae54a48428d6e47075d4d46363 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-invalid-string.js -@@ -9,6 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainTime(13, 35, 57, 123, 987, 500); --for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l"]) { -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { - assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode })); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5897a126fead6dee81c3c0a718272dbc31f05719 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-trunc.js -@@ -0,0 +1,54 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.until -+description: Tests calculations with roundingMode "trunc". -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "hours", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "minutes", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "seconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "milliseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "microseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "nanoseconds", roundingMode: "trunc" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-undefined.js -index ca0e24aba9c842499fb8289b34736b7f76e3217f..7f786b8351107fce67636a79a94be725b4787777 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/roundingmode-undefined.js -@@ -8,20 +8,83 @@ includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); --const later = new Temporal.PlainTime(13, 35, 57, 123, 987, 500); -- --const explicit1 = earlier.until(later, { smallestUnit: "microsecond", roundingMode: undefined }); --TemporalHelpers.assertDuration(explicit1, 0, 0, 0, 0, 1, 1, 1, 123, 987, 0, "default roundingMode is trunc"); --const implicit1 = earlier.until(later, { smallestUnit: "microsecond" }); --TemporalHelpers.assertDuration(implicit1, 0, 0, 0, 0, 1, 1, 1, 123, 987, 0, "default roundingMode is trunc"); -- --const explicit2 = earlier.until(later, { smallestUnit: "millisecond", roundingMode: undefined }); --TemporalHelpers.assertDuration(explicit2, 0, 0, 0, 0, 1, 1, 1, 123, 0, 0, "default roundingMode is trunc"); --const implicit2 = earlier.until(later, { smallestUnit: "millisecond" }); --TemporalHelpers.assertDuration(implicit2, 0, 0, 0, 0, 1, 1, 1, 123, 0, 0, "default roundingMode is trunc"); -- --const explicit3 = earlier.until(later, { smallestUnit: "second", roundingMode: undefined }); --TemporalHelpers.assertDuration(explicit3, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, "default roundingMode is trunc"); --const implicit3 = earlier.until(later, { smallestUnit: "second" }); --TemporalHelpers.assertDuration(implicit3, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, "default roundingMode is trunc"); -+const earlier = Temporal.PlainTime.from("08:22:36.123456789"); -+const later = Temporal.PlainTime.from("12:39:40.987654321"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "hours" }), -+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "hours", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "hours" }), -+ 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, "hours"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "minutes" }), -+ 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "minutes", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "minutes" }), -+ 0, 0, 0, 0, -4, -17, 0, 0, 0, 0, "minutes"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "seconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "seconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "seconds" }), -+ 0, 0, 0, 0, -4, -17, -4, 0, 0, 0, "seconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "milliseconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "milliseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "milliseconds" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, 0, 0, "milliseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "microseconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "microseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "microseconds" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, 0, "microseconds"); -+ -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ earlier.until(later, { smallestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, 4, 17, 4, 864, 197, 532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "nanoseconds", roundingMode: undefined }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -+TemporalHelpers.assertDuration( -+ later.until(earlier, { smallestUnit: "nanoseconds" }), -+ 0, 0, 0, 0, -4, -17, -4, -864, -197, -532, "nanoseconds"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-invalid-string.js -index 7225494a217389e3a5206f92e170e0ae43318ec3..62ca4957d279080efb9693cccb8af85596c0a3a2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/smallestunit-invalid-string.js -@@ -9,7 +9,28 @@ features: [Temporal] - - const earlier = new Temporal.PlainTime(12, 34, 56, 0, 0, 0); - const later = new Temporal.PlainTime(13, 35, 57, 987, 654, 321); --const values = ["era", "eraYear", "years", "months", "weeks", "days", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js -index 759782e9bb145d5e8c1c834c0c860dfc6fe3d049..ff561458adc6cb0de47d436b6ca2f3b1dc57b06d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/until/year-zero.js -@@ -8,8 +8,9 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d45bbc8986d546d8d13ff1c18f67b8dd43427a96 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaintime.prototype.with -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainTime(); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.with({ minute: 45 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/overflow-invalid-string.js -index 796cec5fcf3d1788391e046408e56e90270b1129..dc50e7795bc7f27072b76f8d738e60690f9e31ed 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainTime/prototype/with/overflow-invalid-string.js -@@ -16,6 +16,12 @@ features: [Temporal] - - const time = new Temporal.PlainTime(12); - const values = ["", "CONSTRAIN", "balance", "other string"]; --for (const overflow of values) { -- assert.throws(RangeError, () => time.with({ minute: 45 }, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => time.with({ minute: 45 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-always.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-always.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0aad58df09f23920af9931dcad6a2c83673ddb8e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-always.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth -+description: If calendar name is to be emitted, include additional reference info -+features: [Temporal] -+---*/ -+ -+const pym = new Temporal.PlainYearMonth(2019, 10, "iso8601", 31); -+ -+assert.sameValue( -+ pym.toString({ calendarName: 'always' }), -+ "2019-10-31[u-ca=iso8601]", -+ "emit year-month-day if calendarName = 'always' (four-argument constructor)" -+); -+ -+const anotherPYM = Temporal.PlainYearMonth.from("2019-10-31"); // 31 will get dropped -+ -+assert.sameValue( -+ anotherPYM.toString({ calendarName: 'always' }), -+ "2019-10-01[u-ca=iso8601]", -+ "emit fallback day if calendarName = 'always' (static from)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cf7d4142a517051325000b3cf84425d05d50ba5a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = new Temporal.PlainYearMonth(2000, 5, arg, 1); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => new Temporal.PlainYearMonth(2000, 5, arg, 1), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3ca821d0b5c61d2b87d20b05b3c67fd0e4ec83ee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => new Temporal.PlainYearMonth(2000, 5, arg, 1), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => new Temporal.PlainYearMonth(2000, 5, arg, 1), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c34aa67e146215bcf42d90c13815ae5bc5b6b4ce ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-number.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: A number is converted to a string, then to Temporal.PlainYearMonth -+features: [Temporal] -+---*/ -+ -+const arg = 201906; -+ -+const result1 = Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)); -+assert.sameValue(result1, 0, "201906 is a valid ISO string for PlainYearMonth (first argument)"); -+const result2 = Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg); -+assert.sameValue(result2, 0, "201906 is a valid ISO string for PlainYearMonth (second argument)"); -+ -+const numbers = [ -+ 1, -+ -201906, -+ 1234567, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), -+ `Number ${arg} does not convert to a valid ISO string for PlainYearMonth (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainYearMonth (first argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e153ce98fc504027dde9a0bb46c733d3928194fc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-number.js -@@ -0,0 +1,53 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)); -+assert.sameValue(result1, 0, "19970327 is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg); -+assert.sameValue(result2, 0, "19970327 is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result3 = Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)); -+assert.sameValue(result3, 0, "19970327 is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg); -+assert.sameValue(result4, 0, "19970327 is a valid ISO string for calendar (nested property, second argument)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 2019, monthCode: "M06", calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (second argument)` -+ ); -+ arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..387a03412db1ff104e2b39be79eb0d10da0edbb0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,49 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `${description} does not convert to a valid ISO string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `${description} does not convert to a valid ISO string (nested property, first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `${description} does not convert to a valid ISO string (nested property, second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `${description} is not a valid property bag and does not convert to a string (nested property, first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `${description} is not a valid property bag and does not convert to a string (nested property, second argument)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `nested undefined calendar property is always a RangeError (first argument)`); -+assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `nested undefined calendar property is always a RangeError (second argument)`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f436289f1258cc20827f50fa1f6768e354c038d6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), -+ "reject minus zero as extended year (first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), -+ "reject minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c50651ec762454151e11345ee0952845cdb5e079 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainYearMonth -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `${description} does not convert to a valid ISO string (second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainYearMonth, "Temporal.PlainYearMonth, object"], -+ [Temporal.PlainYearMonth.prototype, "Temporal.PlainYearMonth.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..999e5afa760a58e3e525500187b4dd3bd7a2f1d0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+Temporal.PlainYearMonth.compare({ year: 2000, month: 5, calendar }, { year: 2000, month: 6, calendar }); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 2); -+ -+// Test again, but overriding the global Temporal.Calendar.prototype method so -+// we can observe the call to yearMonthFromFields() on the ISO8601 calendar -+// that occurs when we parse the string -+ -+const realYearMonthFromFields = Temporal.Calendar.prototype.yearMonthFromFields; -+let yearMonthFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.yearMonthFromFields = function (fields, options) { -+ yearMonthFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "yearMonthFromFields shouldn't be called with options"); -+ return realYearMonthFromFields.call(this, fields, options); -+} -+ -+Temporal.PlainYearMonth.compare("2000-05-01", "2000-06-01"); -+assert.sameValue(yearMonthFromFieldsCallCount, 2); -+ -+Temporal.Calendar.prototype.yearMonthFromFields = realYearMonthFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c3c755a4efbafd6ff1174ff1c7f800829e218c14 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/leap-second.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.compare -+description: Leap second is a valid ISO string for PlainYearMonth -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+ -+const result1 = Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2016, 12)); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for PlainYearMonth (first argument)"); -+const result2 = Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2016, 12), arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for PlainYearMonth (second argument)"); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2016, 12)); -+assert.sameValue(result3, 0, "second: 60 is ignored in property bag for PlainYearMonth (first argument)"); -+const result4 = Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2016, 12), arg); -+assert.sameValue(result4, 0, "second: 60 is ignored in property bag for PlainYearMonth (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js -index 5d1a6cd03ee96015c02383b26fdcfc3b6ae0e3e3..f4de105c408cbc8c0e7e4c6e6a6301c548861472 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/compare/year-zero.js -@@ -8,16 +8,24 @@ features: [Temporal] - ---*/ - - const ok = new Temporal.PlainYearMonth(2000, 5); --const bad = "-000000-06"; -+const invalidStrings = [ -+ "-000000-06", -+ "-000000-06-24", -+ "-000000-06-24T15:43:27", -+ "-000000-06-24T15:43:27+01:00", -+ "-000000-06-24T15:43:27+00:00[UTC]", -+]; - --assert.throws( -- RangeError, -- () => Temporal.PlainYearMonth.compare(bad, ok), -- "Cannot use minus zero as extended year (first argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(arg, ok), -+ "Cannot use minus zero as extended year (first argument)" -+ ); - --assert.throws( -- RangeError, -- () => Temporal.PlainYearMonth.compare(ok, bad), -- "Cannot use minus zero as extended year (second argument)" --); -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.compare(ok, arg), -+ "Cannot use minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-number.js -index 90a720fac0b07b1526d8edd047935aef20243e2e..4c9e3196c6691c88d214a618b47bf84377a047d1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-number.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-number.js -@@ -3,15 +3,26 @@ - - /*--- - esid: sec-temporal.plainyearmonth.from --description: A number argument is stringified -+description: A number is converted to a string, then to Temporal.PlainYearMonth - includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const plainYearMonth = Temporal.PlainYearMonth.from(201906); --TemporalHelpers.assertPlainYearMonth(plainYearMonth, 2019, 6, "M06"); --const fields = plainYearMonth.getISOFields(); --assert.sameValue(fields.calendar.id, "iso8601"); --assert.sameValue(fields.isoDay, 1, "isoDay"); --assert.sameValue(fields.isoMonth, 6, "isoMonth"); --assert.sameValue(fields.isoYear, 2019, "isoYear"); -+const arg = 201906; -+ -+const result = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth(result, 2019, 6, "M06", "201906 is a valid ISO string for PlainYearMonth"); -+ -+const numbers = [ -+ 1, -+ -201906, -+ 1234567, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.from(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainYearMonth` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js -index a66b605c012dbd0a8f278482cc40b45df2b5bb58..577318692f1bf7a30a7ec4fb38eb5857a2e2388e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-plainyearmonth.js -@@ -3,20 +3,23 @@ - - /*--- - esid: sec-temporal.plainyearmonth.from --description: A PlainYearMonth argument is cloned -+description: A PlainYearMonth object is copied, not returned directly - includes: [temporalHelpers.js] - features: [Temporal] - ---*/ - --const original = new Temporal.PlainYearMonth(2019, 11, undefined, 7); --const result = Temporal.PlainYearMonth.from(original); --assert.notSameValue(result, original); -+const orig = new Temporal.PlainYearMonth(2000, 5, undefined, 7); -+const result = Temporal.PlainYearMonth.from(orig); - --for (const plainYearMonth of [original, result]) { -- TemporalHelpers.assertPlainYearMonth(plainYearMonth, 2019, 11, "M11"); -- const fields = plainYearMonth.getISOFields(); -- assert.sameValue(fields.calendar.id, "iso8601"); -- assert.sameValue(fields.isoDay, 7, "isoDay"); -- assert.sameValue(fields.isoMonth, 11, "isoMonth"); -- assert.sameValue(fields.isoYear, 2019, "isoYear"); --} -+TemporalHelpers.assertPlainYearMonth( -+ result, -+ 2000, 5, "M05", -+ "PlainYearMonth is copied", -+ /* era = */ undefined, /* eraYear = */ undefined, /* isoDay = */ 7 -+); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a PlainYearMonth is given, the returned value is not the original PlainYearMonth" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..34160a40db06d922687f62274af681372a2f77fa ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth( -+ result1, -+ 2019, 6, "M06", -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth( -+ result2, -+ 2019, 6, "M06", -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ecead4225c1e710f054e78c24f96e858fbced034 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-number.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth(result1, 2019, 6, "M06", "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth(result2, 2019, 6, "M06", "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 2019, monthCode: "M06", calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0419e3c42133c84cf893ed68cd6c307036325770 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,44 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.from(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.from(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.from(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.PlainYearMonth.from(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..60b0d94490958df4eff80bfa7a0c2d82b4b49180 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.from(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5e4154a3e006328dcf1562a34c9a746f215d7171 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/argument-wrong-type.js -@@ -0,0 +1,34 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainYearMonth -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.PlainYearMonth.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainYearMonth, "Temporal.PlainYearMonth, object"], -+ [Temporal.PlainYearMonth.prototype, "Temporal.PlainYearMonth.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f3f33f1ba0f8936b0cb3ae58b27e724d1bb37b06 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+features: [Temporal] -+---*/ -+ -+const realYearMonthFromFields = Temporal.Calendar.prototype.yearMonthFromFields; -+let yearMonthFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.yearMonthFromFields = function (fields, options) { -+ yearMonthFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "yearMonthFromFields shouldn't be called with options"); -+ return realYearMonthFromFields.call(this, fields, options); -+} -+ -+Temporal.PlainYearMonth.from("2000-05-01"); -+assert.sameValue(yearMonthFromFieldsCallCount, 1); -+ -+Temporal.Calendar.prototype.yearMonthFromFields = realYearMonthFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..818a43dc1b407dfd392ef0efd2fc727ed8d37a5c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/leap-second.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: Leap second is a valid ISO string for PlainYearMonth -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60"; -+ -+const result1 = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth( -+ result1, -+ 2016, 12, "M12", -+ "leap second is a valid ISO string for PlainYearMonth" -+); -+ -+const result2 = Temporal.PlainYearMonth.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainYearMonth( -+ result2, -+ 2016, 12, "M12", -+ "leap second is a valid ISO string for PlainYearMonth" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+ -+const result3 = Temporal.PlainYearMonth.from(arg); -+TemporalHelpers.assertPlainYearMonth( -+ result3, -+ 2016, 12, "M12", -+ "second: 60 is ignored in property bag for PlainYearMonth" -+); -+ -+const result4 = Temporal.PlainYearMonth.from(arg, { overflow: "reject" }); -+TemporalHelpers.assertPlainYearMonth( -+ result4, -+ 2016, 12, "M12", -+ "second: 60 is ignored in property bag for PlainYearMonth even with overflow: reject" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eb85b8180b3add9fa9d5b89968a760b8b9704d9d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.from -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.PlainYearMonth.from({ year: 2021, monthCode: "M01" }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/overflow-invalid-string.js -index d30774eece5296d656eaa1ce2abd5318ae9556bf..11335f2481a24dfbe3ae13bc86d14e9eaedf70e3 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/overflow-invalid-string.js -@@ -27,8 +27,14 @@ const validValues = [ - { year: 2000, month: 5 }, - "2000-05", - ]; --validValues.forEach((value) => { -- ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"].forEach((overflow) => { -- assert.throws(RangeError, () => Temporal.PlainYearMonth.from(value, { overflow })); -- }); --}); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const value of validValues) { -+ for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => Temporal.PlainYearMonth.from(value, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/year-zero.js -index 1d8c7b3af73e8af8ca4604dba109b36c2158242a..930951a8dae2b9448b34f8dc75b08b8d55af0627 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/from/year-zero.js -@@ -8,15 +8,17 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-06', -- '-000000-06-24', -- '-000000-06-24T15:43:27', -- '-000000-06-24T15:43:27+01:00[UTC]' -+ "-000000-06", -+ "-000000-06-24", -+ "-000000-06-24T15:43:27", -+ "-000000-06-24T15:43:27+01:00", -+ "-000000-06-24T15:43:27+00:00[UTC]", - ]; -+ - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { Temporal.PlainYearMonth.from(arg); }, -+ () => Temporal.PlainYearMonth.from(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/limits.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/limits.js -index 696184b9906192f8362738f98147f74441c6c90d..5bc38a4107a1c893f6b18eef78def059f1ade192 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/limits.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/limits.js -@@ -13,8 +13,10 @@ assert.throws(RangeError, () => new Temporal.PlainYearMonth(275760, 10), "max"); - TemporalHelpers.assertPlainYearMonth(new Temporal.PlainYearMonth(-271821, 4), - -271821, 4, "M04", "min"); - TemporalHelpers.assertPlainYearMonth(new Temporal.PlainYearMonth(-271821, 4, "iso8601", 18), -- -271821, 4, "M04", "min with referenceISODay"); -+ -271821, 4, "M04", "min with referenceISODay", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 18); - TemporalHelpers.assertPlainYearMonth(new Temporal.PlainYearMonth(275760, 9), - 275760, 9, "M09", "max"); - TemporalHelpers.assertPlainYearMonth(new Temporal.PlainYearMonth(275760, 9, "iso8601", 14), -- 275760, 9, "M09", "max with referenceISODay"); -+ 275760, 9, "M09", "max with referenceISODay", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 14); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/calendar-datefromfields-called.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/calendar-datefromfields-called.js -new file mode 100644 -index 0000000000000000000000000000000000000000..40f5dd1b73870bcd5f9c796908fe95794661f425 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/calendar-datefromfields-called.js -@@ -0,0 +1,156 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.add -+description: > -+ Calls calendar's dateFromFields method to obtain a start date for the -+ operation, based on the sign of the duration -+info: | -+ 8. Let _fields_ be ? PrepareTemporalFields(_yearMonth_, _fieldNames_, «»). -+ 9. Let _sign_ be ! DurationSign(_duration_.[[Years]], _duration_.[[Months]], _duration_.[[Weeks]], _balanceResult_.[[Days]], 0, 0, 0, 0, 0, 0). -+ 10. If _sign_ < 0, then -+ a. Let _dayFromCalendar_ be ? CalendarDaysInMonth(_calendar_, _yearMonth_). -+ b. Let _day_ be ? ToPositiveInteger(_dayFromCalendar_). -+ 11. Else, -+ a. Let _day_ be 1. -+ 12. Perform ! CreateDataPropertyOrThrow(_fields_, *"day"*, _day_). -+ 13. Let _date_ be ? DateFromFields(_calendar_, _fields_, *undefined*). -+includes: [deepEqual.js, temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+class CustomCalendar extends Temporal.Calendar { -+ constructor() { -+ super("iso8601"); -+ this.dateFromFieldsCalls = []; -+ } -+ year(date) { -+ // years in this calendar start and end on the same day as ISO 8601 years -+ return date.getISOFields().isoYear; -+ } -+ month(date) { -+ // this calendar has 10 months of 36 days each, plus an 11th month of 5 or 6 -+ const { isoYear, isoMonth, isoDay } = date.getISOFields(); -+ const isoDate = new Temporal.PlainDate(isoYear, isoMonth, isoDay); -+ return Math.floor((isoDate.dayOfYear - 1) / 36) + 1; -+ } -+ monthCode(date) { -+ return "M" + this.month(date).toString().padStart(2, "0"); -+ } -+ day(date) { -+ return (date.dayOfYear - 1) % 36 + 1; -+ } -+ daysInMonth(date) { -+ if (this.month(date) < 11) return 36; -+ return this.daysInYear(date) - 360; -+ } -+ _dateFromFieldsImpl({ year, month, monthCode, day }) { -+ if (year === undefined) throw new TypeError("year required"); -+ if (month === undefined && monthCode === undefined) throw new TypeError("one of month or monthCode required"); -+ if (month !== undefined && month < 1) throw new RangeError("month < 1"); -+ if (day === undefined) throw new TypeError("day required"); -+ -+ if (monthCode !== undefined) { -+ const numberPart = +(monthCode.slice(1)); -+ if ("M" + `${numberPart}`.padStart(2, "0") !== monthCode) throw new RangeError("invalid monthCode"); -+ if (month === undefined) { -+ month = numberPart; -+ } else if (month !== numberPart) { -+ throw new RangeError("month and monthCode must match"); -+ } -+ } -+ -+ const isoDayOfYear = (month - 1) * 36 + day; -+ return new Temporal.PlainDate(year, 1, 1).add({ days: isoDayOfYear - 1 }).withCalendar(this); -+ } -+ dateFromFields(...args) { -+ this.dateFromFieldsCalls.push(args); -+ return this._dateFromFieldsImpl(...args); -+ } -+ yearMonthFromFields(fields, options) { -+ const { isoYear, isoMonth, isoDay } = this._dateFromFieldsImpl({ ...fields, day: 1 }, options).getISOFields(); -+ return new Temporal.PlainYearMonth(isoYear, isoMonth, this, isoDay); -+ } -+ monthDayFromFields(fields, options) { -+ const { isoYear, isoMonth, isoDay } = this._dateFromFieldsImpl({ ...fields, year: 2000 }, options).getISOFields(); -+ return new Temporal.PlainMonthDay(isoMonth, isoDay, this, isoYear); -+ } -+ dateAdd(date, duration, options) { -+ if (duration.months) throw new Error("adding months not implemented in this test"); -+ return super.dateAdd(date, duration, options); -+ } -+ toString() { -+ return "thirty-six"; -+ } -+} -+ -+const calendar = new CustomCalendar(); -+const month2 = Temporal.PlainYearMonth.from({ year: 2022, month: 2, calendar }); -+const lessThanOneMonth = new Temporal.Duration(0, 0, 0, 35); -+const oneMonth = new Temporal.Duration(0, 0, 0, 36); -+ -+// Reference ISO dates in the custom calendar: -+// M01 = 01-01 -+// M02 = 02-06 -+// M03 = 03-14 -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.add(lessThanOneMonth), -+ 2022, 2, "M02", -+ "adding positive less than one month's worth of days yields the same month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 6 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 1 }, -+ "first day of month 2 passed to dateFromFields when adding positive duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.add(oneMonth), -+ 2022, 3, "M03", -+ "adding positive one month's worth of days yields the following month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 14 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 1 }, -+ "first day of month 2 passed to dateFromFields when adding positive duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.add(lessThanOneMonth.negated()), -+ 2022, 2, "M02", -+ "adding negative less than one month's worth of days yields the same month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 6 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 36 }, -+ "last day of month 2 passed to dateFromFields when adding negative duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.add(oneMonth.negated()), -+ 2022, 1, "M01", -+ "adding negative one month's worth of days yields the previous month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 1 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 36 }, -+ "last day of month 2 passed to dateFromFields when adding negative duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..95d62d106b2d8efe9d93a266bfaafded64744c6b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.add -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainYearMonth(2019, 10); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.add({ months: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-invalid-string.js -index 4913de46a290e4174ce7ba151d74617aa4b7484b..1633f1b6544ef614f0512e9199856989bae8874a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/add/overflow-invalid-string.js -@@ -20,6 +20,12 @@ features: [Temporal] - - const yearmonth = new Temporal.PlainYearMonth(2000, 5); - const duration = new Temporal.Duration(1, 1); --for (const overflow of ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"]) { -- assert.throws(RangeError, () => yearmonth.add(duration, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => yearmonth.add(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..11cbfd5e07bebb33b6b14f31fe4a9c2f7ce83458 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: A number is converted to a string, then to Temporal.PlainYearMonth -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const arg = 201906; -+ -+const result = instance.equals(arg); -+assert.sameValue(result, true, "201906 is a valid ISO string for PlainYearMonth"); -+ -+const numbers = [ -+ 1, -+ -201906, -+ 1234567, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainYearMonth` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3d446c7789806d6f7f05c5b983e0375437ee9a17 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cd1ea7b30d318bb160bf2cc96b74e987d6f7cc7b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const calendar = 19970327; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue(result1, true, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue(result2, true, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 2019, monthCode: "M06", calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..137b9ffdbeb4a507af7d620981166109952e467a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainYearMonth(2000, 5); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.equals(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b5e0c3045ca25b2970ed7408d4bc62e74509baec ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainYearMonth(2000, 5); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-wrong-type.js -index 61bac7360141d01e18aa65109a8827e97a832c3d..f3c1e56acaa2fb929e1faaa35ee627273e4843a0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-wrong-type.js -@@ -1,20 +1,36 @@ --// Copyright (C) 2020 Igalia, S.L. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - - /*--- - esid: sec-temporal.plainyearmonth.prototype.equals --description: Appropriate error thrown when argument cannot be converted to a valid string --features: [Symbol, Temporal] -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainYearMonth -+features: [BigInt, Symbol, Temporal] - ---*/ - --const instance = Temporal.PlainYearMonth.from({ year: 2000, month: 5, day: 2 }); -+const instance = new Temporal.PlainYearMonth(2000, 5); - --assert.throws(RangeError, () => instance.equals(undefined), "undefined"); --assert.throws(RangeError, () => instance.equals(null), "null"); --assert.throws(RangeError, () => instance.equals(true), "true"); --assert.throws(RangeError, () => instance.equals(""), "empty string"); --assert.throws(TypeError, () => instance.equals(Symbol()), "symbol"); --assert.throws(RangeError, () => instance.equals(1), "1"); --assert.throws(TypeError, () => instance.equals({}), "plain object"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainYearMonth), "Temporal.PlainYearMonth"); --assert.throws(TypeError, () => instance.equals(Temporal.PlainYearMonth.prototype), "Temporal.PlainYearMonth.prototype"); -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainYearMonth, "Temporal.PlainYearMonth, object"], -+ [Temporal.PlainYearMonth.prototype, "Temporal.PlainYearMonth.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..490c35f49390f965227174382b2d473d92f03bd3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+let instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.equals({ year: 2000, month: 6, calendar }); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 1); -+ -+// Test again, but overriding the global Temporal.Calendar.prototype method so -+// we can observe the call to yearMonthFromFields() on the ISO8601 calendar -+// that occurs when we parse the string -+ -+const realYearMonthFromFields = Temporal.Calendar.prototype.yearMonthFromFields; -+let yearMonthFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.yearMonthFromFields = function (fields, options) { -+ yearMonthFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "yearMonthFromFields shouldn't be called with options"); -+ return realYearMonthFromFields.call(this, fields, options); -+} -+ -+calendar = new Temporal.Calendar("iso8601"); -+instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.equals("2000-06-01"); -+assert.sameValue(yearMonthFromFieldsCallCount, 1); -+ -+Temporal.Calendar.prototype.yearMonthFromFields = realYearMonthFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..210c4209572f759fbea55279a70f0a9b65b4acbc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.equals -+description: Leap second is a valid ISO string for PlainYearMonth -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2016, 12); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for PlainYearMonth" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "second: 60 is ignored in property bag for PlainYearMonth" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js -index 9ab97736fd50b75880af9f86e3fc1c912456efcf..11c10168d7db805cef1e1b882fcd47537350d746 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/equals/year-zero.js -@@ -3,15 +3,16 @@ - - /*--- - esid: sec-temporal.plainyearmonth.prototype.equals --description: RangeError thrown if a string with UTC designator is used as a PlainYearMonth -+description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-06', -- '-000000-06-24', -- '-000000-06-24T15:43:27', -- '-000000-06-24T15:43:27+01:00[UTC]' -+ "-000000-06", -+ "-000000-06-24", -+ "-000000-06-24T15:43:27", -+ "-000000-06-24T15:43:27+01:00", -+ "-000000-06-24T15:43:27+00:00[UTC]", - ]; - const instance = new Temporal.PlainYearMonth(2000, 5); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f9116301e5a7464e196851baa2219cbaca056f12 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: A number is converted to a string, then to Temporal.PlainYearMonth -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const arg = 201906; -+ -+const result = instance.since(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "201906 is a valid ISO string for PlainYearMonth"); -+ -+const numbers = [ -+ 1, -+ -201906, -+ 1234567, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainYearMonth` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9a276a1a4c5f4111226db53dd8f06659480ead80 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ab573e785ab4fc6048ef46de1d2dd74ce93687f1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const calendar = 19970327; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 2019, monthCode: "M06", calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..da4a19a8bfc8ed489cde40ec0d9961d6e1b520e0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainYearMonth(2000, 5); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.since(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c4701a3aeb9ac7ddb938ce6f9882da5f05fb4950 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainYearMonth(2000, 5); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7078e9941c83521be600335bc0104e91a39c6ffa ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainYearMonth -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2000, 5); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainYearMonth, "Temporal.PlainYearMonth, object"], -+ [Temporal.PlainYearMonth.prototype, "Temporal.PlainYearMonth.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d7978361ad5e552ccb9edc2763f95752d3fdf825 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.since({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 2); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..db48db0cfaaeb0a5b26064dbce5479f2f57bdb77 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+let instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.since({ year: 2000, month: 6, calendar }); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 1); -+ -+// Test again, but overriding the global Temporal.Calendar.prototype method so -+// we can observe the call to yearMonthFromFields() on the ISO8601 calendar -+// that occurs when we parse the string -+ -+const realYearMonthFromFields = Temporal.Calendar.prototype.yearMonthFromFields; -+let yearMonthFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.yearMonthFromFields = function (fields, options) { -+ yearMonthFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "yearMonthFromFields shouldn't be called with options"); -+ return realYearMonthFromFields.call(this, fields, options); -+} -+ -+calendar = new Temporal.Calendar("iso8601"); -+instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.since("2000-06-01"); -+assert.sameValue(yearMonthFromFieldsCallCount, 1); -+ -+Temporal.Calendar.prototype.yearMonthFromFields = realYearMonthFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-invalid-string.js -index 09b7687f263ffa25d79ee8a3818c0668da1dd75d..00a668d252dba096e28c035f44a9c8e46b901845 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/largestunit-invalid-string.js -@@ -9,7 +9,34 @@ features: [Temporal] - - const earlier = new Temporal.PlainYearMonth(2000, 5); - const later = new Temporal.PlainYearMonth(2001, 6); --const values = ["era", "eraYear", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "week", -+ "day", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "weeks", -+ "days", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..651cf05d3246514c9cee24789127c18c5856a80d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: Leap second is a valid ISO string for PlainYearMonth -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2016, 12); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainYearMonth" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainYearMonth" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9441a8e4dbafac0f2bb4ba055b5ad2a261975a5a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.since -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainYearMonth(2019, 10); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.since(new Temporal.PlainYearMonth(1976, 11), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-invalid-string.js -index 14cbe1ac2fb10340a20d11440513ea57a7bef6b0..ae3e9de8e347b8b496703e3727ca1f6a7e8885af 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainYearMonth(2000, 5); - const later = new Temporal.PlainYearMonth(2001, 6); --assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-invalid-string.js -index 21b0c4b69839c244149040bb23f22e95ebdc1cb9..f8e1f541a06b71ee24ce122cebf1d56dc8b3477a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/smallestunit-invalid-string.js -@@ -9,7 +9,34 @@ features: [Temporal] - - const earlier = new Temporal.PlainYearMonth(2000, 5); - const later = new Temporal.PlainYearMonth(2001, 6); --const values = ["era", "eraYear", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "week", -+ "day", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "weeks", -+ "days", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js -index e1b961038314f17fdddc585dfc2c614956b18dfc..7bb5b9611c79acd98c95e0adb7d0ef06499665cf 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/since/year-zero.js -@@ -3,15 +3,16 @@ - - /*--- - esid: sec-temporal.plainyearmonth.prototype.since --description: RangeError thrown if a string with UTC designator is used as a PlainYearMonth -+description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-06', -- '-000000-06-24', -- '-000000-06-24T15:43:27', -- '-000000-06-24T15:43:27+01:00[UTC]' -+ "-000000-06", -+ "-000000-06-24", -+ "-000000-06-24T15:43:27", -+ "-000000-06-24T15:43:27+01:00", -+ "-000000-06-24T15:43:27+00:00[UTC]", - ]; - const instance = new Temporal.PlainYearMonth(2000, 5); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/calendar-datefromfields-called.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/calendar-datefromfields-called.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fda7e4bbacb84afda2791fd84e6a12eb33fedb1c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/calendar-datefromfields-called.js -@@ -0,0 +1,156 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.subtract -+description: > -+ Calls calendar's dateFromFields method to obtain a start date for the -+ operation, based on the sign of the duration -+info: | -+ 9. Let _fields_ be ? PrepareTemporalFields(_yearMonth_, _fieldNames_, «»). -+ 10. Let _sign_ be ! DurationSign(_duration_.[[Years]], _duration_.[[Months]], _duration_.[[Weeks]], _balanceResult_.[[Days]], 0, 0, 0, 0, 0, 0). -+ 11. If _sign_ < 0, then -+ a. Let _dayFromCalendar_ be ? CalendarDaysInMonth(_calendar_, _yearMonth_). -+ b. Let _day_ be ? ToPositiveInteger(_dayFromCalendar_). -+ 12. Else, -+ a. Let _day_ be 1. -+ 13. Perform ! CreateDataPropertyOrThrow(_fields_, *"day"*, _day_). -+ 14. Let _date_ be ? DateFromFields(_calendar_, _fields_, *undefined*). -+includes: [deepEqual.js, temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+class CustomCalendar extends Temporal.Calendar { -+ constructor() { -+ super("iso8601"); -+ this.dateFromFieldsCalls = []; -+ } -+ year(date) { -+ // years in this calendar start and end on the same day as ISO 8601 years -+ return date.getISOFields().isoYear; -+ } -+ month(date) { -+ // this calendar has 10 months of 36 days each, plus an 11th month of 5 or 6 -+ const { isoYear, isoMonth, isoDay } = date.getISOFields(); -+ const isoDate = new Temporal.PlainDate(isoYear, isoMonth, isoDay); -+ return Math.floor((isoDate.dayOfYear - 1) / 36) + 1; -+ } -+ monthCode(date) { -+ return "M" + this.month(date).toString().padStart(2, "0"); -+ } -+ day(date) { -+ return (date.dayOfYear - 1) % 36 + 1; -+ } -+ daysInMonth(date) { -+ if (this.month(date) < 11) return 36; -+ return this.daysInYear(date) - 360; -+ } -+ _dateFromFieldsImpl({ year, month, monthCode, day }) { -+ if (year === undefined) throw new TypeError("year required"); -+ if (month === undefined && monthCode === undefined) throw new TypeError("one of month or monthCode required"); -+ if (month !== undefined && month < 1) throw new RangeError("month < 1"); -+ if (day === undefined) throw new TypeError("day required"); -+ -+ if (monthCode !== undefined) { -+ const numberPart = +(monthCode.slice(1)); -+ if ("M" + `${numberPart}`.padStart(2, "0") !== monthCode) throw new RangeError("invalid monthCode"); -+ if (month === undefined) { -+ month = numberPart; -+ } else if (month !== numberPart) { -+ throw new RangeError("month and monthCode must match"); -+ } -+ } -+ -+ const isoDayOfYear = (month - 1) * 36 + day; -+ return new Temporal.PlainDate(year, 1, 1).add({ days: isoDayOfYear - 1 }).withCalendar(this); -+ } -+ dateFromFields(...args) { -+ this.dateFromFieldsCalls.push(args); -+ return this._dateFromFieldsImpl(...args); -+ } -+ yearMonthFromFields(fields, options) { -+ const { isoYear, isoMonth, isoDay } = this._dateFromFieldsImpl({ ...fields, day: 1 }, options).getISOFields(); -+ return new Temporal.PlainYearMonth(isoYear, isoMonth, this, isoDay); -+ } -+ monthDayFromFields(fields, options) { -+ const { isoYear, isoMonth, isoDay } = this._dateFromFieldsImpl({ ...fields, year: 2000 }, options).getISOFields(); -+ return new Temporal.PlainMonthDay(isoMonth, isoDay, this, isoYear); -+ } -+ dateAdd(date, duration, options) { -+ if (duration.months) throw new Error("adding months not implemented in this test"); -+ return super.dateAdd(date, duration, options); -+ } -+ toString() { -+ return "thirty-six"; -+ } -+} -+ -+const calendar = new CustomCalendar(); -+const month2 = Temporal.PlainYearMonth.from({ year: 2022, month: 2, calendar }); -+const lessThanOneMonth = new Temporal.Duration(0, 0, 0, 35); -+const oneMonth = new Temporal.Duration(0, 0, 0, 36); -+ -+// Reference ISO dates in the custom calendar: -+// M01 = 01-01 -+// M02 = 02-06 -+// M03 = 03-14 -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.subtract(lessThanOneMonth), -+ 2022, 2, "M02", -+ "subtracting positive less than one month's worth of days yields the same month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 6 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 36 }, -+ "last day of month 2 passed to dateFromFields when subtracting positive duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.subtract(oneMonth), -+ 2022, 1, "M01", -+ "subtracting positive one month's worth of days yields the previous month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 1 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 36 }, -+ "last day of month 2 passed to dateFromFields when subtracting positive duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.subtract(lessThanOneMonth.negated()), -+ 2022, 2, "M02", -+ "subtracting negative less than one month's worth of days yields the same month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 6 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 1 }, -+ "first day of month 2 passed to dateFromFields when subtracting negative duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -+ -+calendar.dateFromFieldsCalls = []; -+TemporalHelpers.assertPlainYearMonth( -+ month2.subtract(oneMonth.negated()), -+ 2022, 3, "M03", -+ "subtracting negative one month's worth of days yields the following month", -+ /* era = */ undefined, /* eraYear = */ undefined, /* referenceISODay = */ 14 -+); -+assert.sameValue(calendar.dateFromFieldsCalls.length, 1, "dateFromFields was called"); -+assert.deepEqual( -+ calendar.dateFromFieldsCalls[0][0], -+ { year: 2022, month: 2, monthCode: "M02", day: 1 }, -+ "first day of month 2 passed to dateFromFields when subtracting negative duration" -+); -+assert.sameValue(calendar.dateFromFieldsCalls[0][1], undefined, "undefined options passed"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d64177826d65aeb01792b63567beb958057f16e3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.subtract -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainYearMonth(2019, 10); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.subtract({ months: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-invalid-string.js -index 8c2efb855a74812a89c0b8843eea337009afdd53..46286d5a6a21c1f2135b04fd9ec4c416c698ec9f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-invalid-string.js -@@ -20,6 +20,12 @@ features: [Temporal] - - const yearmonth = new Temporal.PlainYearMonth(2000, 5); - const duration = new Temporal.Duration(1, 1); --for (const overflow of ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"]) { -- assert.throws(RangeError, () => yearmonth.subtract(duration, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => yearmonth.subtract(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toJSON/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toJSON/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..706d3624a0f2b5dbe77b80fc3d1db0bf26410134 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toJSON/year-format.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.tojson -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+let instance = new Temporal.PlainYearMonth(-100000, 12); -+assert.sameValue(instance.toJSON(), "-100000-12", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-10000, 4); -+assert.sameValue(instance.toJSON(), "-010000-04", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-9999, 6); -+assert.sameValue(instance.toJSON(), "-009999-06", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-1000, 8); -+assert.sameValue(instance.toJSON(), "-001000-08", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-999, 10); -+assert.sameValue(instance.toJSON(), "-000999-10", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-1, 8); -+assert.sameValue(instance.toJSON(), "-000001-08", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(0, 6); -+assert.sameValue(instance.toJSON(), "0000-06", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(1, 4); -+assert.sameValue(instance.toJSON(), "0001-04", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(999, 2); -+assert.sameValue(instance.toJSON(), "0999-02", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(1000, 1); -+assert.sameValue(instance.toJSON(), "1000-01", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(9999, 4); -+assert.sameValue(instance.toJSON(), "9999-04", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(10000, 6); -+assert.sameValue(instance.toJSON(), "+010000-06", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(100000, 8); -+assert.sameValue(instance.toJSON(), "+100000-08", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js -index d6fa52e10649241a1b9af0b632579521020f2309..be8cc7e93f8812e663bf71e2ee1b509540c45d31 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/calendarname-always.js -@@ -14,7 +14,7 @@ const yearmonth1 = new Temporal.PlainYearMonth(2000, 5); - const yearmonth2 = new Temporal.PlainYearMonth(2000, 5, calendar); - - [ -- [yearmonth1, "2000-05[u-ca=iso8601]"], -+ [yearmonth1, "2000-05-01[u-ca=iso8601]"], // fallback day 1 used - [yearmonth2, "2000-05-01[u-ca=custom]"], - ].forEach(([yearmonth, expected]) => { - const result = yearmonth.toString({ calendarName: "always" }); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1e759554d51c42eb936d7cdce8a779b3176fb30b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainYearMonth(2019, 10); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/year-format.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6c1b947463824a66751d087ef8c03dfc5870fe96 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/toString/year-format.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.tostring -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+let instance = new Temporal.PlainYearMonth(-100000, 12); -+assert.sameValue(instance.toString(), "-100000-12", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-10000, 4); -+assert.sameValue(instance.toString(), "-010000-04", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-9999, 6); -+assert.sameValue(instance.toString(), "-009999-06", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-1000, 8); -+assert.sameValue(instance.toString(), "-001000-08", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-999, 10); -+assert.sameValue(instance.toString(), "-000999-10", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(-1, 8); -+assert.sameValue(instance.toString(), "-000001-08", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(0, 6); -+assert.sameValue(instance.toString(), "0000-06", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(1, 4); -+assert.sameValue(instance.toString(), "0001-04", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(999, 2); -+assert.sameValue(instance.toString(), "0999-02", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(1000, 1); -+assert.sameValue(instance.toString(), "1000-01", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(9999, 4); -+assert.sameValue(instance.toString(), "9999-04", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.PlainYearMonth(10000, 6); -+assert.sameValue(instance.toString(), "+010000-06", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.PlainYearMonth(100000, 8); -+assert.sameValue(instance.toString(), "+100000-08", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b056e5aebe846442b2a685361fc9b8d6f3fce3cb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: A number is converted to a string, then to Temporal.PlainYearMonth -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const arg = 201906; -+ -+const result = instance.until(arg); -+TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "201906 is a valid ISO string for PlainYearMonth"); -+ -+const numbers = [ -+ 1, -+ -201906, -+ 1234567, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainYearMonth` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..883d319460ecbaaed7140cda57a0a7cd633781ae ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2dedd8fe55fa3ee624e34d00b816afb2e80b0981 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2019, 6); -+ -+const calendar = 19970327; -+ -+let arg = { year: 2019, monthCode: "M06", calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 2019, monthCode: "M06", calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 2019, monthCode: "M06", calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..18a4d80265ef20b7fc6fb1f260e0c6d519831b87 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.PlainYearMonth(2000, 5); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.until(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d8a718b0adda26e2ab00574c4cf87cb315f73601 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.PlainYearMonth(2000, 5); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fc04e66b8a0a0e8009d10ca324b1300ca55f9832 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainYearMonth -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2000, 5); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainYearMonth, "Temporal.PlainYearMonth, object"], -+ [Temporal.PlainYearMonth.prototype, "Temporal.PlainYearMonth.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..89bdacd0cd309c55f0b216ad608f8331e1606aee ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.until({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 2); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d9b946e2795ac7eea7ebb2f6f9090f09ba248c16 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+let calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+let instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.until({ year: 2000, month: 6, calendar }); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 1); -+ -+// Test again, but overriding the global Temporal.Calendar.prototype method so -+// we can observe the call to yearMonthFromFields() on the ISO8601 calendar -+// that occurs when we parse the string -+ -+const realYearMonthFromFields = Temporal.Calendar.prototype.yearMonthFromFields; -+let yearMonthFromFieldsCallCount = 0; -+Temporal.Calendar.prototype.yearMonthFromFields = function (fields, options) { -+ yearMonthFromFieldsCallCount++; -+ assert.sameValue(options, undefined, "yearMonthFromFields shouldn't be called with options"); -+ return realYearMonthFromFields.call(this, fields, options); -+} -+ -+calendar = new Temporal.Calendar("iso8601"); -+instance = new Temporal.PlainYearMonth(2000, 5, calendar); -+instance.until("2000-06-01"); -+assert.sameValue(yearMonthFromFieldsCallCount, 1); -+ -+Temporal.Calendar.prototype.yearMonthFromFields = realYearMonthFromFields; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-invalid-string.js -index bb243a89914d4b324f6a435eea5e67ae0e9a122e..e3055ec8c49a2035d64c18b2155193d53325dacf 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/largestunit-invalid-string.js -@@ -9,7 +9,34 @@ features: [Temporal] - - const earlier = new Temporal.PlainYearMonth(2000, 5); - const later = new Temporal.PlainYearMonth(2001, 6); --const values = ["era", "eraYear", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "week", -+ "day", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "weeks", -+ "days", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/leap-second.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3c82e66e152f9e95f0c60ffa35c36296be08602b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: Leap second is a valid ISO string for PlainYearMonth -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.PlainYearMonth(2016, 12); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for PlainYearMonth" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "second: 60 is ignored in property bag for PlainYearMonth" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ff3266edcccbc08f0b28339b1f02bc6dc29eafed ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plainyearmonth.prototype.until -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.PlainYearMonth(2019, 10); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.until(new Temporal.PlainYearMonth(1976, 11), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-invalid-string.js -index 3e6231aef4c2e2390fd2ca5cd483151624dbd436..d5f8d9884f29fd989fb5fb30d18be726d5cb3166 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.PlainYearMonth(2000, 5); - const later = new Temporal.PlainYearMonth(2001, 6); --assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/smallestunit-invalid-string.js -index 9e494305079ba9a2601932ee80f2a363464c82fa..07095eaf3f41098988e92c2675d750980d1e99d0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/smallestunit-invalid-string.js -@@ -9,7 +9,34 @@ features: [Temporal] - - const earlier = new Temporal.PlainYearMonth(2000, 5); - const later = new Temporal.PlainYearMonth(2001, 6); --const values = ["era", "eraYear", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "week", -+ "day", -+ "hour", -+ "minute", -+ "second", -+ "millisecond", -+ "microsecond", -+ "nanosecond", -+ "month\0", -+ "YEAR", -+ "eras", -+ "eraYears", -+ "weeks", -+ "days", -+ "hours", -+ "minutes", -+ "seconds", -+ "milliseconds", -+ "microseconds", -+ "nanoseconds", -+ "months\0", -+ "YEARS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js -index b2f534aeff70a1819a634e66362354554e694710..2326993bbcabc34c8f13133af56e7743a4eaf672 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/until/year-zero.js -@@ -3,15 +3,16 @@ - - /*--- - esid: sec-temporal.plainyearmonth.prototype.until --description: RangeError thrown if a string with UTC designator is used as a PlainYearMonth -+description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-06', -- '-000000-06-24', -- '-000000-06-24T15:43:27', -- '-000000-06-24T15:43:27+01:00[UTC]' -+ "-000000-06", -+ "-000000-06-24", -+ "-000000-06-24T15:43:27", -+ "-000000-06-24T15:43:27+01:00", -+ "-000000-06-24T15:43:27+00:00[UTC]", - ]; - const instance = new Temporal.PlainYearMonth(2000, 5); - invalidStrings.forEach((arg) => { -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js -index bc8f0a542ec3e2cf8210e7213fcfa555b5052bfa..8b6b6e1af38d128604b6e4f310c5bac8aa7bfc9f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/options-wrong-type.js -@@ -7,7 +7,7 @@ description: TypeError thrown when options argument is a primitive - features: [BigInt, Symbol, Temporal] - ---*/ - --const values = [ -+const badOptions = [ - null, - true, - "2021-01", -@@ -16,7 +16,8 @@ const values = [ - 2n, - ]; - --const ym = Temporal.PlainYearMonth.from("2019-10"); --values.forEach((value) => { -- assert.throws(TypeError, () => ym.with({ year: 2020 }, value), `TypeError on wrong argument type ${typeof value}`); --}); -+const instance = new Temporal.PlainYearMonth(2019, 10); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.with({ year: 2020 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-invalid-string.js -index 587c66754c8d9bcbe2e01e18addcfe3d93fdf45f..4684d597f3e1be1cae350df4f72522abbb55bbaa 100644 ---- a/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/PlainYearMonth/prototype/with/overflow-invalid-string.js -@@ -17,6 +17,12 @@ features: [Temporal] - ---*/ - - const yearmonth = new Temporal.PlainYearMonth(2000, 5); --for (const overflow of ["", "CONSTRAIN", "balance", "other string", "constra\u0131n"]) { -- assert.throws(RangeError, () => yearmonth.with({ month: 8 }, { overflow })); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => yearmonth.with({ month: 8 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6629f5aeb84fe83b29396822473171d5e1ac9275 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-string-leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.from -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = Temporal.TimeZone.from(timeZone); -+assert.sameValue(result1.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = Temporal.TimeZone.from({ timeZone }); -+assert.sameValue(result2.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.TimeZone.from(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.TimeZone.from({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..59940a4faa066a9dc2e54f2eceaabf03f123bb52 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.TimeZone.from(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.TimeZone.from({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c8351d11605a62fe1d0bbe302f0d51c2763c071a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.TimeZone.from(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.TimeZone.from({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.TimeZone.from(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.TimeZone.from({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.TimeZone.from({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-number.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d2d05898828903c5dac595a0f587ccddc1d6f1bb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: A number is converted to a string, then to Temporal.PlainDateTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+let arg = 19761118; -+ -+const result = instance.getInstantFor(arg); -+assert.sameValue(result.epochNanoseconds, 217_123_200_000_000_000n, "19761118 is a valid ISO string for PlainDateTime"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.getInstantFor(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0e9d07bfb791a08856d08998f566822d488b967c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.getInstantFor(arg); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 217_123_200_000_000_000n, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.getInstantFor(arg); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 217_123_200_000_000_000n, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2d14c50ee38a85efced041730a114f51bc6326ff ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.getInstantFor(arg); -+assert.sameValue(result1.epochNanoseconds, 217_123_200_000_000_000n, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.getInstantFor(arg); -+assert.sameValue(result2.epochNanoseconds, 217_123_200_000_000_000n, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.getInstantFor(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.getInstantFor(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..576a7ff93cf2aeda6d4f18b304c4f7eda1c61dc3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.TimeZone("UTC"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.getInstantFor(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.getInstantFor(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.getInstantFor(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.getInstantFor(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.getInstantFor(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f282e30534bdf3b5658ff2e958fba6dbfec9c1ad ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.TimeZone("UTC"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.getInstantFor(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..187c362e0a88e4948b2dd4d70997d8b9138b803f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.getInstantFor(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.getInstantFor(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..22945fe481ccb71d3aeb43cfb3c8b11bd00c198a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: Leap second is a valid ISO string for PlainDateTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.getInstantFor(arg); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 1_483_228_799_000_000_000n, -+ "leap second is a valid ISO string for PlainDateTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.getInstantFor(arg); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 1_483_228_799_000_000_000n, -+ "second: 60 is ignored in property bag for PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eaa0b1239d0e023d3a9efe47d4f5aec6e5415533 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getinstantfor -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.TimeZone("UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.getInstantFor(new Temporal.PlainDateTime(2019, 10, 29, 10, 46, 38), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js -index dfa1f9121d0e3a514cb0f074bea6e52650169df7..d7ed91a2bf4a295d6973dfe524cfdbeed1dd77f8 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getInstantFor/year-zero.js -@@ -8,14 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -+ "-000000-12-07", - "-000000-12-07T03:24:30", -- "-000000-12-07T03:24:30+01:00[UTC]" -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.TimeZone("UTC"); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { instance.getInstantFor(arg); }, -+ () => instance.getInstantFor(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..44cafb81c3b655f34fbe3ba54555383beafcfabb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getnexttransition -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.getNextTransition(arg); -+assert.sameValue( -+ result, -+ null, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js -index f93af181509a31c22ecc62062685e642d61b9d78..3874a284fb6e68b224c803e6e4d997063990e52d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getNextTransition/year-zero.js -@@ -4,10 +4,19 @@ - /*--- - esid: sec-temporal.timezone.prototype.getnexttransition - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", -+]; - const instance = new Temporal.TimeZone("UTC"); -- --let str = "-000000-01-01T00:00"; --assert.throws(RangeError, () => instance.getNextTransition(str), "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.getNextTransition(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..417d2d4fd4d6dc971b44fc2b391d0fa00aa18058 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getoffsetnanosecondsfor -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.getOffsetNanosecondsFor(arg); -+assert.sameValue( -+ result, -+ 0, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js -index 91275f9836404fa78b8f3ca5bb5152f3926323a5..2af428da658675a03d9ee6aa53ca312179b68fdf 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/year-zero.js -@@ -4,10 +4,19 @@ - /*--- - esid: sec-temporal.timezone.prototype.getoffsetnanosecondsfor - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", -+]; - const instance = new Temporal.TimeZone("UTC"); -- --let str = "-000000-01-01T00:00"; --assert.throws(RangeError, () => instance.getOffsetNanosecondsFor(str), "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.getOffsetNanosecondsFor(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eac9e7c63c3a9f8d47a54ce6971b7b7da53253a8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getoffsetstringfor -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.getOffsetStringFor(arg); -+assert.sameValue( -+ result, -+ "+00:00", -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js -index 3840a51ff8fb34f2f43c7637785dbebea6dd38e3..a0933319900c30b1926428ea9b85bf451060d723 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/year-zero.js -@@ -4,10 +4,19 @@ - /*--- - esid: sec-temporal.timezone.prototype.getoffsetstringfor - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", -+]; - const instance = new Temporal.TimeZone("UTC"); -- --let str = "-000000-01-01T00:00"; --assert.throws(RangeError, () => instance.getOffsetStringFor(str), "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.getOffsetStringFor(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-object-tostring.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-object-tostring.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f2cdde159648c53476dda73ea813c25cf959b1fa ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-object-tostring.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: Object is converted to a string, then to Temporal.Instant -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = {}; -+assert.throws(RangeError, () => instance.getPlainDateTimeFor(arg), "[object Object] is not a valid ISO string"); -+ -+arg.toString = function() { -+ return "1970-01-01T00:00Z"; -+}; -+const result = instance.getPlainDateTimeFor(arg); -+TemporalHelpers.assertPlainDateTime(result, 1970, 1, "M01", 1, 0, 0, 0, 0, 0, 0, "result of toString is interpreted as ISO string"); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..087f7a1f8a774afca5fbdca252a6e1a7d04806ed ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/argument-wrong-type.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ for Instant -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+ [{}, "plain object"], -+ [Temporal.Instant, "Temporal.Instant, object"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.getPlainDateTimeFor(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [Temporal.Instant.prototype, "Temporal.Instant.prototype, object"], // fails brand check in toString() -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.getPlainDateTimeFor(arg), `${description} does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..97a6429cd5a2a1377edb88b6d342484684025b51 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = 19761118; -+ -+const result = instance.getPlainDateTimeFor(new Temporal.Instant(0n), arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.getPlainDateTimeFor(new Temporal.Instant(0n), arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..927df49001024c3f31fc65a6f1c49b1e2c1613f7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-string-leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.getPlainDateTimeFor(new Temporal.Instant(0n), arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = instance.getPlainDateTimeFor(new Temporal.Instant(0n), arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4fcd6b89d78391498339800b03afa4713e452689 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/calendar-wrong-type.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.getPlainDateTimeFor(new Temporal.Instant(0n), arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.getPlainDateTimeFor(new Temporal.Instant(0n), arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string-sub-minute-offset.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string-sub-minute-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..766cec0863f02aa48ef793b95611a6286c20b0c5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string-sub-minute-offset.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: Temporal.Instant string with sub-minute offset -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const str = "1970-01-01T00:19:32.37+00:19:32.37"; -+const result = instance.getPlainDateTimeFor(str); -+TemporalHelpers.assertPlainDateTime(result, 1970, 1, "M01", 1, 0, 0, 0, 0, 0, 0, "if present, sub-minute offset is accepted exactly"); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f17224284aee0f9939866ab34899154ae246b5e8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getplaindatetimefor -+description: Leap second is a valid ISO string for Instant -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.getPlainDateTimeFor(arg); -+TemporalHelpers.assertPlainDateTime( -+ result, -+ 2016, 12, "M12", 31, 23, 59, 59, 0, 0, 0, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/limits.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/limits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..24a970573df3494c230d77b8ee03149ac203f619 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/limits.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.getplaindatetimefor -+description: Checking limits of representable PlainDateTime -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const min = new Temporal.Instant(-8_640_000_000_000_000_000_000n); -+const offsetMin = new Temporal.TimeZone("-23:59"); -+const max = new Temporal.Instant(8_640_000_000_000_000_000_000n); -+const offsetMax = new Temporal.TimeZone("+23:59"); -+ -+TemporalHelpers.assertPlainDateTime( -+ offsetMin.getPlainDateTimeFor(min, "iso8601"), -+ -271821, 4, "M04", 19, 0, 1, 0, 0, 0, 0, -+ "converting from Instant (negative case)" -+); -+ -+TemporalHelpers.assertPlainDateTime( -+ offsetMax.getPlainDateTimeFor(max, "iso8601"), -+ 275760, 9, "M09", 13, 23, 59, 0, 0, 0, 0, -+ "converting from Instant (positive case)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js -index d15162a5e7e819b2949ea094508bd221ffb1a74c..aa2b02626e87047f56f7b7a561bddb07f4c70a5d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/year-zero.js -@@ -4,19 +4,19 @@ - /*--- - esid: sec-temporal.timezone.prototype.getplaindatetimefor - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- "-000000-03-30T00:45Z", -- "-000000-03-30T01:45+01:00", -- "-000000-03-30T01:45:00+01:00[UTC]" -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", - ]; - const instance = new Temporal.TimeZone("UTC"); --invalidStrings.forEach((str) => { -+invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => instance.getPlainDateTimeFor(str), -+ () => instance.getPlainDateTimeFor(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-number.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a5894c8bf0eb4bf871e889f5af59b17078db64fa ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: A number is converted to a string, then to Temporal.PlainDateTime -+includes: [compareArray.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+let arg = 19761118; -+ -+const result = instance.getPossibleInstantsFor(arg); -+assert.compareArray(result.map(i => i.epochNanoseconds), [217_123_200_000_000_000n], "19761118 is a valid ISO string for PlainDateTime"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.getPossibleInstantsFor(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDateTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..39b5d7ee9ef982c499714f56d24cdcdd9b60ad1b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [compareArray.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.getPossibleInstantsFor(arg); -+assert.compareArray( -+ result1.map(i => i.epochNanoseconds), -+ [217_123_200_000_000_000n], -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.getPossibleInstantsFor(arg); -+assert.compareArray( -+ result2.map(i => i.epochNanoseconds), -+ [217_123_200_000_000_000n], -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bee5a0819884f242229755ede5e4ea3c2769c3c5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [compareArray.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.getPossibleInstantsFor(arg); -+assert.compareArray(result1.map(i => i.epochNanoseconds), [217_123_200_000_000_000n], "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.getPossibleInstantsFor(arg); -+assert.compareArray(result2.map(i => i.epochNanoseconds), [217_123_200_000_000_000n], "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.getPossibleInstantsFor(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.getPossibleInstantsFor(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..dd2a88d76e8a59069010bd29f3aa35c493f5f6fd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.TimeZone("UTC"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.getPossibleInstantsFor(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.getPossibleInstantsFor(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.getPossibleInstantsFor(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.getPossibleInstantsFor(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.getPossibleInstantsFor(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..44bb062dcdc1dbe724a31084dc6e4d747702727c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.TimeZone("UTC"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.getPossibleInstantsFor(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..40cd622852c66602b8ce4bcccca165e53433d5e5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.getPossibleInstantsFor(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDateTime, "Temporal.PlainDateTime, object"], -+ [Temporal.PlainDateTime.prototype, "Temporal.PlainDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.getPossibleInstantsFor(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..79cb2a37326fee51ccd4dcbfc0fcf259ac0121c8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getpossibleinstantsfor -+description: Leap second is a valid ISO string for PlainDateTime -+includes: [compareArray.js] -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.getPossibleInstantsFor(arg); -+assert.compareArray( -+ result1.map(i => i.epochNanoseconds), -+ [1_483_228_799_000_000_000n], -+ "leap second is a valid ISO string for PlainDateTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.getPossibleInstantsFor(arg); -+assert.compareArray( -+ result2.map(i => i.epochNanoseconds), -+ [1_483_228_799_000_000_000n], -+ "second: 60 is ignored in property bag for PlainDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js -index e6efaf6004abf72da12f82c9839e892c5c173102..0db44c186970060f19def51c9edf3c2e56b79411 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/year-zero.js -@@ -8,14 +8,16 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -+ "-000000-12-07", - "-000000-12-07T03:24:30", -- "-000000-12-07T03:24:30+01:00[UTC]" -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; - const instance = new Temporal.TimeZone("UTC"); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -- () => { instance.getPossibleInstantsFor(arg); }, -+ () => instance.getPossibleInstantsFor(arg), - "reject minus zero as extended year" - ); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/leap-second.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..29d3b5d41008964de3f0eb61358b386aafd1b624 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone.prototype.getprevioustransition -+description: Leap second is a valid ISO string for Instant -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.TimeZone("UTC"); -+ -+const arg = "2016-12-31T23:59:60Z"; -+const result = instance.getPreviousTransition(arg); -+assert.sameValue( -+ result, -+ null, -+ "leap second is a valid ISO string for Instant" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js -index 558656721054662a5514e035b864c65e3e1c0dd3..07b1e7248f81ab26402a7bb115734581d613a61b 100644 ---- a/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/TimeZone/prototype/getPreviousTransition/year-zero.js -@@ -4,10 +4,19 @@ - /*--- - esid: sec-temporal.timezone.prototype.getprevioustransition - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-000000-03-30T00:45Z", -+ "-000000-03-30T01:45+01:00", -+ "-000000-03-30T01:45:00+00:00[UTC]", -+]; - const instance = new Temporal.TimeZone("UTC"); -- --let str = "-000000-01-01T00:00"; --assert.throws(RangeError, () => instance.getPreviousTransition(str), "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.getPreviousTransition(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..889bf726c8484707d60b4e89b6b63687da270a50 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/calendar-number.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const arg = 19761118; -+ -+const result = new Temporal.ZonedDateTime(0n, "UTC", arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => new Temporal.ZonedDateTime(0n, "UTC", arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..082c904fdabdcbeddf4fc57defb3cce16da411a3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/calendar-wrong-type.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => new Temporal.ZonedDateTime(0n, "UTC", arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => new Temporal.ZonedDateTime(0n, "UTC", arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8a6c34e0b881234391597a6c818b441feaa4b893 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const datetime = new Temporal.ZonedDateTime(217_123_200_000_000_000n, timeZone); -+const calendar = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, timeZone, calendar }; -+const result1 = Temporal.ZonedDateTime.compare(arg, datetime); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.ZonedDateTime.compare(datetime, arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, timeZone, calendar: { calendar } }; -+const result3 = Temporal.ZonedDateTime.compare(arg, datetime); -+assert.sameValue(result3, 0, "leap second is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.ZonedDateTime.compare(datetime, arg); -+assert.sameValue(result4, 0, "leap second is a valid ISO string for calendar (nested property, second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e75341024315b36e3031c944d45145d1970668a6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-number.js -@@ -0,0 +1,56 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const datetime = new Temporal.ZonedDateTime(0n, timeZone); -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, calendar, timeZone }; -+const result1 = Temporal.ZonedDateTime.compare(arg, datetime); -+assert.sameValue(result1, 0, "19970327 is a valid ISO string for calendar (first argument)"); -+const result2 = Temporal.ZonedDateTime.compare(datetime, arg); -+assert.sameValue(result2, 0, "19970327 is a valid ISO string for calendar (second argument)"); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, calendar: { calendar }, timeZone }; -+const result3 = Temporal.ZonedDateTime.compare(arg, datetime); -+assert.sameValue(result3, 0, "19970327 is a valid ISO string for calendar (nested property, first argument)"); -+const result4 = Temporal.ZonedDateTime.compare(datetime, arg); -+assert.sameValue(result4, 0, "19970327 is a valid ISO string for calendar (nested property, second argument)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1970, monthCode: "M01", day: 1, calendar, timeZone }; -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(arg, datetime), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(datetime, arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (second argument)` -+ ); -+ arg = { year: 1970, monthCode: "M01", day: 1, calendar: { calendar }, timeZone }; -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(arg, datetime), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, first argument)` -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(datetime, arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property, second argument)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d542d4acd37cbb8c1353c8eb89a8669be6faef5d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,51 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(arg, datetime), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, arg), `${description} does not convert to a valid ISO string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(arg, datetime), `${description} does not convert to a valid ISO string (nested property, first argument)`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, arg), `${description} does not convert to a valid ISO string (nested property, second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(arg, datetime), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(datetime, arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(arg, datetime), `${description} is not a valid property bag and does not convert to a string (nested property, first argument)`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(datetime, arg), `${description} is not a valid property bag and does not convert to a string (nested property, second argument)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(arg, datetime), `nested undefined calendar property is always a RangeError (first argument)`); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, arg), `nested undefined calendar property is always a RangeError (second argument)`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..26a1253b18f43f7220e001275d56388e80377814 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(arg, datetime), -+ "reject minus zero as extended year (first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(datetime, arg), -+ "reject minus zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b6ca567fefc6fc6ab3410e19fd1e35a3dd539493 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/argument-wrong-type.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for ZonedDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const other = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(arg, other), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(other, arg), `${description} does not convert to a valid ISO string (second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(arg, other), `${description} is not a valid property bag and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(other, arg), `${description} is not a valid property bag and does not convert to a string (second argument)`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cdd1368336fbd30392a4c785a8ef79a3fb90bdf6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: Leap second is a valid ISO string for ZonedDateTime -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(1_483_228_799_000_000_000n, new Temporal.TimeZone("UTC")); -+ -+let arg = "2016-12-31T23:59:60+00:00[UTC]"; -+const result1 = Temporal.ZonedDateTime.compare(arg, datetime); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for ZonedDateTime (first argument)"); -+const result2 = Temporal.ZonedDateTime.compare(datetime, arg); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for ZonedDateTime (second argument)"); -+ -+arg = "2000-05-02T12:34:56+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(arg, datetime), "leap second in time zone name not valid (first argument)"); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, arg), "leap second in time zone name not valid (second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..15726d7695e8104e7e6ef67b5a68dcf5508d9db8 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1588377600_000_000_000n, "UTC"); -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone }, instance); -+assert.sameValue(result1, 0, "leap second is a valid ISO string for TimeZone (first argument)"); -+const result2 = Temporal.ZonedDateTime.compare(instance, { year: 2020, month: 5, day: 2, timeZone }); -+assert.sameValue(result2, 0, "leap second is a valid ISO string for TimeZone (second argument)"); -+const result3 = Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }, instance); -+assert.sameValue(result3, 0, "leap second is a valid ISO string for TimeZone (nested property, first argument)"); -+const result4 = Temporal.ZonedDateTime.compare(instance, { year: 2020, month: 5, day: 2, timeZone: { timeZone } }); -+assert.sameValue(result4, 0, "leap second is a valid ISO string for TimeZone (nested property, second argument)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone }, instance), "leap second in time zone name not valid (first argument)"); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(instance, { year: 2020, month: 5, day: 2, timeZone }), "leap second in time zone name not valid (second argument)"); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }, instance), "leap second in time zone name not valid (nested property, first argument)"); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(instance, { year: 2020, month: 5, day: 2, timeZone: { timeZone } }), "leap second in time zone name not valid (nested property, second argument)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7f170bfe7e6e0c6bd8ae66f0c857a31fb9424661 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-string-year-zero.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone }, datetime), -+ "reject minus zero as extended year (first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone }), -+ "reject minus zero as extended year (second argument)" -+ ); -+ -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }, datetime), -+ "reject minus zero as extended year (nested property, first argument)" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property, second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a2c34b5a4ecc47292294ab45a5de5ed713182901 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/timezone-wrong-type.js -@@ -0,0 +1,43 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.compare -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone }, datetime), `${description} does not convert to a valid ISO string (first argument)`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone }), `${description} does not convert to a valid ISO string (second argument)`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }, datetime), `${description} does not convert to a valid ISO string (nested property, first argument)`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property, second argument)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone }, datetime), `${description} is not a valid object and does not convert to a string (first argument)`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone }), `${description} is not a valid object and does not convert to a string (second argument)`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }, datetime), `${description} is not a valid object and does not convert to a string (nested property, first argument)`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property, second argument)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }, datetime), `undefined is always a RangeError as nested property (first argument)`); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.compare(datetime, { year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `undefined is always a RangeError as nested property (second argument)`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js -index 314b364b42d09581d5f3cdc6b67ed3e64a6bde99..82ec45e13b3c3e398951681ecb79a6e6d7e8a2ac 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/compare/year-zero.js -@@ -8,13 +8,19 @@ features: [Temporal] - ---*/ - - const instance = new Temporal.ZonedDateTime(0n, "UTC"); --const bad = "-000000-08-19T17:30Z"; -+const invalidStrings = [ -+ "-0000000-01-01T00:02Z[UTC]", -+ "-0000000-01-01T00:02+00:00[UTC]", -+ "-0000000-01-01T00:02:00.000000000+00:00[UTC]", -+]; - --assert.throws(RangeError, -- () => Temporal.ZonedDateTime.compare(bad, instance), -- "cannot use negative zero as extended year (first argument)" --); --assert.throws(RangeError, -- () => Temporal.ZonedDateTime.compare(instance, bad), -- "cannot use negative zero as extended year (second argument)" --); -+invalidStrings.forEach((arg) => { -+ assert.throws(RangeError, -+ () => Temporal.ZonedDateTime.compare(arg, instance), -+ "cannot use negative zero as extended year (first argument)" -+ ); -+ assert.throws(RangeError, -+ () => Temporal.ZonedDateTime.compare(instance, arg), -+ "cannot use negative zero as extended year (second argument)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2d68e15b72570dc4df48c73a1fb5450d977e97c0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const calendar = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = Temporal.ZonedDateTime.from(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = Temporal.ZonedDateTime.from(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..58775d77ae54aee1bef4d42ac6bf212b5907cb84 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-number.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const calendar = 19970327; -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = Temporal.ZonedDateTime.from(arg); -+assert.sameValue(result1.calendar.id, "iso8601", "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = Temporal.ZonedDateTime.from(arg); -+assert.sameValue(result2.calendar.id, "iso8601", "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fc1dfa9604f50240512f9407ad78af33b65a2d42 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,44 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.from(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.from(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.from(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.from(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ffabba823fc8c5be534e0a9f4e0ad4d7f1328766 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+ -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d2a424fb4e77a4b5858f7d5fed48c9b8afeedf41 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-wrong-type.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for ZonedDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.from(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.from(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-zoneddatetime.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-zoneddatetime.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eb1c6c67ae1d01a2b243d075a16fb6209d0712cd ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/argument-zoneddatetime.js -@@ -0,0 +1,21 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: A ZonedDateTime object is copied, not returned directly -+features: [Temporal] -+---*/ -+ -+const orig = new Temporal.ZonedDateTime(946684800_000_000_010n, new Temporal.TimeZone("UTC")); -+const result = Temporal.ZonedDateTime.from(orig); -+ -+assert.sameValue(result.epochNanoseconds, 946684800_000_000_010n, "ZonedDateTime is copied"); -+assert.sameValue(result.timeZone, orig.timeZone, "time zone is the same"); -+assert.sameValue(result.calendar, orig.calendar, "calendar is the same"); -+ -+assert.notSameValue( -+ result, -+ orig, -+ "When a ZonedDateTime is given, the returned value is not the original ZonedDateTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f7cf91d8e4d62e5535a52e71258c5c54e7b5ce37 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/leap-second.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: Leap second is a valid ISO string for ZonedDateTime -+features: [Temporal] -+---*/ -+ -+let arg = "2016-12-31T23:59:60+00:00[UTC]"; -+const result = Temporal.ZonedDateTime.from(arg); -+assert.sameValue( -+ result.epochNanoseconds, -+ 1_483_228_799_000_000_000n, -+ "leap second is a valid ISO string for ZonedDateTime" -+); -+ -+arg = "2000-05-02T12:34:56+23:59[+23:59:60]"; -+assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from(arg), -+ "leap second in time zone name not valid" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..91fb3bab63efa0454721a898190beff073f7da24 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/options-wrong-type.js -@@ -0,0 +1,22 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+for (const value of badOptions) { -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.from({ year: 1976, month: 11, day: 18, timeZone: "UTC" }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/overflow-invalid-string.js -index 5913d3e7f966fe27be045cb7802088838b118873..e8406c57e37242ff15fb9752df16116f367564a0 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/overflow-invalid-string.js -@@ -32,6 +32,14 @@ const validValues = [ - { year: 2000, month: 5, day: 2, hour: 12, timeZone: "UTC" }, - "2001-09-09T01:46:40.987654321+00:00[UTC]", - ]; --validValues.forEach((value) => { -- assert.throws(RangeError, () => Temporal.ZonedDateTime.from(value, { overflow: "other string" })); --}); -+ -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const value of validValues) { -+ for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from(value, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+ } -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2b2a9eb311d8069649304b20df8d1f3a66fb9f53 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone }); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone: { timeZone } }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone: { timeZone } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0065848f01c6ec7d62f17bc363ad6798afb9b72e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-string-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1ad5649c811f7823f37250fe94d1630af9911a2a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.from -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => Temporal.ZonedDateTime.from({ year: 2000, month: 5, day: 2, timeZone: { timeZone } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/year-zero.js -index da7638028a07d7f191fed8ca9671a307476e30d9..727200f8599b6b6e0a9c63a37afe5656afe2076b 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/from/year-zero.js -@@ -4,9 +4,19 @@ - /*--- - esid: sec-temporal.zoneddatetime.from - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - --const str = "-0000000-01-01T00:02:00.000000000+00:00[UTC]"; -+const invalidStrings = [ -+ "-0000000-01-01T00:02Z[UTC]", -+ "-0000000-01-01T00:02+00:00[UTC]", -+ "-0000000-01-01T00:02:00.000000000+00:00[UTC]", -+]; - --assert.throws(RangeError, () => { Temporal.ZonedDateTime.from(str); }, "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => Temporal.ZonedDateTime.from(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b107f23ee029e2987513d80ec0ebba9961b4eaf5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.add -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.add({ years: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/overflow-invalid-string.js -index 4c88b568784d0822ba587b91e7163381c558e721..ede72ad4a96396d1bb79a893f1b9546b2e087ebe 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/add/overflow-invalid-string.js -@@ -20,4 +20,11 @@ features: [Temporal] - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, "UTC"); - const duration = new Temporal.Duration(0, 0, 0, 1); --assert.throws(RangeError, () => datetime.add(duration, { overflow: "other string" })); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => datetime.add(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8957994ea29cd1c91218f565241646635582d6ed ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const calendar = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue( -+ result1, -+ true, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue( -+ result2, -+ true, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d3419b97b86c2f97d4457aa69f7d0c04abaf023d ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = instance.equals(arg); -+assert.sameValue(result1, true, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = instance.equals(arg); -+assert.sameValue(result2, true, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..599ec149ace274762d3c1847feaf35dbdb2c919b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.equals(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..007750f204467b56271cb2eb824c27612e97e77b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..32294fc757b7a7a8f628a95fa16599f2ca8ff634 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for ZonedDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cc57129d4eee7d7fc7f53c6c8b20bf6e026d2685 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: Leap second is a valid ISO string for ZonedDateTime -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_483_228_799_000_000_000n, timeZone); -+ -+let arg = "2016-12-31T23:59:60+00:00[UTC]"; -+const result = instance.equals(arg); -+assert.sameValue( -+ result, -+ true, -+ "leap second is a valid ISO string for ZonedDateTime" -+); -+ -+arg = "2000-05-02T12:34:56+23:59[+23:59:60]"; -+assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "leap second in time zone name not valid" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8470aacdbf924b93bbc5ba24727f9ab03883905b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-leap-second.js -@@ -0,0 +1,18 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1588377600_000_000_000n, new Temporal.TimeZone("UTC")); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+assert(instance.equals({ year: 2020, month: 5, day: 2, timeZone }), "leap second is a valid ISO string for TimeZone"); -+assert(instance.equals({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), "leap second is a valid ISO String for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9a58704f1ff23385a3bbf447851ad86c856be54e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals({ year: 2020, month: 5, day: 2, timeZone }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.equals({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6dc438b8ab0f773950933f68b58212757cd1df3b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.equals -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.equals({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js -index f7030e4d6a9d40df3d2d92b1571f1d7ba7b3b0dd..3e87ae889316af26316a698074b89d390ad4f55a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/equals/year-zero.js -@@ -4,11 +4,20 @@ - /*--- - esid: sec-temporal.zoneddatetime.prototype.equals - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-0000000-01-01T00:02Z[UTC]", -+ "-0000000-01-01T00:02+00:00[UTC]", -+ "-0000000-01-01T00:02:00.000000000+00:00[UTC]", -+]; - const timeZone = new Temporal.TimeZone("UTC"); - const instance = new Temporal.ZonedDateTime(0n, timeZone); --const str = "-0000000-01-01T00:02:00.000000000+00:00[UTC]"; -- --assert.throws(RangeError, () => { instance.equals(str); }, "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.equals(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e54dcd45e6cde4d77099c535ca14fbdb5c1bf195 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/options-wrong-type.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.round -+description: TypeError thrown when options argument is missing or a non-string primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ undefined, -+ null, -+ true, -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+assert.throws(TypeError, () => instance.round(), "TypeError on missing options argument"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.round(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounding-direction.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounding-direction.js -new file mode 100644 -index 0000000000000000000000000000000000000000..676841ed26df5d4708897ee1d619554b07a4c8c4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounding-direction.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.round -+description: Rounding down is towards the Big Bang, not the epoch or 1 BCE -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(-65_261_246_399_500_000_000n, "UTC"); // -000099-12-15T12:00:00.5Z -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "floor" }).epochNanoseconds, -+ -65_261_246_400_000_000_000n, // -000099-12-15T12:00:00Z -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode floor)" -+); -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "trunc" }).epochNanoseconds, -+ -65_261_246_400_000_000_000n, // -000099-12-15T12:00:00Z -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc)" -+); -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "ceil" }).epochNanoseconds, -+ -65_261_246_399_000_000_000n, // -000099-12-15T12:00:01Z -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode ceil)" -+); -+assert.sameValue( -+ instance.round({ smallestUnit: "second", roundingMode: "halfExpand" }).epochNanoseconds, -+ -65_261_246_399_000_000_000n, // -000099-12-15T12:00:01Z -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode halfExpand)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundingmode-invalid-string.js -index 145e3f615a71058523d84e87db1ac54918a2c092..b5b58bc40d6fb14587c8ea64f5fcdb30d3cb15ce 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); --assert.throws(RangeError, () => datetime.round({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => datetime.round({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundto-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundto-invalid-string.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9ce1a9e17d8ca64a2dcda9c95b19b33c67612043 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/roundto-invalid-string.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.round -+description: RangeError thrown when smallestUnit option not one of the allowed string values -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => datetime.round(smallestUnit), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-disallowed-units.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-disallowed-units.js -deleted file mode 100644 -index f89f4c6752b28ea10c97a85d8372599e18e9c4e6..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-disallowed-units.js -+++ /dev/null -@@ -1,32 +0,0 @@ --// Copyright (C) 2021 Igalia, S.L. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-temporal.zoneddatetime.prototype.round --description: Specifically disallowed units for the smallestUnit option --features: [Temporal, arrow-function] -----*/ -- --const instance = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, "UTC"); --const invalidUnits = [ -- "era", -- "eras", -- "year", -- "month", -- "week", -- "years", -- "months", -- "weeks", --]; --invalidUnits.forEach((smallestUnit) => { -- assert.throws( -- RangeError, -- () => instance.round({ smallestUnit }), -- `{ smallestUnit: "${smallestUnit}" } should not be allowed as an argument to round` -- ); -- assert.throws( -- RangeError, -- () => instance.round(smallestUnit), -- `"${smallestUnit}" should not be allowed as an argument to round` -- ); --}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-invalid-string.js -index bee6892ba97c9d6247eb9818525202a32335bc18..cf8831a97564420577530afbcf410d734ea52410 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/round/smallestunit-invalid-string.js -@@ -8,4 +8,26 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); --assert.throws(RangeError, () => datetime.round({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => datetime.round({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a907504f4b213e8c3241eeeeb21204a9ec84155e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const calendar = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d99297f1a023715caa905b57a7a660c65dccfe2e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-number.js -@@ -0,0 +1,43 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = instance.since(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = instance.since(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2269c00245f30497b3ec967d1252b9b1f3e8305a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.since(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..30d5f0cf5f7058c4aa85df769f50032d0ec6b29c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d4824739f440580ca18f83a3d4f7d1a123a2f9eb ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for ZonedDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/calendar-dateadd-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/calendar-dateadd-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9e6556718c8a6f1f8905f7f6b90cd670b3c96281 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/calendar-dateadd-called-with-options-undefined.js -@@ -0,0 +1,68 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: > -+ BuiltinTimeZoneGetInstantFor calls Calendar.dateAdd with undefined as the -+ options value -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarDateAddUndefinedOptions(); -+const timeZone = TemporalHelpers.oneShiftTimeZone(new Temporal.Instant(0n), 3600e9); -+const earlier = new Temporal.ZonedDateTime(0n, timeZone, calendar); -+ -+// Basic difference with largestUnit larger than days. -+// The calls come from these paths: -+// ZonedDateTime.since() -> DifferenceZonedDateTime -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+ -+const later1 = new Temporal.ZonedDateTime(1_213_200_000_000_000n, timeZone, calendar); -+later1.since(earlier, { largestUnit: "weeks" }); -+assert.sameValue(calendar.dateAddCallCount, 2, "basic difference with largestUnit >days"); -+ -+// Basic difference with largestUnit equal to days, to cover the second path in -+// AddZonedDateTime. -+// The calls come from these paths: -+// ZonedDateTime.since() -> DifferenceZonedDateTime -> NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+ -+calendar.dateAddCallCount = 0; -+ -+later1.since(earlier, { largestUnit: "days" }); -+assert.sameValue(calendar.dateAddCallCount, 2, "basic difference with largestUnit days"); -+ -+// Difference with rounding, with smallestUnit a calendar unit. -+// The calls come from these paths: -+// ZonedDateTime.since() -> -+// DifferenceZonedDateTime -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// RoundDuration -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// MoveRelativeDate -> calendar.dateAdd() -+ -+calendar.dateAddCallCount = 0; -+ -+later1.since(earlier, { smallestUnit: "weeks" }); -+assert.sameValue(calendar.dateAddCallCount, 5, "rounding difference with calendar smallestUnit"); -+ -+// Difference with rounding, with smallestUnit a non-calendar unit, and having -+// the resulting time difference be longer than a calendar day, covering the -+// paths that go through AdjustRoundedDurationDays. (The path through -+// AdjustRoundedDurationDays -> AddDuration that's covered in the corresponding -+// test in until() only happens in one direction.) -+// The calls come from these paths: -+// ZonedDateTime.since() -> -+// DifferenceZonedDateTime -> NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (3x) -+// AdjustRoundedDurationDays -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (3x) -+ -+calendar.dateAddCallCount = 0; -+ -+const later2 = new Temporal.ZonedDateTime(86_399_999_999_999n, timeZone, calendar); -+later2.since(earlier, { largestUnit: "days", smallestUnit: "hours", roundingMode: "ceil" }); -+assert.sameValue(calendar.dateAddCallCount, 6, "rounding difference with non-calendar smallestUnit and time difference longer than a calendar day"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-invalid-string.js -index 61dd7f3ad39d552992eeebca91d8e56ef9d3d87b..9e96e8a496518b4b91f60daf9f055c54be7a6b94 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/largestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - const later = new Temporal.ZonedDateTime(1_000_090_061_987_654_321n, "UTC"); --const values = ["era", "eraYear", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e3611500bb8ff9423c8d038dd68f7fbfb50ca8c7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: Leap second is a valid ISO string for ZonedDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_483_228_799_000_000_000n, timeZone); -+ -+let arg = "2016-12-31T23:59:60+00:00[UTC]"; -+const result = instance.since(arg); -+TemporalHelpers.assertDuration( -+ result, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for ZonedDateTime" -+); -+ -+arg = "2000-05-02T12:34:56+23:59[+23:59:60]"; -+assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "leap second in time zone name not valid" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f2f30920733a9797c11b1aa8c0489d2bf5598957 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.since(new Temporal.ZonedDateTime(3600_000_000_000n, "UTC"), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/roundingmode-invalid-string.js -index 8fd11a6ba56da4fa970dbde08f9e3c100ff200cb..c749232dcd204ef34033aae3de12a683698a8dbe 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - const later = new Temporal.ZonedDateTime(1_000_090_061_123_987_500n, "UTC"); --assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/smallestunit-invalid-string.js -index 5735fba65e7ad9b5e012a7bf283629d9cdd15473..a116e2407458f5869d37325c6fe4705223fc16de 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/smallestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - const later = new Temporal.ZonedDateTime(1_000_090_061_987_654_321n, "UTC"); --const values = ["era", "eraYear", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => later.since(earlier, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => later.since(earlier, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5bce2e354783e74f3b7d990ba980624f510283de ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-leap-second.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const expectedTimeZone = "UTC"; -+const instance = new Temporal.ZonedDateTime(0n, expectedTimeZone); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// These operations should produce expectedTimeZone, so the following operations -+// should not throw due to the time zones being different on the receiver and -+// the argument. -+ -+instance.since({ year: 2020, month: 5, day: 2, timeZone }); -+instance.since({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4c4cd97e92dc1291f61561b2c2d26e5577eb10d2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.since({ year: 2020, month: 5, day: 2, timeZone }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.since({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6fb84b2ae679cff33143c42c1f1c7c4770d5873e ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.since -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.since({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js -index 71271b197b409de0b8446aa654254609f0a1829a..a33e732fba8628146271a229b4de5060efca6e6c 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/since/year-zero.js -@@ -4,11 +4,20 @@ - /*--- - esid: sec-temporal.zoneddatetime.prototype.since - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-0000000-01-01T00:02Z[UTC]", -+ "-0000000-01-01T00:02+00:00[UTC]", -+ "-0000000-01-01T00:02:00.000000000+00:00[UTC]", -+]; - const timeZone = new Temporal.TimeZone("UTC"); - const instance = new Temporal.ZonedDateTime(0n, timeZone); --const str = "-0000000-01-01T00:02:00.000000000+00:00[UTC]"; -- --assert.throws(RangeError, () => { instance.since(str); }, "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.since(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d06125ab40a20bda54c616c354fbd3b24b58552f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.subtract -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.subtract({ years: 1 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/overflow-invalid-string.js -index 8c144ef70d034aac2b2ca62f2da8fd69d83d87fa..7a7d4fd1206abf47a7fc519bb1dd10033e1d4b40 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/overflow-invalid-string.js -@@ -20,4 +20,11 @@ features: [Temporal] - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, "UTC"); - const duration = new Temporal.Duration(0, 0, 0, 1); --assert.throws(RangeError, () => datetime.subtract(duration, { overflow: "other string" })); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => datetime.subtract(duration, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toJSON/year-format.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toJSON/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d532f99c4a622efe3b0092e20523b72fb4d9dfb4 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toJSON/year-format.js -@@ -0,0 +1,55 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tojson -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+function epochNsInYear(year) { -+ // Return an epoch nanoseconds value near the middle of the given year -+ const avgNsPerYear = 31_556_952_000_000_000n; -+ return (year - 1970n) * avgNsPerYear + (avgNsPerYear / 2n); -+} -+ -+const utc = new Temporal.TimeZone("UTC"); -+ -+let instance = new Temporal.ZonedDateTime(epochNsInYear(-100000n), utc); -+assert.sameValue(instance.toJSON(), "-100000-07-01T21:30:36+00:00[UTC]", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-10000n), utc); -+assert.sameValue(instance.toJSON(), "-010000-07-01T21:30:36+00:00[UTC]", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-9999n), utc); -+assert.sameValue(instance.toJSON(), "-009999-07-02T03:19:48+00:00[UTC]", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-1000n), utc); -+assert.sameValue(instance.toJSON(), "-001000-07-02T09:30:36+00:00[UTC]", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-999n), utc); -+assert.sameValue(instance.toJSON(), "-000999-07-02T15:19:48+00:00[UTC]", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-1n), utc); -+assert.sameValue(instance.toJSON(), "-000001-07-02T15:41:24+00:00[UTC]", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(0n), utc); -+assert.sameValue(instance.toJSON(), "0000-07-01T21:30:36+00:00[UTC]", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(1n), utc); -+assert.sameValue(instance.toJSON(), "0001-07-02T03:19:48+00:00[UTC]", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(999n), utc); -+assert.sameValue(instance.toJSON(), "0999-07-02T03:41:24+00:00[UTC]", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(1000n), utc); -+assert.sameValue(instance.toJSON(), "1000-07-02T09:30:36+00:00[UTC]", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(9999n), utc); -+assert.sameValue(instance.toJSON(), "9999-07-02T15:41:24+00:00[UTC]", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(10000n), utc); -+assert.sameValue(instance.toJSON(), "+010000-07-01T21:30:36+00:00[UTC]", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(100000n), utc); -+assert.sameValue(instance.toJSON(), "+100000-07-01T21:30:36+00:00[UTC]", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e1925185c5dd89e42637c8002cd371d197847759 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainMonthDay/calendar-monthdayfromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.toplainmonthday -+description: > -+ Calendar.monthDayFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC", calendar); -+instance.toPlainMonthDay(); -+assert.sameValue(calendar.monthDayFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8f75ba30b57aa02231a991a3b3839e7548a2ae02 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainYearMonth/calendar-yearmonthfromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.toplainyearmonth -+description: > -+ Calendar.yearMonthFromFields method is called with undefined as the options -+ value when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC", calendar); -+instance.toPlainYearMonth(); -+assert.sameValue(calendar.yearMonthFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-auto.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-auto.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bffb9289511be791d448afbbfb94e265f7edb37c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-auto.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: auto value for fractionalSecondDigits option -+features: [BigInt, Temporal] -+---*/ -+ -+const zeroSeconds = new Temporal.ZonedDateTime(0n, "UTC"); -+const wholeSeconds = new Temporal.ZonedDateTime(30_000_000_000n, "UTC"); -+const subSeconds = new Temporal.ZonedDateTime(30_123_400_000n, "UTC"); -+ -+const tests = [ -+ [zeroSeconds, "1970-01-01T00:00:00+00:00[UTC]"], -+ [wholeSeconds, "1970-01-01T00:00:30+00:00[UTC]"], -+ [subSeconds, "1970-01-01T00:00:30.1234+00:00[UTC]"], -+]; -+ -+for (const [datetime, expected] of tests) { -+ assert.sameValue(datetime.toString(), expected, "default is to emit seconds and drop trailing zeroes"); -+ assert.sameValue(datetime.toString({ fractionalSecondDigits: "auto" }), expected, "auto is the default"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -index ea172ceb80e7f92aa9801f0ed6697e2ca8a689e7..c933354b9d4c399f19339378a75cc72198832044 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-invalid-string.js -@@ -9,11 +9,14 @@ info: | - 4. If _stringValues_ is not *undefined* and _stringValues_ does not contain an element equal to _value_, throw a *RangeError* exception. - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). -- sec-temporal.instant.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ sec-temporal.zoneddatetime.prototype.tostring step 4: -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_650_000n, "UTC"); - --assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: "other string" })); -+for (const fractionalSecondDigits of ["other string", "AUTO", "not-auto", "autos", "auto\0"]) { -+ assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits }), -+ `"${fractionalSecondDigits}" is not a valid value for fractionalSecondDigits`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-non-integer.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-non-integer.js -index 93685aedece5da3b5a67ac63c8159b994f7932da..a9ccce61d8da3d00e47b2fd0f75113617f2cdc4f 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-non-integer.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-non-integer.js -@@ -10,7 +10,7 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.zoneddatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0063031f20361ec969f21ecbbd21571f0161c489 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-number.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: Number for fractionalSecondDigits option -+features: [BigInt, Temporal] -+---*/ -+ -+const zeroSeconds = new Temporal.ZonedDateTime(0n, "UTC"); -+const wholeSeconds = new Temporal.ZonedDateTime(30_000_000_000n, "UTC"); -+const subSeconds = new Temporal.ZonedDateTime(30_123_400_000n, "UTC"); -+ -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 0 }), "1970-01-01T00:00:30+00:00[UTC]", -+ "truncates 4 decimal places to 0"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 2 }), "1970-01-01T00:00:00.00+00:00[UTC]", -+ "pads zero seconds to 2 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 2 }), "1970-01-01T00:00:30.00+00:00[UTC]", -+ "pads whole seconds to 2 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 2 }), "1970-01-01T00:00:30.12+00:00[UTC]", -+ "truncates 4 decimal places to 2"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 3 }), "1970-01-01T00:00:30.123+00:00[UTC]", -+ "truncates 4 decimal places to 3"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 6 }), "1970-01-01T00:00:30.123400+00:00[UTC]", -+ "pads 4 decimal places to 6"); -+assert.sameValue(zeroSeconds.toString({ fractionalSecondDigits: 7 }), "1970-01-01T00:00:00.0000000+00:00[UTC]", -+ "pads zero seconds to 7 decimal places"); -+assert.sameValue(wholeSeconds.toString({ fractionalSecondDigits: 7 }), "1970-01-01T00:00:30.0000000+00:00[UTC]", -+ "pads whole seconds to 7 decimal places"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 7 }), "1970-01-01T00:00:30.1234000+00:00[UTC]", -+ "pads 4 decimal places to 7"); -+assert.sameValue(subSeconds.toString({ fractionalSecondDigits: 9 }), "1970-01-01T00:00:30.123400000+00:00[UTC]", -+ "pads 4 decimal places to 9"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-out-of-range.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -index 36ae8d1429301af8411eb266d98c3f58b37663e2..487600a4158776e691fa4027e9905fd9e4003c3a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-out-of-range.js -@@ -10,11 +10,17 @@ info: | - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.zoneddatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_650_000n, "UTC"); - --assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: -1 })); --assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: 10 })); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: -Infinity }), -+ "−∞ is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: -1 }), -+ "−1 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: 10 }), -+ "10 is out of range for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: Infinity }), -+ "∞ is out of range for fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-undefined.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-undefined.js -index a4e0a10b5f0ffc80f65b59dde262470846b9f2b0..734f436c4c3e491c2a5a37b79d5b98b9517d89f7 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-undefined.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-undefined.js -@@ -8,17 +8,31 @@ info: | - sec-getoption step 3: - 3. If _value_ is *undefined*, return _fallback_. - sec-getstringornumberoption step 2: -- 2. Let _value_ be ? GetOption(_options_, _property_, *"stringOrNumber"*, *undefined*, _fallback_). -+ 2. Let _value_ be ? GetOption(_options_, _property_, « Number, String », *undefined*, _fallback_). - sec-temporal-tosecondsstringprecision step 9: - 9. Let _digits_ be ? GetStringOrNumberOption(_normalizedOptions_, *"fractionalSecondDigits"*, « *"auto"* », 0, 9, *"auto"*). - sec-temporal.zoneddatetime.prototype.tostring step 4: -- 4. Let _precision_ be ? ToDurationSecondsStringPrecision(_options_). -+ 4. Let _precision_ be ? ToSecondsStringPrecision(_options_). - features: [Temporal] - ---*/ - --const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_650_000n, "UTC"); -+const zeroSeconds = new Temporal.ZonedDateTime(0n, "UTC"); -+const wholeSeconds = new Temporal.ZonedDateTime(30_000_000_000n, "UTC"); -+const subSeconds = new Temporal.ZonedDateTime(30_123_400_000n, "UTC"); - --const explicit = datetime.toString({ fractionalSecondDigits: undefined }); --assert.sameValue(explicit, "2001-09-09T01:46:40.98765+00:00[UTC]", "default fractionalSecondDigits is auto"); -+const tests = [ -+ [zeroSeconds, "1970-01-01T00:00:00+00:00[UTC]"], -+ [wholeSeconds, "1970-01-01T00:00:30+00:00[UTC]"], -+ [subSeconds, "1970-01-01T00:00:30.1234+00:00[UTC]"], -+]; - --// See options-undefined.js for {} -+for (const [datetime, expected] of tests) { -+ const explicit = datetime.toString({ fractionalSecondDigits: undefined }); -+ assert.sameValue(explicit, expected, "default fractionalSecondDigits is auto (property present but undefined)"); -+ -+ const implicit = datetime.toString({}); -+ assert.sameValue(implicit, expected, "default fractionalSecondDigits is auto (property not present)"); -+ -+ const lambda = datetime.toString(() => {}); -+ assert.sameValue(lambda, expected, "default fractionalSecondDigits is auto (property not present, function object)"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -index b147dbac3e25f0151028fad4ce65a8a3f939cf56..9a12691ad6dc8db186884a0adf54f3e3d19e5c0d 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/fractionalseconddigits-wrong-type.js -@@ -22,4 +22,26 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_650_000n, "UTC"); --TemporalHelpers.checkFractionalSecondDigitsOptionWrongType(datetime); -+ -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: null }), -+ "null is not a number and converts to the string 'null' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: true }), -+ "true is not a number and converts to the string 'true' which is not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: false }), -+ "false is not a number and converts to the string 'false' which is not valid for fractionalSecondDigits"); -+assert.throws(TypeError, () => datetime.toString({ fractionalSecondDigits: Symbol() }), -+ "symbols are not numbers and cannot convert to strings"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: 2n }), -+ "bigints are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+assert.throws(RangeError, () => datetime.toString({ fractionalSecondDigits: {} }), -+ "plain objects are not numbers and convert to strings which are not valid for fractionalSecondDigits"); -+ -+const expected = [ -+ "get fractionalSecondDigits.toString", -+ "call fractionalSecondDigits.toString", -+]; -+const actual = []; -+const observer = TemporalHelpers.toPrimitiveObserver(actual, "auto", "fractionalSecondDigits"); -+const result = datetime.toString({ fractionalSecondDigits: observer }); -+assert.sameValue(result, "2001-09-09T01:46:40.98765+00:00[UTC]", "object with toString uses toString return value"); -+assert.compareArray(actual, expected, "object with toString calls toString and not valueOf"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4b579b44d0107b57645ffec002e8a394fe8dae98 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.toString(value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-cross-midnight.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-cross-midnight.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a55db0f240ee4968996e7fb91685987e61975a53 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-cross-midnight.js -@@ -0,0 +1,13 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: Rounding can cross midnight -+features: [Temporal] -+---*/ -+ -+const zonedDateTime = new Temporal.ZonedDateTime(946_684_799_999_999_999n, "UTC"); // one nanosecond before 2000-01-01T00:00:00 -+for (const roundingMode of ["ceil", "halfExpand"]) { -+ assert.sameValue(zonedDateTime.toString({ fractionalSecondDigits: 8, roundingMode }), "2000-01-01T00:00:00.00000000+00:00[UTC]"); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-direction.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-direction.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b376e075bb80a88b5efa51dc112ff501ff923454 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/rounding-direction.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: Rounding down is towards the Big Bang, not the epoch or 1 BCE -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(-65_261_246_399_500_000_000n, "UTC"); // -000099-12-15T12:00:00.5Z -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "floor" }), -+ "-000099-12-15T12:00:00+00:00[UTC]", -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "trunc" }), -+ "-000099-12-15T12:00:00+00:00[UTC]", -+ "Rounding down is towards the Big Bang, not the epoch or 1 BCE (roundingMode trunc)" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "ceil" }), -+ "-000099-12-15T12:00:01+00:00[UTC]", -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode ceil)" -+); -+assert.sameValue( -+ instance.toString({ smallestUnit: "second", roundingMode: "halfExpand" }), -+ "-000099-12-15T12:00:01+00:00[UTC]", -+ "Rounding up is away from the Big Bang, not the epoch or 1 BCE (roundingMode halfExpand)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-ceil.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-ceil.js -new file mode 100644 -index 0000000000000000000000000000000000000000..cd9c1af1edc1b9f3a8b27664f3e8d08afa3ae76a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-ceil.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: ceil value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "ceil" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123988+00:00[UTC]", -+ "roundingMode is ceil (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "ceil" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123988+00:00[UTC]", -+ "roundingMode is ceil (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "ceil" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.124+00:00[UTC]", -+ "roundingMode is ceil (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "ceil" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.124+00:00[UTC]", -+ "roundingMode is ceil (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "ceil" }); -+assert.sameValue(result5, "2001-09-09T01:46:41+00:00[UTC]", -+ "roundingMode is ceil (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "ceil" }); -+assert.sameValue(result6, "2001-09-09T01:46:41+00:00[UTC]", -+ "roundingMode is ceil (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "ceil" }); -+assert.sameValue(result7, "2001-09-09T01:47+00:00[UTC]", "roundingMode is ceil (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-floor.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-floor.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fec4286c461178d799e31b1217af97b02e42efcc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-floor.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: floor value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "floor" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123987+00:00[UTC]", -+ "roundingMode is floor (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "floor" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123987+00:00[UTC]", -+ "roundingMode is floor (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "floor" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.123+00:00[UTC]", -+ "roundingMode is floor (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "floor" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.123+00:00[UTC]", -+ "roundingMode is floor (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "floor" }); -+assert.sameValue(result5, "2001-09-09T01:46:40+00:00[UTC]", -+ "roundingMode is floor (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "floor" }); -+assert.sameValue(result6, "2001-09-09T01:46:40+00:00[UTC]", -+ "roundingMode is floor (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "floor" }); -+assert.sameValue(result7, "2001-09-09T01:46+00:00[UTC]", "roundingMode is floor (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-halfExpand.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-halfExpand.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a4a989cb6ed884cefde4be1a2494e332b97b5f0a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-halfExpand.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: halfExpand value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "halfExpand" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123988+00:00[UTC]", -+ "roundingMode is halfExpand (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "halfExpand" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123988+00:00[UTC]", -+ "roundingMode is halfExpand (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "halfExpand" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.124+00:00[UTC]", -+ "roundingMode is halfExpand (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "halfExpand" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.124+00:00[UTC]", -+ "roundingMode is halfExpand (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "halfExpand" }); -+assert.sameValue(result5, "2001-09-09T01:46:40+00:00[UTC]", -+ "roundingMode is halfExpand (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "halfExpand" }); -+assert.sameValue(result6, "2001-09-09T01:46:40+00:00[UTC]", -+ "roundingMode is halfExpand (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "halfExpand" }); -+assert.sameValue(result7, "2001-09-09T01:47+00:00[UTC]", "roundingMode is halfExpand (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-invalid-string.js -index 01d86acc415e1d88c0c368e5b487464f9f1e4866..50b223237cab431f0a26239600da05b8a12a7653 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-invalid-string.js -@@ -8,4 +8,6 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); --assert.throws(RangeError, () => datetime.toString({ smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => datetime.toString({ smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-trunc.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-trunc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8fc3ca0dca9b0dc7216e80e8696b9709e910f8fe ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/roundingmode-trunc.js -@@ -0,0 +1,37 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: trunc value for roundingMode option -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); -+ -+const result1 = datetime.toString({ smallestUnit: "microsecond", roundingMode: "trunc" }); -+assert.sameValue(result1, "2001-09-09T01:46:40.123987+00:00[UTC]", -+ "roundingMode is trunc (with 6 digits from smallestUnit)"); -+ -+const result2 = datetime.toString({ fractionalSecondDigits: 6, roundingMode: "trunc" }); -+assert.sameValue(result2, "2001-09-09T01:46:40.123987+00:00[UTC]", -+ "roundingMode is trunc (with 6 digits from fractionalSecondDigits)"); -+ -+const result3 = datetime.toString({ smallestUnit: "millisecond", roundingMode: "trunc" }); -+assert.sameValue(result3, "2001-09-09T01:46:40.123+00:00[UTC]", -+ "roundingMode is trunc (with 3 digits from smallestUnit)"); -+ -+const result4 = datetime.toString({ fractionalSecondDigits: 3, roundingMode: "trunc" }); -+assert.sameValue(result4, "2001-09-09T01:46:40.123+00:00[UTC]", -+ "roundingMode is trunc (with 3 digits from fractionalSecondDigits)"); -+ -+const result5 = datetime.toString({ smallestUnit: "second", roundingMode: "trunc" }); -+assert.sameValue(result5, "2001-09-09T01:46:40+00:00[UTC]", -+ "roundingMode is trunc (with 0 digits from smallestUnit)"); -+ -+const result6 = datetime.toString({ fractionalSecondDigits: 0, roundingMode: "trunc" }); -+assert.sameValue(result6, "2001-09-09T01:46:40+00:00[UTC]", -+ "roundingMode is trunc (with 0 digits from fractionalSecondDigits)"); -+ -+const result7 = datetime.toString({ smallestUnit: "minute", roundingMode: "trunc" }); -+assert.sameValue(result7, "2001-09-09T01:46+00:00[UTC]", "roundingMode is trunc (round to minute)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-fractionalseconddigits.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-fractionalseconddigits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7845c10bfb258966f326bbca3546da1a615f0dd2 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-fractionalseconddigits.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: fractionalSecondDigits option is not used with smallestUnit present -+features: [Temporal] -+---*/ -+ -+const datetime = new Temporal.ZonedDateTime(56_789_999_999n, "UTC"); -+const tests = [ -+ ["minute", "1970-01-01T00:00+00:00[UTC]"], -+ ["second", "1970-01-01T00:00:56+00:00[UTC]"], -+ ["millisecond", "1970-01-01T00:00:56.789+00:00[UTC]"], -+ ["microsecond", "1970-01-01T00:00:56.789999+00:00[UTC]"], -+ ["nanosecond", "1970-01-01T00:00:56.789999999+00:00[UTC]"], -+]; -+ -+for (const [smallestUnit, expected] of tests) { -+ const string = datetime.toString({ -+ smallestUnit, -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+ }); -+ assert.sameValue(string, expected, `smallestUnit: "${smallestUnit}" overrides fractionalSecondDigits`); -+} -+ -+assert.throws(RangeError, () => datetime.toString({ -+ smallestUnit: "hour", -+ get fractionalSecondDigits() { throw new Test262Error("should not get fractionalSecondDigits") } -+}), "hour is an invalid smallestUnit but still overrides fractionalSecondDigits"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-invalid-string.js -index d3940464811bd1368de8e23db9fca293f0ec0787..1ba9732789b96e0036e5daef618c8b2d4c6d8aa1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-invalid-string.js -@@ -8,4 +8,30 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_987_500n, "UTC"); --assert.throws(RangeError, () => datetime.toString({ smallestUnit: "other string" })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "year", -+ "month", -+ "week", -+ "day", -+ "hour", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "years", -+ "months", -+ "weeks", -+ "days", -+ "hours", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => datetime.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-valid-units.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-valid-units.js -index 12c10368b64a641ebf2a8685168470db88f6039b..6ea787955a9da3ca5bd905d2cdea6dc08c49e7db 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-valid-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/smallestunit-valid-units.js -@@ -9,13 +9,39 @@ features: [Temporal] - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_123_456_789n, "UTC"); - --assert.sameValue(datetime.toString({ smallestUnit: "minute" }), "2001-09-09T01:46+00:00[UTC]"); --assert.sameValue(datetime.toString({ smallestUnit: "second" }), "2001-09-09T01:46:40+00:00[UTC]"); --assert.sameValue(datetime.toString({ smallestUnit: "millisecond" }), "2001-09-09T01:46:40.123+00:00[UTC]"); --assert.sameValue(datetime.toString({ smallestUnit: "microsecond" }), "2001-09-09T01:46:40.123456+00:00[UTC]"); --assert.sameValue(datetime.toString({ smallestUnit: "nanosecond" }), "2001-09-09T01:46:40.123456789+00:00[UTC]"); -+function test(instance, expectations, description) { -+ for (const [smallestUnit, expectedResult] of expectations) { -+ assert.sameValue(instance.toString({ smallestUnit }), expectedResult, -+ `${description} with smallestUnit "${smallestUnit}"`); -+ } -+} -+ -+test( -+ datetime, -+ [ -+ ["minute", "2001-09-09T01:46+00:00[UTC]"], -+ ["second", "2001-09-09T01:46:40+00:00[UTC]"], -+ ["millisecond", "2001-09-09T01:46:40.123+00:00[UTC]"], -+ ["microsecond", "2001-09-09T01:46:40.123456+00:00[UTC]"], -+ ["nanosecond", "2001-09-09T01:46:40.123456789+00:00[UTC]"], -+ ], -+ "subseconds toString" -+); -+ -+test( -+ new Temporal.ZonedDateTime(999_999_960_000_000_000n, "UTC"), -+ [ -+ ["minute", "2001-09-09T01:46+00:00[UTC]"], -+ ["second", "2001-09-09T01:46:00+00:00[UTC]"], -+ ["millisecond", "2001-09-09T01:46:00.000+00:00[UTC]"], -+ ["microsecond", "2001-09-09T01:46:00.000000+00:00[UTC]"], -+ ["nanosecond", "2001-09-09T01:46:00.000000000+00:00[UTC]"], -+ ], -+ "whole minutes toString" -+); - - const notValid = [ -+ "era", - "year", - "month", - "week", -@@ -24,5 +50,6 @@ const notValid = [ - ]; - - notValid.forEach((smallestUnit) => { -- assert.throws(RangeError, () => datetime.toString({ smallestUnit }), smallestUnit); -+ assert.throws(RangeError, () => datetime.toString({ smallestUnit }), -+ `"${smallestUnit}" is not a valid unit for the smallestUnit option`); - }); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/year-format.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/year-format.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1532bf1fecda3caaa1f962c03662ef577e4d69ce ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/toString/year-format.js -@@ -0,0 +1,55 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.tostring -+description: Verify that the year is appropriately formatted as 4 or 6 digits -+features: [Temporal] -+---*/ -+ -+function epochNsInYear(year) { -+ // Return an epoch nanoseconds value near the middle of the given year -+ const avgNsPerYear = 31_556_952_000_000_000n; -+ return (year - 1970n) * avgNsPerYear + (avgNsPerYear / 2n); -+} -+ -+const utc = new Temporal.TimeZone("UTC"); -+ -+let instance = new Temporal.ZonedDateTime(epochNsInYear(-100000n), utc); -+assert.sameValue(instance.toString(), "-100000-07-01T21:30:36+00:00[UTC]", "large negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-10000n), utc); -+assert.sameValue(instance.toString(), "-010000-07-01T21:30:36+00:00[UTC]", "smallest 5-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-9999n), utc); -+assert.sameValue(instance.toString(), "-009999-07-02T03:19:48+00:00[UTC]", "largest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-1000n), utc); -+assert.sameValue(instance.toString(), "-001000-07-02T09:30:36+00:00[UTC]", "smallest 4-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-999n), utc); -+assert.sameValue(instance.toString(), "-000999-07-02T15:19:48+00:00[UTC]", "largest 3-digit negative year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(-1n), utc); -+assert.sameValue(instance.toString(), "-000001-07-02T15:41:24+00:00[UTC]", "year -1 formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(0n), utc); -+assert.sameValue(instance.toString(), "0000-07-01T21:30:36+00:00[UTC]", "year 0 formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(1n), utc); -+assert.sameValue(instance.toString(), "0001-07-02T03:19:48+00:00[UTC]", "year 1 formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(999n), utc); -+assert.sameValue(instance.toString(), "0999-07-02T03:41:24+00:00[UTC]", "largest 3-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(1000n), utc); -+assert.sameValue(instance.toString(), "1000-07-02T09:30:36+00:00[UTC]", "smallest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(9999n), utc); -+assert.sameValue(instance.toString(), "9999-07-02T15:41:24+00:00[UTC]", "largest 4-digit positive year formatted as 4-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(10000n), utc); -+assert.sameValue(instance.toString(), "+010000-07-01T21:30:36+00:00[UTC]", "smallest 5-digit positive year formatted as 6-digit"); -+ -+instance = new Temporal.ZonedDateTime(epochNsInYear(100000n), utc); -+assert.sameValue(instance.toString(), "+100000-07-01T21:30:36+00:00[UTC]", "large positive year formatted as 6-digit"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..df3b9989a817896a419cca4dab11496ed9a88c3f ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: Leap second is a valid ISO string for a calendar in a property bag -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const calendar = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result1, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result2, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7db7eaa625bbf21772628264bafb13a6ba3d39d0 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-number.js -@@ -0,0 +1,43 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+const result1 = instance.until(arg); -+TemporalHelpers.assertDuration(result1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+const result2 = instance.until(arg); -+TemporalHelpers.assertDuration(result2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1970, monthCode: "M01", day: 1, timeZone, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a2d75d18de4783fd284968841ef9c81010158e6c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.until(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f3355384ff32c9f22adea2aa02313b84f1d2159c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..79609f3e2b89dcc753ef43855454ea941272b9e1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for ZonedDateTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.ZonedDateTime, "Temporal.ZonedDateTime, object"], -+ [Temporal.ZonedDateTime.prototype, "Temporal.ZonedDateTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/calendar-dateadd-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/calendar-dateadd-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..13bdd33972e23e19843453b26ec910ee5835b489 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/calendar-dateadd-called-with-options-undefined.js -@@ -0,0 +1,69 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: > -+ BuiltinTimeZoneGetInstantFor calls Calendar.dateAdd with undefined as the -+ options value -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarDateAddUndefinedOptions(); -+const timeZone = TemporalHelpers.oneShiftTimeZone(new Temporal.Instant(0n), 3600e9); -+const earlier = new Temporal.ZonedDateTime(0n, timeZone, calendar); -+ -+// Basic difference with largestUnit larger than days. -+// The calls come from these paths: -+// ZonedDateTime.until() -> DifferenceZonedDateTime -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+ -+const later1 = new Temporal.ZonedDateTime(1_213_200_000_000_000n, timeZone, calendar); -+earlier.until(later1, { largestUnit: "weeks" }); -+assert.sameValue(calendar.dateAddCallCount, 2, "basic difference with largestUnit >days"); -+ -+// Basic difference with largestUnit equal to days, to cover the second path in -+// AddZonedDateTime. -+// The calls come from these paths: -+// ZonedDateTime.until() -> DifferenceZonedDateTime -> NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+ -+calendar.dateAddCallCount = 0; -+ -+earlier.until(later1, { largestUnit: "days" }); -+assert.sameValue(calendar.dateAddCallCount, 2, "basic difference with largestUnit days"); -+ -+// Difference with rounding, with smallestUnit a calendar unit. -+// The calls come from these paths: -+// ZonedDateTime.until() -> -+// DifferenceZonedDateTime -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// RoundDuration -> -+// MoveRelativeZonedDateTime -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// MoveRelativeDate -> calendar.dateAdd() -+ -+calendar.dateAddCallCount = 0; -+ -+earlier.until(later1, { smallestUnit: "weeks" }); -+assert.sameValue(calendar.dateAddCallCount, 5, "rounding difference with calendar smallestUnit"); -+ -+// Difference with rounding, with smallestUnit a non-calendar unit, and having -+// the resulting time difference be longer than a calendar day, covering the -+// paths that go through AdjustRoundedDurationDays. -+// The calls come from these paths: -+// ZonedDateTime.until() -> -+// DifferenceZonedDateTime -> NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// AdjustRoundedDurationDays -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// AddDuration -> -+// AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() -+// DifferenceZonedDateTime -> NanosecondsToDays -> AddZonedDateTime -> BuiltinTimeZoneGetInstantFor -> calendar.dateAdd() (2x) -+ -+calendar.dateAddCallCount = 0; -+ -+const later2 = new Temporal.ZonedDateTime(86_399_999_999_999n, timeZone, calendar); -+earlier.until(later2, { largestUnit: "days", smallestUnit: "hours", roundingMode: "ceil" }); -+assert.sameValue(calendar.dateAddCallCount, 5, "rounding difference with non-calendar smallestUnit and time difference longer than a calendar day"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-invalid-string.js -index a59c2f2e43c12a47b0c7f19b676ff6f8d6b1fc32..2be916f177854232442c9819b408f13d8f6babec 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/largestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - const later = new Temporal.ZonedDateTime(1_000_090_061_987_654_321n, "UTC"); --const values = ["era", "eraYear", "other string"]; --for (const largestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { largestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string" -+]; -+for (const largestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { largestUnit }), -+ `"${largestUnit}" is not a valid value for largestUnit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ffa342eff0020e154f361922116e385dbcfc6826 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/leap-second.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: Leap second is a valid ISO string for ZonedDateTime -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_483_228_799_000_000_000n, timeZone); -+ -+let arg = "2016-12-31T23:59:60+00:00[UTC]"; -+const result = instance.until(arg); -+TemporalHelpers.assertDuration( -+ result, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ "leap second is a valid ISO string for ZonedDateTime" -+); -+ -+arg = "2000-05-02T12:34:56+23:59[+23:59:60]"; -+assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "leap second in time zone name not valid" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..55b128637ea9aba19bc5758fcd354cc76c75fac5 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.until(new Temporal.ZonedDateTime(3600_000_000_000n, "UTC"), value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/roundingmode-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/roundingmode-invalid-string.js -index 70d982765916dcce1ba836f6b536a7130ff23b29..3cedb0046df6be08a03d63a714a57aa38e8091e2 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/roundingmode-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/roundingmode-invalid-string.js -@@ -9,4 +9,6 @@ features: [Temporal] - - const earlier = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - const later = new Temporal.ZonedDateTime(1_000_090_061_123_987_500n, "UTC"); --assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode: "other string" })); -+for (const roundingMode of ["other string", "cile", "CEIL", "ce\u0131l", "auto", "expand", "halfCeil", "halfFloor", "halfTrunc", "halfEven", "halfexpand", "floor\0"]) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit: "microsecond", roundingMode })); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/smallestunit-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/smallestunit-invalid-string.js -index 42f55bc85038e26b09033f053c37f4739fa1fa0d..4f09f10f68844c81ac9f6ce5198ad0a665c03de1 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/smallestunit-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/smallestunit-invalid-string.js -@@ -9,7 +9,20 @@ features: [Temporal] - - const earlier = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - const later = new Temporal.ZonedDateTime(1_000_090_061_987_654_321n, "UTC"); --const values = ["era", "eraYear", "other string"]; --for (const smallestUnit of values) { -- assert.throws(RangeError, () => earlier.until(later, { smallestUnit })); -+const badValues = [ -+ "era", -+ "eraYear", -+ "millisecond\0", -+ "mill\u0131second", -+ "SECOND", -+ "eras", -+ "eraYears", -+ "milliseconds\0", -+ "mill\u0131seconds", -+ "SECONDS", -+ "other string", -+]; -+for (const smallestUnit of badValues) { -+ assert.throws(RangeError, () => earlier.until(later, { smallestUnit }), -+ `"${smallestUnit}" is not a valid value for smallest unit`); - } -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..40dddba2e70de933649907609628e0591589e5ab ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-leap-second.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const expectedTimeZone = "UTC"; -+const instance = new Temporal.ZonedDateTime(0n, expectedTimeZone); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+// These operations should produce expectedTimeZone, so the following operations -+// should not throw due to the time zones being different on the receiver and -+// the argument. -+ -+instance.until({ year: 2020, month: 5, day: 2, timeZone }); -+instance.until({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone }), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c733c4103ead8b6e326b739c9164c0a87ca7b9e6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.until({ year: 2020, month: 5, day: 2, timeZone }), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.until({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..53f4330b9a0b7ceaed3d66bfdef576ae0576b56a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.until -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone }), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone }), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.until({ year: 2020, month: 5, day: 2, timeZone: { timeZone } }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js -index 0a8b5e6cb1604db5eded5d60a2b485d3b4f43b67..fb6e140e22acfb242c2e36b49996e855c9815290 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/until/year-zero.js -@@ -4,11 +4,20 @@ - /*--- - esid: sec-temporal.zoneddatetime.prototype.until - description: Negative zero, as an extended year, is rejected --features: [Temporal] -+features: [Temporal, arrow-function] - ---*/ - -+const invalidStrings = [ -+ "-0000000-01-01T00:02Z[UTC]", -+ "-0000000-01-01T00:02+00:00[UTC]", -+ "-0000000-01-01T00:02:00.000000000+00:00[UTC]", -+]; - const timeZone = new Temporal.TimeZone("UTC"); - const instance = new Temporal.ZonedDateTime(0n, timeZone); --const str = "-0000000-01-01T00:02:00.000000000+00:00[UTC]"; -- --assert.throws(RangeError, () => { instance.until(str); }, "reject minus zero as extended year"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.until(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/options-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/options-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5f4d25d930506d679ee3e19702d977fbc349b70a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/options-wrong-type.js -@@ -0,0 +1,23 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.with -+description: TypeError thrown when options argument is a primitive -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const badOptions = [ -+ null, -+ true, -+ "some string", -+ Symbol(), -+ 1, -+ 2n, -+]; -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+for (const value of badOptions) { -+ assert.throws(TypeError, () => instance.with({ day: 5 }, value), -+ `TypeError on wrong options type ${typeof value}`); -+}; -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/overflow-invalid-string.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/overflow-invalid-string.js -index 96d5ab3799d6b0390528bc0c273bf886c0e96d3c..843437f59fd0a763c2458f7689ffbb5b16522328 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/overflow-invalid-string.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/with/overflow-invalid-string.js -@@ -18,4 +18,11 @@ features: [Temporal] - ---*/ - - const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, "UTC"); --assert.throws(RangeError, () => datetime.with({ minute: 45 }, { overflow: "other string" })); -+const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; -+for (const overflow of badOverflows) { -+ assert.throws( -+ RangeError, -+ () => datetime.with({ minute: 45 }, { overflow }), -+ `invalid overflow ("${overflow}")` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0a299d540fb0713e7becaf5f499822c108271f23 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withcalendar -+description: A number is converted to a string, then to Temporal.Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC", { id: "replace-me" }); -+ -+const arg = 19761118; -+ -+const result = instance.withCalendar(arg); -+assert.sameValue(result.calendar.id, "iso8601", "19761118 is a valid ISO string for Calendar"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withCalendar(arg), -+ `Number ${arg} does not convert to a valid ISO string for Calendar` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..29e229cc10a200d3c05b672118c9a5ed09b646f6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-string-leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withcalendar -+description: Leap second is a valid ISO string for Calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC", { id: "replace-me" }); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withCalendar(arg); -+assert.sameValue( -+ result1.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar" -+); -+ -+arg = { calendar: "2016-12-31T23:59:60" }; -+const result2 = instance.withCalendar(arg); -+assert.sameValue( -+ result2.calendar.id, -+ "iso8601", -+ "leap second is a valid ISO string for Calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d4f8e996a1ebefa5330914b8ff549951c181b544 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withCalendar/calendar-wrong-type.js -@@ -0,0 +1,32 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withcalendar -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for Calendar -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC", { id: "replace-me" }); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withCalendar(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withCalendar(arg), `${description} is not a valid object and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f251b281fda0ceb3f651ecc455b6dfc2cbc4b16c ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+ -+const arg = 19761118; -+ -+const result = instance.withPlainDate(arg); -+assert.sameValue(result.epochNanoseconds, 217_129_600_000_000_000n, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ebc5f7ce7fdbfc0a3b8c468d5910b425be062eb1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, timeZone); -+ -+const calendar = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.withPlainDate(arg); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 217_129_600_000_000_000n, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.withPlainDate(arg); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 217_129_600_000_000_000n, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b5c7061ced56f89ace3792bd866c862ebf1e04f7 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-number.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, timeZone); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.withPlainDate(arg); -+assert.sameValue(result1.epochNanoseconds, 217_129_600_000_000_000n, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.withPlainDate(arg); -+assert.sameValue(result2.epochNanoseconds, 217_129_600_000_000_000n, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..54ed639ee706b7a9e574357bf9ae6ff8dcb4c9a1 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, timeZone); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.withPlainDate(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.withPlainDate(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.withPlainDate(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.withPlainDate(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.withPlainDate(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5bd85409f332fe4a5ee897acebd31b548f5d4dfc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, timeZone); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-string-invalid.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..003bf13f1b85b4195621ac47375c6cd8db61b755 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainDate(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..20a9cd9474e39004f1a0ac925cea7fd15279a92a ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withPlainDate(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withPlainDate(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f19cc9fac12c8d72a7a44674efcf4a15d41467da ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC", calendar); -+instance.withPlainDate({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..62e81954d3d8de538526cb0efcc9cb9e6812b163 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaindate -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withPlainDate(arg); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 1_483_148_800_000_000_000n, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.withPlainDate(arg); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 1_483_148_800_000_000_000n, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js -index 0c66b19fd140dfaa7591b39b206ddd7d8a2d6872..af58036ea97fa23eb413080f8acab597fdd3886a 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/year-zero.js -@@ -7,11 +7,18 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; --const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -- --assert.throws( -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.withPlainDate(arg); }, -+ () => instance.withPlainDate(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-number.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..13dc510e5b3ee3c137114da35332ef9a4c7cb229 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-number.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaintime -+description: A number is converted to a string, then to Temporal.PlainTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+ -+const arg = 123456.987654321; -+ -+const result = instance.withPlainTime(arg); -+assert.sameValue(result.epochNanoseconds, 1000038896_987_654_321n, "123456.987654321 is a valid ISO string for PlainTime"); -+ -+const numbers = [ -+ 1, -+ -123456.987654321, -+ 1234567, -+ 123456.9876543219, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.withPlainTime(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainTime` -+ ); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -index 129743e863f2338ee33fda3b8ae60332f50fa0c3..a2b10a2b5d67103dbcba03d0c7f8e7f4d1d1ab30 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-time-designator-required-for-disambiguation.js -@@ -27,6 +27,13 @@ ambiguousStrings.forEach((string) => { - // The same string with a T prefix should not throw: - arg = `T${string}`; - instance.withPlainTime(arg); -+ -+ arg = ` ${string}`; -+ assert.throws( -+ RangeError, -+ () => instance.withPlainTime(arg), -+ "space is not accepted as a substitute for T prefix" -+ ); - }); - - // None of these should throw without a T prefix, because they are unambiguously time strings: -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..85589a45b9bd4c6540cf05c089d8736730ad2a74 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-wrong-type.js -@@ -0,0 +1,35 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaintime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainTime -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withPlainTime(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainTime, "Temporal.PlainTime, object"], -+ [Temporal.PlainTime.prototype, "Temporal.PlainTime.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withPlainTime(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9110c08d8fd88529726aeb195092f363e9b5436b ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withplaintime -+description: Leap second is a valid ISO string for PlainTime -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.withPlainTime(arg); -+assert.sameValue( -+ result1.epochNanoseconds, -+ 1000079999_000_000_000n, -+ "leap second is a valid ISO string for PlainTime" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.withPlainTime(arg); -+assert.sameValue( -+ result2.epochNanoseconds, -+ 1000079999_000_000_000n, -+ "second: 60 is ignored in property bag for PlainTime" -+); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -index 5ecf3e33745ce5380cecb577a5a7ed04a1713634..e6df5e8472d4afdf4a6719c98a528c9dfc385e7e 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units.js -@@ -10,7 +10,7 @@ features: [Temporal] - const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); - - const props = {}; --assert.throws(TypeError, () => instance.withPlainTime(props), "TypeError if at least one property is not present"); -+assert.throws(TypeError, () => instance.withPlainTime(props), "TypeError if no properties are present"); - - props.minute = 30; - const result = instance.withPlainTime(props); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js -index 13f6ae2518636a8b3b14bcf65a86213a7fd200b8..f5fa8e920e022a3ae6111218da12d710eab3d803 100644 ---- a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/year-zero.js -@@ -8,10 +8,12 @@ features: [Temporal, arrow-function] - ---*/ - - const invalidStrings = [ -- '-000000-12-07T03:24:30', -- '-000000-12-07T03:24:30+01:00[UTC]' -+ "-000000-12-07T03:24:30", -+ "-000000-12-07T03:24:30+01:00", -+ "-000000-12-07T03:24:30+00:00[UTC]", - ]; --const instance = new Temporal.ZonedDateTime(1_000_000_000_000_000_000n, "UTC"); -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.ZonedDateTime(0n, timeZone); - invalidStrings.forEach((arg) => { - assert.throws( - RangeError, -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..93fc6d9d0ea167181fed64440603934653a1aef3 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-leap-second.js -@@ -0,0 +1,20 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withtimezone -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(0n, "UTC"); -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = instance.withTimeZone(timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone"); -+const result2 = instance.withTimeZone({ timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "leap second is a valid ISO string for TimeZone (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => instance.withTimeZone(timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => instance.withTimeZone({ timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-year-zero.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fc14d8ed3a37e7a61fc3d5d5c6cd827a8ae4eed6 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-string-year-zero.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withtimezone -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+invalidStrings.forEach((timeZone) => { -+ assert.throws( -+ RangeError, -+ () => instance.withTimeZone(timeZone), -+ "reject minus zero as extended year" -+ ); -+ assert.throws( -+ RangeError, -+ () => instance.withTimeZone({ timeZone }), -+ "reject minus zero as extended year (nested property)" -+ ); -+}); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ccb404ce43516c8e81325a55d6566bf72fad0664 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime.prototype.withtimezone -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.ZonedDateTime(0n, new Temporal.TimeZone("UTC")); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.withTimeZone(timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => instance.withTimeZone({ timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.withTimeZone(timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => instance.withTimeZone({ timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => instance.withTimeZone({ timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-leap-second.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..966502ef8fa3562d0067588591973d0d84b6f3cc ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-leap-second.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime -+description: Leap second is a valid ISO string for TimeZone -+features: [Temporal] -+---*/ -+ -+let timeZone = "2016-12-31T23:59:60+00:00[UTC]"; -+ -+const result1 = new Temporal.ZonedDateTime(0n, timeZone); -+assert.sameValue(result1.timeZone.id, "UTC", "Time zone string determined from bracket name"); -+const result2 = new Temporal.ZonedDateTime(0n, { timeZone }); -+assert.sameValue(result2.timeZone.id, "UTC", "Time zone string determined from bracket name (nested property)"); -+ -+timeZone = "2021-08-19T17:30:45.123456789+23:59[+23:59:60]"; -+assert.throws(RangeError, () => new Temporal.ZonedDateTime(0n, timeZone), "leap second in time zone name not valid"); -+assert.throws(RangeError, () => new Temporal.ZonedDateTime(0n, { timeZone }), "leap second in time zone name not valid (nested property)"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-multiple-offsets.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-multiple-offsets.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f1b9432c8f5c69780a10561362e11f420b2d9c00 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-string-multiple-offsets.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime -+description: Time zone strings with UTC offset fractional part are not confused with time fractional part -+features: [Temporal] -+---*/ -+ -+const timeZone = "2021-08-19T17:30:45.123456789+01:46[+01:45:30.987654321]"; -+ -+const result1 = new Temporal.ZonedDateTime(0n, timeZone); -+assert.sameValue(result1.timeZone.id, "+01:45:30.987654321", "Time zone string determined from bracket name"); -+const result2 = new Temporal.ZonedDateTime(0n, { timeZone }); -+assert.sameValue(result2.timeZone.id, "+01:45:30.987654321", "Time zone string determined from bracket name"); -diff --git a/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-wrong-type.js b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..163050b3ce3eec8cd86821725c447f8b19fde297 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/Temporal/ZonedDateTime/timezone-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.zoneddatetime -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or object for TimeZone -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [19761118, "number that would convert to a valid ISO string in other contexts"], -+ [1n, "bigint"], -+]; -+ -+for (const [timeZone, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => new Temporal.ZonedDateTime(0n, timeZone), `${description} does not convert to a valid ISO string`); -+ assert.throws(RangeError, () => new Temporal.ZonedDateTime(0n, { timeZone }), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+]; -+ -+for (const [timeZone, description] of typeErrorTests) { -+ assert.throws(TypeError, () => new Temporal.ZonedDateTime(0n, timeZone), `${description} is not a valid object and does not convert to a string`); -+ assert.throws(TypeError, () => new Temporal.ZonedDateTime(0n, { timeZone }), `${description} is not a valid object and does not convert to a string (nested property)`); -+} -+ -+const timeZone = undefined; -+assert.throws(RangeError, () => new Temporal.ZonedDateTime(0n, { timeZone }), `undefined is always a RangeError as nested property`); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/set/BigInt/array-arg-targetbuffer-detached-on-get-src-value-throws.js b/JSTests/test262/test/built-ins/TypedArray/prototype/set/BigInt/array-arg-targetbuffer-detached-on-get-src-value-throws.js -deleted file mode 100644 -index 568e8b9b08a7f407d3c98c9d2ee6db43c0e5443b..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArray/prototype/set/BigInt/array-arg-targetbuffer-detached-on-get-src-value-throws.js -+++ /dev/null -@@ -1,45 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-%typedarray%.prototype.set-array-offset --description: > -- Throws an error if buffer is detached before setting a value --info: | -- 22.2.3.23.1 %TypedArray%.prototype.set (array [ , offset ] ) -- -- 1. Assert: array is any ECMAScript language value other than an Object with a -- [[TypedArrayName]] internal slot. If it is such an Object, the definition in -- 22.2.3.23.2 applies. -- ... -- 21. Repeat, while targetByteIndex < limit -- a. Let Pk be ! ToString(k). -- b. Let kNumber be ? ToNumber(? Get(src, Pk)). -- c. If IsDetachedBuffer(targetBuffer) is true, throw a TypeError exception. -- d. Perform SetValueInBuffer(targetBuffer, targetByteIndex, targetType, -- kNumber). -- ... --includes: [testBigIntTypedArray.js, detachArrayBuffer.js] --features: [BigInt, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA([1n, 2n, 3n]); -- var obj = { -- length: 3, -- "0": 42n -- }; -- Object.defineProperty(obj, 1, { -- get: function() { -- $DETACHBUFFER(sample.buffer); -- } -- }); -- Object.defineProperty(obj, 2, { -- get: function() { -- throw new Test262Error("Should not get other values"); -- } -- }); -- -- assert.throws(TypeError, function() { -- sample.set(obj); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js b/JSTests/test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1d514622089f6f57845fb272ff9bb9cbbbd99572 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+/*--- -+esid: sec-%typedarray%.prototype.set-array-offset -+description: > -+ Does not throw if target TA is detached mid-iteration -+includes: [testTypedArray.js, detachArrayBuffer.js] -+features: [TypedArray] -+---*/ -+ -+testWithTypedArrayConstructors(function(TA) { -+ var sample = new TA([1, 2, 3]); -+ var obj = { -+ length: 3, -+ "0": 42 -+ }; -+ Object.defineProperty(obj, 1, { -+ get: function() { -+ $DETACHBUFFER(sample.buffer); -+ } -+ }); -+ let get2Called = false; -+ Object.defineProperty(obj, 2, { -+ get: function() { -+ get2Called = true; -+ return 2; -+ } -+ }); -+ -+ sample.set(obj); -+ -+ assert.sameValue(true, get2Called); -+ assert.sameValue(0, sample.byteLength); -+ assert.sameValue(0, sample.byteOffset); -+ assert.sameValue(0, sample.length); -+}); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-throws.js b/JSTests/test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-throws.js -deleted file mode 100644 -index eed7db0831ad2dc1539d4aea853604e1f41b4c26..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-throws.js -+++ /dev/null -@@ -1,45 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-%typedarray%.prototype.set-array-offset --description: > -- Throws an error if buffer is detached before setting a value --info: | -- 22.2.3.23.1 %TypedArray%.prototype.set (array [ , offset ] ) -- -- 1. Assert: array is any ECMAScript language value other than an Object with a -- [[TypedArrayName]] internal slot. If it is such an Object, the definition in -- 22.2.3.23.2 applies. -- ... -- 21. Repeat, while targetByteIndex < limit -- a. Let Pk be ! ToString(k). -- b. Let kNumber be ? ToNumber(? Get(src, Pk)). -- c. If IsDetachedBuffer(targetBuffer) is true, throw a TypeError exception. -- d. Perform SetValueInBuffer(targetBuffer, targetByteIndex, targetType, -- kNumber). -- ... --includes: [testTypedArray.js, detachArrayBuffer.js] --features: [TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA([1, 2, 3]); -- var obj = { -- length: 3, -- "0": 42 -- }; -- Object.defineProperty(obj, 1, { -- get: function() { -- $DETACHBUFFER(sample.buffer); -- } -- }); -- Object.defineProperty(obj, 2, { -- get: function() { -- throw new Test262Error("Should not get other values"); -- } -- }); -- -- assert.throws(TypeError, function() { -- sample.set(obj); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/BigInt/detached-buffer-comparefn.js b/JSTests/test262/test/built-ins/TypedArray/prototype/sort/BigInt/detached-buffer-comparefn.js -deleted file mode 100644 -index caa7f80a28a81620adfd8eebdb3a7ef5ffd5edd0..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/BigInt/detached-buffer-comparefn.js -+++ /dev/null -@@ -1,38 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-%typedarray%.prototype.sort --description: Throws a TypeError if comparefn detaches the object buffer --info: | -- 22.2.3.26 %TypedArray%.prototype.sort ( comparefn ) -- -- When the TypedArray SortCompare abstract operation is called with two -- arguments x and y, the following steps are taken: -- -- ... -- 2. If the argument comparefn is not undefined, then -- a. Let v be ? Call(comparefn, undefined, « x, y »). -- b. If IsDetachedBuffer(buffer) is true, throw a TypeError exception. -- ... -- ... --includes: [testBigIntTypedArray.js, detachArrayBuffer.js] --features: [BigInt, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(4); -- var calls = 0; -- var comparefn = function() { -- if (calls > 0) { -- throw new Test262Error(); -- } -- calls++; -- $DETACHBUFFER(sample.buffer); -- }; -- -- assert.throws(TypeError, function() { -- sample.sort(comparefn); -- }); -- -- assert.sameValue(calls, 1); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn-coerce.js b/JSTests/test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn-coerce.js -deleted file mode 100644 -index 6e2be4cafda7d5784b6bd1ab8ca3a796ee803f61..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn-coerce.js -+++ /dev/null -@@ -1,44 +0,0 @@ --// Copyright (C) 2020 Google. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-%typedarray%.prototype.sort --description: > -- SECURITY Throws a TypeError if coercion of the comparefn return value -- detaches the object buffer --info: | -- 22.2.3.26 %TypedArray%.prototype.sort ( comparefn ) -- -- When the TypedArray SortCompare abstract operation is called with two -- arguments x and y, the following steps are taken: -- -- ... -- 2. If the argument comparefn is not undefined, then -- a. Let v be ? ToNumber(? Call(comparefn, undefined, « x, y »)). -- b. If IsDetachedBuffer(buffer) is true, throw a TypeError exception. -- ... -- ... --includes: [testTypedArray.js, detachArrayBuffer.js] --features: [TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(4); -- var calls = 0; -- var convertfn = function(){ -- $DETACHBUFFER(sample.buffer); -- return 1; -- } -- var comparefn = function() { -- if (calls > 0) { -- throw new Test262Error(); -- } -- calls++; -- return {valueOf : convertfn} -- }; -- -- assert.throws(TypeError, function() { -- sample.sort(comparefn); -- }, "Coercion that detaches buffer should throw TypeError"); -- -- assert.sameValue(calls, 1); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn.js b/JSTests/test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn.js -deleted file mode 100644 -index 6ff08beb603b8acd794da05778f2ab661c693c4b..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/detached-buffer-comparefn.js -+++ /dev/null -@@ -1,38 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-%typedarray%.prototype.sort --description: Throws a TypeError if comparefn detaches the object buffer --info: | -- 22.2.3.26 %TypedArray%.prototype.sort ( comparefn ) -- -- When the TypedArray SortCompare abstract operation is called with two -- arguments x and y, the following steps are taken: -- -- ... -- 2. If the argument comparefn is not undefined, then -- a. Let v be ? Call(comparefn, undefined, « x, y »). -- b. If IsDetachedBuffer(buffer) is true, throw a TypeError exception. -- ... -- ... --includes: [testTypedArray.js, detachArrayBuffer.js] --features: [TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(4); -- var calls = 0; -- var comparefn = function() { -- if (calls > 0) { -- throw new Test262Error(); -- } -- calls++; -- $DETACHBUFFER(sample.buffer); -- }; -- -- assert.throws(TypeError, function() { -- sample.sort(comparefn); -- }); -- -- assert.sameValue(calls, 1); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/sort-tonumber.js b/JSTests/test262/test/built-ins/TypedArray/prototype/sort/sort-tonumber.js -index 627ed55ecdf6e7d47be819a26f68a87bd3f8758d..36d8457e9806c3e578651f5879af359b056879c6 100644 ---- a/JSTests/test262/test/built-ins/TypedArray/prototype/sort/sort-tonumber.js -+++ b/JSTests/test262/test/built-ins/TypedArray/prototype/sort/sort-tonumber.js -@@ -21,16 +21,12 @@ testWithTypedArrayConstructors(function(TA) { - var ab = ta.buffer; - - var called = false; -- assert.throws(TypeError, function() { -- ta.sort(function(a, b) { -- // IsDetachedBuffer is checked right after calling comparefn. -- // So, detach the ArrayBuffer to cause sort to throw, to make sure we're actually calling ToNumber immediately (as spec'd) -- // (a possible bug is to wait until the result is inspected to call ToNumber, rather than immediately) -- $DETACHBUFFER(ab); -- return { -- [Symbol.toPrimitive]() { called = true; } -- }; -- }); -+ ta.sort(function(a, b) { -+ // Detaching the buffer does not cause sort to throw. -+ $DETACHBUFFER(ab); -+ return { -+ [Symbol.toPrimitive]() { called = true; } -+ }; - }); - - assert.sameValue(true, called); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-different-type.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-different-type.js -deleted file mode 100644 -index 4b914e6d2ef62dbee573d49ee5b3674c35088623..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-different-type.js -+++ /dev/null -@@ -1,61 +0,0 @@ --// Copyright (C) 2017 André Bargull. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-typedarray-typedarray --description: > -- When a TypedArray is created from another TypedArray with a different element-type -- and SpeciesConstructor detaches the source buffer, AllocateArrayBuffer is still -- executed. --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- ... -- 16. If IsSharedArrayBuffer(srcData) is false, then -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- 18. If SameValue(elementType, srcType) is true, then -- ... -- 19. Else, -- a. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- b. If IsDetachedBuffer(srcData) is true, throw a TypeError exception. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBufferPrototype%", -- « [[ArrayBufferData]], [[ArrayBufferByteLength]] »). -- ... --includes: [testBigIntTypedArray.js, detachArrayBuffer.js] --features: [BigInt, TypedArray, Symbol.species] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var speciesCallCount = 0; -- var bufferConstructor = Object.defineProperty({}, Symbol.species, { -- get: function() { -- speciesCallCount += 1; -- $DETACHBUFFER(ta.buffer); -- return speciesConstructor; -- } -- }); -- -- var prototypeCallCount = 0; -- var speciesConstructor = Object.defineProperty(function(){}.bind(), "prototype", { -- get: function() { -- prototypeCallCount += 1; -- return null; -- } -- }); -- -- var ta = new TA(0); -- ta.buffer.constructor = bufferConstructor; -- -- assert.throws(TypeError, function() { -- var targetType = TA !== BigInt64Array ? BigInt64Array : BigUint64Array; -- new targetType(ta); -- }, "TypeError thrown for detached source buffer"); -- -- assert.sameValue(speciesCallCount, 1, "@@species getter called once"); -- assert.sameValue(prototypeCallCount, 1, "prototype getter called once"); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-same-type.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-same-type.js -deleted file mode 100644 -index c4f45c49c7cb2be064b0ce06e89fd0ded4b1faa5..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/detached-when-species-retrieved-same-type.js -+++ /dev/null -@@ -1,64 +0,0 @@ --// Copyright (C) 2017 André Bargull. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-typedarray-typedarray --description: > -- When a TypedArray is created from another TypedArray with the same element-type -- and SpeciesConstructor detaches the source buffer, AllocateArrayBuffer is still -- executed. --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- ... -- 16. If IsSharedArrayBuffer(srcData) is false, then -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- 18. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset, byteLength, bufferConstructor). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength, cloneConstructor ) -- -- ... -- 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). -- 4. If IsDetachedBuffer(srcBuffer) is true, throw a TypeError exception. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBufferPrototype%", -- « [[ArrayBufferData]], [[ArrayBufferByteLength]] »). -- ... --includes: [testBigIntTypedArray.js, detachArrayBuffer.js] --features: [BigInt, TypedArray, Symbol.species] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var speciesCallCount = 0; -- var bufferConstructor = Object.defineProperty({}, Symbol.species, { -- get: function() { -- speciesCallCount += 1; -- $DETACHBUFFER(ta.buffer); -- return speciesConstructor; -- } -- }); -- -- var prototypeCallCount = 0; -- var speciesConstructor = Object.defineProperty(function(){}.bind(), "prototype", { -- get: function() { -- prototypeCallCount += 1; -- return null; -- } -- }); -- -- var ta = new TA(0); -- ta.buffer.constructor = bufferConstructor; -- -- assert.throws(TypeError, function() { -- new TA(ta); -- }, "TypeError thrown for detached source buffer"); -- -- assert.sameValue(speciesCallCount, 1, "@@species getter called once"); -- assert.sameValue(prototypeCallCount, 1, "prototype getter called once"); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-access-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-access-throws.js -deleted file mode 100644 -index 3882f1c78e8619b508a46b5b3b70aed348b51dd9..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-access-throws.js -+++ /dev/null -@@ -1,41 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from getting typedArray argument's buffer.constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var OtherCtor = TA === BigInt64Array ? BigUint64Array : BigInt64Array; -- var sample = new OtherCtor(); -- -- Object.defineProperty(sample.buffer, "constructor", { -- get() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js -deleted file mode 100644 -index 5a5d7ee0ab7f42abca9675a0bbccf66648334a29..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js -+++ /dev/null -@@ -1,58 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Derive the ArrayBuffer prototype from the realm of the species constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- b. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 9.1.14 GetPrototypeFromConstructor -- -- ... -- 3. Let proto be ? Get(constructor, "prototype"). -- 4. If Type(proto) is not Object, then -- a. Let realm be ? GetFunctionRealm(constructor). -- b. Let proto be realm's intrinsic object named intrinsicDefaultProto. -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, cross-realm, Symbol.species, TypedArray] -----*/ -- --var sample1 = new BigInt64Array(); --var sample2 = new BigUint64Array(); --var other = $262.createRealm().global; --var C = new other.Function(); --C.prototype = null; -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = TA === BigInt64Array ? sample2 : sample1; -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = C; -- -- var typedArray = new TA(sample); -- assert.sameValue( -- Object.getPrototypeOf(typedArray.buffer), other.ArrayBuffer.prototype -- ); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species.js -deleted file mode 100644 -index 1ff1e5db5335c52b7377cebf23013b0d64600526..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-custom-species.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Use default ArrayBuffer constructor on undefined buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- b. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --var sample1 = new BigInt64Array(); --var sample2 = new BigUint64Array(); -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = TA === BigInt64Array ? sample2 : sample1; -- var ctor = {}; -- var called = 0; -- var custom = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function() { -- called++; -- }; -- -- ctor[Symbol.species].prototype = custom; -- -- var typedArray = new TA(sample); -- assert.sameValue(Object.getPrototypeOf(typedArray.buffer), custom); -- assert.sameValue(called, 0); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js -deleted file mode 100644 -index 44b76c2b95ef160f3d142ead12171483b2f43da8..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js -+++ /dev/null -@@ -1,61 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from typedArray argument's buffer.constructor's value --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... -- 4. If Type(C) is not Object, throw a TypeError exception. -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol, TypedArray] -----*/ -- --var sample1 = new BigInt64Array(); --var sample2 = new BigUint64Array(); -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = TA === BigInt64Array ? sample2 : sample1; -- -- sample.buffer.constructor = 1; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = true; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = ""; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = null; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- var s = Symbol("1"); -- sample.buffer.constructor = s; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js -deleted file mode 100644 -index 8b3933eedb5be662a98fa54b38b91066b3d3ddd7..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js -+++ /dev/null -@@ -1,45 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from getting typedArray argument's buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --var sample1 = new BigInt64Array(); --var sample2 = new BigUint64Array(); -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = TA === BigInt64Array ? sample2 : sample1; -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- Object.defineProperty(ctor, Symbol.species, { -- get: function() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js -deleted file mode 100644 -index 09a8068e9f27d27392411b6a0a697a6fe072034b..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js -+++ /dev/null -@@ -1,47 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- 8. Throw a TypeError exception. --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --var sample1 = new BigInt64Array(); --var sample2 = new BigUint64Array(); -- --var ctor = function() { -- throw new Test262Error(); --}; --var m = { m() {} }.m; --ctor[Symbol.species] = m; -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = TA === BigInt64Array ? sample2 : sample1; -- -- sample.buffer.constructor = ctor; -- -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js -deleted file mode 100644 -index 705b8a7319ce8edce1db87f7d2943e5140dcd653..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js -+++ /dev/null -@@ -1,59 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- b. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- ... -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, -- "%ArrayBufferPrototype%", « [[ArrayBufferData]], [[ArrayBufferByteLength]] » ) -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --var sample1 = new BigInt64Array(); --var sample2 = new BigUint64Array(); -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = TA === BigInt64Array ? sample2 : sample1; -- var ctor = {}; -- var called = 0; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function() {called++;}.bind(null); -- Object.defineProperty(ctor[Symbol.species], "prototype", { -- get: function() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); -- assert.sameValue(called, 0); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-access-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-access-throws.js -deleted file mode 100644 -index 51fa9a8358f43252ca1a045f3ab90e6e9ab884a9..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-access-throws.js -+++ /dev/null -@@ -1,46 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from getting typedArray argument's buffer.constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- Object.defineProperty(sample.buffer, "constructor", { -- get: function() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js -deleted file mode 100644 -index 90de96428058656899fc9d6d4c421f4e202deede..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js -+++ /dev/null -@@ -1,68 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Derive the ArrayBuffer prototype from the realm of the species constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 8. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, cloneLength). -- ... -- -- 9.1.14 GetPrototypeFromConstructor -- -- ... -- 3. Let proto be ? Get(constructor, "prototype"). -- 4. If Type(proto) is not Object, then -- a. Let realm be ? GetFunctionRealm(constructor). -- b. Let proto be realm's intrinsic object named intrinsicDefaultProto. -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, cross-realm, Symbol.species, TypedArray] -----*/ -- --var other = $262.createRealm().global; --var C = new other.Function(); --C.prototype = null; -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = C; -- -- var typedArray = new TA(sample); -- assert.sameValue( -- Object.getPrototypeOf(typedArray.buffer), other.ArrayBuffer.prototype -- ); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom.js -deleted file mode 100644 -index 743b03e3f4bf0f15161cf3203deb828c5b56f8ec..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-custom.js -+++ /dev/null -@@ -1,60 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Use default ArrayBuffer constructor on undefined buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 8. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, cloneLength). -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- var called = 0; -- var custom = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function() { -- called++; -- }; -- -- ctor[Symbol.species].prototype = custom; -- -- var typedArray = new TA(sample); -- assert.sameValue(Object.getPrototypeOf(typedArray.buffer), custom); -- assert.sameValue(called, 0); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js -deleted file mode 100644 -index 32cbc01bc3f56012b55e7eedf5072c0812dccc15..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js -+++ /dev/null -@@ -1,49 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- 8. Throw a TypeError exception. --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- var m = { m() {} }; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = m; -- -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js -deleted file mode 100644 -index 042d4213db8fdc19fbd107c051e8df82ceb5f905..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js -+++ /dev/null -@@ -1,62 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- 8. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, cloneLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- ... -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, -- "%ArrayBufferPrototype%", « [[ArrayBufferData]], [[ArrayBufferByteLength]] » ) -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function(){}.bind(null); -- Object.defineProperty(ctor[Symbol.species], "prototype", { -- get() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-throws.js -deleted file mode 100644 -index 0aa7517b802ccfa46c3a2d8e58a384462b23aa76..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-species-throws.js -+++ /dev/null -@@ -1,49 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from getting typedArray argument's buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol.species, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- Object.defineProperty(ctor, Symbol.species, { -- get() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js -deleted file mode 100644 -index a3ca9a041b395955d5f126fec9617804a459da7b..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors-bigint/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js -+++ /dev/null -@@ -1,65 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from typedArray argument's buffer.constructor's value --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... -- 4. If Type(C) is not Object, throw a TypeError exception. -- ... --includes: [testBigIntTypedArray.js] --features: [BigInt, Symbol, TypedArray] -----*/ -- --testWithBigIntTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- -- sample.buffer.constructor = 1; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = true; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = ''; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = null; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- var s = Symbol('1'); -- sample.buffer.constructor = s; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/no-species.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/no-species.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d288115bf438534b6229d7f60780fa738b027e70 ---- /dev/null -+++ b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/no-species.js -@@ -0,0 +1,30 @@ -+// Copyright (C) 2022 the V8 project authors. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: > -+ Creating TypedArray from other TypedArrays doesn't look up Symbol.species. -+features: [TypedArray, ArrayBuffer, Symbol.species] -+---*/ -+ -+let throwOnGrossBufferConstruction = false; -+ -+class GrossBuffer extends ArrayBuffer { -+ constructor() { -+ super(...arguments); -+ if (throwOnGrossBufferConstruction) { -+ throw new Test262Error("unreachable"); -+ } -+ } -+ static get [Symbol.species]() { -+ throw new Test262Error("unreachable"); -+ } -+} -+ -+let grossBuf = new GrossBuffer(1024); -+throwOnGrossBufferConstruction = true; -+let grossTA = new Uint8Array(grossBuf); -+let mysteryTA = new Int8Array(grossTA); -+ -+assert.sameValue(mysteryTA.buffer.__proto__, ArrayBuffer.prototype); -+assert.sameValue(mysteryTA.buffer.constructor, ArrayBuffer); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js -deleted file mode 100644 -index 8ee2fba54bc195dcafe393b24bc22652e86493ce..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js -+++ /dev/null -@@ -1,61 +0,0 @@ --// Copyright (C) 2017 André Bargull. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-typedarray-typedarray --description: > -- When a TypedArray is created from another TypedArray with a different element-type -- and SpeciesConstructor detaches the source buffer, AllocateArrayBuffer is still -- executed. --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- ... -- 16. If IsSharedArrayBuffer(srcData) is false, then -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- 18. If SameValue(elementType, srcType) is true, then -- ... -- 19. Else, -- a. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- b. If IsDetachedBuffer(srcData) is true, throw a TypeError exception. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBufferPrototype%", -- « [[ArrayBufferData]], [[ArrayBufferByteLength]] »). -- ... --includes: [testTypedArray.js, detachArrayBuffer.js] --features: [TypedArray, Symbol.species] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var speciesCallCount = 0; -- var bufferConstructor = Object.defineProperty({}, Symbol.species, { -- get: function() { -- speciesCallCount += 1; -- $DETACHBUFFER(ta.buffer); -- return speciesConstructor; -- } -- }); -- -- var prototypeCallCount = 0; -- var speciesConstructor = Object.defineProperty(function(){}.bind(), "prototype", { -- get: function() { -- prototypeCallCount += 1; -- return null; -- } -- }); -- -- var ta = new TA(0); -- ta.buffer.constructor = bufferConstructor; -- -- assert.throws(TypeError, function() { -- var targetType = TA !== Int32Array ? Int32Array : Uint32Array; -- new targetType(ta); -- }, "TypeError thrown for detached source buffer"); -- -- assert.sameValue(speciesCallCount, 1, "@@species getter called once"); -- assert.sameValue(prototypeCallCount, 1, "prototype getter called once"); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js -deleted file mode 100644 -index 978f42af64be0e5e280840bfa0670894f2af8ac3..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js -+++ /dev/null -@@ -1,64 +0,0 @@ --// Copyright (C) 2017 André Bargull. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. -- --/*--- --esid: sec-typedarray-typedarray --description: > -- When a TypedArray is created from another TypedArray with the same element-type -- and SpeciesConstructor detaches the source buffer, AllocateArrayBuffer is still -- executed. --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- ... -- 16. If IsSharedArrayBuffer(srcData) is false, then -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- 18. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset, byteLength, bufferConstructor). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength, cloneConstructor ) -- -- ... -- 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). -- 4. If IsDetachedBuffer(srcBuffer) is true, throw a TypeError exception. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBufferPrototype%", -- « [[ArrayBufferData]], [[ArrayBufferByteLength]] »). -- ... --includes: [testTypedArray.js, detachArrayBuffer.js] --features: [TypedArray, Symbol.species] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var speciesCallCount = 0; -- var bufferConstructor = Object.defineProperty({}, Symbol.species, { -- get: function() { -- speciesCallCount += 1; -- $DETACHBUFFER(ta.buffer); -- return speciesConstructor; -- } -- }); -- -- var prototypeCallCount = 0; -- var speciesConstructor = Object.defineProperty(function(){}.bind(), "prototype", { -- get: function() { -- prototypeCallCount += 1; -- return null; -- } -- }); -- -- var ta = new TA(0); -- ta.buffer.constructor = bufferConstructor; -- -- assert.throws(TypeError, function() { -- new TA(ta); -- }, "TypeError thrown for detached source buffer"); -- -- assert.sameValue(speciesCallCount, 1, "@@species getter called once"); -- assert.sameValue(prototypeCallCount, 1, "prototype getter called once"); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-access-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-access-throws.js -deleted file mode 100644 -index b8976d696deb2a81e7088ab95f18df9051e0ddbd..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-access-throws.js -+++ /dev/null -@@ -1,41 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from getting typedArray argument's buffer.constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... --includes: [testTypedArray.js] --features: [TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var OtherCtor = TA === Int8Array ? Int16Array : Int8Array; -- var sample = new OtherCtor(); -- -- Object.defineProperty(sample.buffer, "constructor", { -- get() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js -deleted file mode 100644 -index 03860d1a7beddceefabebbfcf81fe9a63724c5d8..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js -+++ /dev/null -@@ -1,59 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Derive the ArrayBuffer prototype from the realm of the species constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- b. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 9.1.14 GetPrototypeFromConstructor -- -- ... -- 3. Let proto be ? Get(constructor, "prototype"). -- 4. If Type(proto) is not Object, then -- a. Let realm be ? GetFunctionRealm(constructor). -- b. Let proto be realm's intrinsic object named intrinsicDefaultProto. -- ... --includes: [testTypedArray.js] --features: [cross-realm, Symbol.species, TypedArray] -----*/ -- --var sample1 = new Int8Array(); --var sample2 = new Int16Array(); --var other = $262.createRealm().global; --var C = new other.Function(); --C.prototype = null; -- -- --testWithTypedArrayConstructors(function(TA) { -- var sample = TA === Int8Array ? sample2 : sample1; -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = C; -- -- var typedArray = new TA(sample); -- assert.sameValue( -- Object.getPrototypeOf(typedArray.buffer), other.ArrayBuffer.prototype -- ); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js -deleted file mode 100644 -index a510d7806da4ec10db4e586606b5f19d185fa126..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Use default ArrayBuffer constructor on undefined buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- b. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --var sample1 = new Int8Array(); --var sample2 = new Int16Array(); -- --testWithTypedArrayConstructors(function(TA) { -- var sample = TA === Int8Array ? sample2 : sample1; -- var ctor = {}; -- var called = 0; -- var custom = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function() { -- called++; -- }; -- -- ctor[Symbol.species].prototype = custom; -- -- var typedArray = new TA(sample); -- assert.sameValue(Object.getPrototypeOf(typedArray.buffer), custom); -- assert.sameValue(called, 0); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js -deleted file mode 100644 -index cfb79f1a948549ca4a4b8e3c16f0a48089e113a7..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js -+++ /dev/null -@@ -1,61 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from typedArray argument's buffer.constructor's value --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... -- 4. If Type(C) is not Object, throw a TypeError exception. -- ... --includes: [testTypedArray.js] --features: [Symbol, TypedArray] -----*/ -- --var sample1 = new Int8Array(); --var sample2 = new Int16Array(); -- --testWithTypedArrayConstructors(function(TA) { -- var sample = TA === Int8Array ? sample2 : sample1; -- -- sample.buffer.constructor = 1; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = true; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = ""; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = null; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- var s = Symbol("1"); -- sample.buffer.constructor = s; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js -deleted file mode 100644 -index 4b0b19aca73f95e929866d0c514659d388574426..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js -+++ /dev/null -@@ -1,45 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from getting typedArray argument's buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --var sample1 = new Int8Array(); --var sample2 = new Int16Array(); -- --testWithTypedArrayConstructors(function(TA) { -- var sample = TA === Int8Array ? sample2 : sample1; -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- Object.defineProperty(ctor, Symbol.species, { -- get: function() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js -deleted file mode 100644 -index c485cae138f684c86bd68ad1b41c6ba92b7b794c..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js -+++ /dev/null -@@ -1,47 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- 8. Throw a TypeError exception. --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --var sample1 = new Int8Array(); --var sample2 = new Int16Array(); -- --var ctor = function() { -- throw new Test262Error(); --}; --var m = { m() {} }.m; --ctor[Symbol.species] = m; -- --testWithTypedArrayConstructors(function(TA) { -- var sample = TA === Int8Array ? sample2 : sample1; -- -- sample.buffer.constructor = ctor; -- -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-null.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-null.js -deleted file mode 100644 -index 96ba9009d66d0bdfc172bcb9d0d6b316a0161fb1..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-null.js -+++ /dev/null -@@ -1,44 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Use default ArrayBuffer constructor on null buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var OtherCtor = TA === Int8Array ? Int16Array : Int8Array; -- var sample = new OtherCtor(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = null; -- var typedArray = new TA(sample); -- -- assert.sameValue( -- Object.getPrototypeOf(typedArray.buffer), -- ArrayBuffer.prototype, -- "buffer ctor is not called when species is null" -- ); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js -deleted file mode 100644 -index 135634646b491497da941db744062d5879665e88..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js -+++ /dev/null -@@ -1,59 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- b. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- ... -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, -- "%ArrayBufferPrototype%", « [[ArrayBufferData]], [[ArrayBufferByteLength]] » ) -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --var sample1 = new Int8Array(); --var sample2 = new Int16Array(); -- --testWithTypedArrayConstructors(function(TA) { -- var sample = TA === Int8Array ? sample2 : sample1; -- var ctor = {}; -- var called = 0; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function() {called++;}.bind(null); -- Object.defineProperty(ctor[Symbol.species], "prototype", { -- get: function() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); -- assert.sameValue(called, 0); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-undefined.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-undefined.js -deleted file mode 100644 -index 32e78a37dcd0da8c07eac359d386106ceb76ad27..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/other-ctor-buffer-ctor-species-undefined.js -+++ /dev/null -@@ -1,43 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Use default ArrayBuffer constructor on undefined buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 18. Else, -- a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var OtherCtor = TA === Int8Array ? Int16Array : Int8Array; -- var sample = new OtherCtor(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = undefined; -- var a = new TA(sample); -- assert.sameValue( -- Object.getPrototypeOf(a.buffer), -- ArrayBuffer.prototype, -- "buffer ctor is not called when species is undefined" -- ); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-different-type.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-different-type.js -deleted file mode 100644 -index 0aba12fc80f27ada3675dac21062a419f8ec99f1..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-different-type.js -+++ /dev/null -@@ -1,89 +0,0 @@ --// Copyright (C) 2021 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Error when a TypedArray is created from another TypedArray with a different -- element-type and SpeciesConstructor causes the "source" array to go -- out-of-bounds. --includes: [testTypedArray.js, compareArray.js] --features: [TypedArray, Symbol.species, resizable-arraybuffer] -----*/ -- --// If the host chooses to throw as allowed by the specification, the observed --// behavior will be identical to the case where `ArrayBuffer.prototype.resize` --// has not been implemented. The following assertion prevents this test from --// passing in runtimes which have not implemented the method. --assert.sameValue(typeof ArrayBuffer.prototype.resize, 'function'); -- --testWithTypedArrayConstructors(function(TA) { -- var BPE = TA.BYTES_PER_ELEMENT; -- var TargetCtor = TA !== Int32Array ? Int32Array : Uint32Array; -- var ab = new ArrayBuffer(BPE * 4, {maxByteLength: BPE * 5}); -- var speciesConstructor = Object.defineProperty(function(){}.bind(), 'prototype', { -- get: function() { -- return null; -- } -- }); -- var onGetSpecies; -- ab.constructor = Object.defineProperty({}, Symbol.species, { -- get: function() { -- onGetSpecies(); -- return speciesConstructor; -- } -- }); -- var source = new TA(ab, BPE); -- var expected = [10, 20, 30]; -- -- source[0] = 10; -- source[1] = 20; -- source[2] = 30; -- -- onGetSpecies = function() { -- try { -- ab.resize(BPE * 5); -- expected = [10, 20, 30, 0]; -- } catch (_) {} -- }; -- -- assert(compareArray(new TargetCtor(source), expected), 'following grow'); -- -- onGetSpecies = function() { -- try { -- ab.resize(BPE * 3); -- expected = [10, 20]; -- } catch (_) {} -- }; -- -- assert(compareArray(new TargetCtor(source), expected), 'following shrink (within bounds)'); -- -- onGetSpecies = function() { -- try { -- ab.resize(BPE); -- expected = []; -- } catch (_) {} -- }; -- -- assert(compareArray(new TargetCtor(source), expected), 'following shrink (on boundary)'); -- -- // `assert.throws` cannot be used in this case because the expected error -- // is derived only after the constructor is invoked. -- var expectedError; -- var actualError; -- onGetSpecies = function() { -- try { -- ab.resize(0); -- expectedError = TypeError; -- } catch (_) { -- expectedError = Test262Error; -- } -- }; -- try { -- new TargetCtor(source); -- throw new Test262Error('the operation completed successfully'); -- } catch (caught) { -- actualError = caught; -- } -- -- assert.sameValue(actualError.constructor, expectedError); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-same-type.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-same-type.js -deleted file mode 100644 -index c633ba0696227091bdb1c02e25ef8a70b3e94257..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/out-of-bounds-when-species-retrieved-same-type.js -+++ /dev/null -@@ -1,89 +0,0 @@ --// Copyright (C) 2021 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Error when a TypedArray is created from another TypedArray with the same -- element-type and SpeciesConstructor causes the "source" array to go -- out-of-bounds. --includes: [testTypedArray.js, compareArray.js] --features: [TypedArray, Symbol.species, resizable-arraybuffer] -----*/ -- --// If the host chooses to throw as allowed by the specification, the observed --// behavior will be identical to the case where `ArrayBuffer.prototype.resize` --// has not been implemented. The following assertion prevents this test from --// passing in runtimes which have not implemented the method. --assert.sameValue(typeof ArrayBuffer.prototype.resize, 'function'); -- --testWithTypedArrayConstructors(function(TA) { -- var BPE = TA.BYTES_PER_ELEMENT; -- var ab = new ArrayBuffer(BPE * 4, {maxByteLength: BPE * 5}); -- var speciesConstructor = Object.defineProperty(function(){}.bind(), 'prototype', { -- get: function() { -- return null; -- } -- }); -- var onGetSpecies; -- ab.constructor = Object.defineProperty({}, Symbol.species, { -- get: function() { -- onGetSpecies(); -- return speciesConstructor; -- } -- }); -- var source = new TA(ab, BPE); -- var expected = [10, 20, 30]; -- -- source[0] = 10; -- source[1] = 20; -- source[2] = 30; -- -- onGetSpecies = function() { -- try { -- ab.resize(BPE * 5); -- expected = [10, 20, 30, 0]; -- } catch (_) {} -- }; -- -- assert.sameValue((new TA(source)).join(','), expected.join(',')); -- assert(compareArray(new TA(source), expected), 'following grow'); -- -- onGetSpecies = function() { -- try { -- ab.resize(BPE * 3); -- expected = [10, 20]; -- } catch (_) {} -- }; -- -- assert(compareArray(new TA(source), expected), 'following shrink (within bounds)'); -- -- onGetSpecies = function() { -- try { -- ab.resize(BPE); -- expected = []; -- } catch (_) {} -- }; -- -- assert(compareArray(new TA(source), expected), 'following shrink (on boundary)'); -- -- // `assert.throws` cannot be used in this case because the expected error -- // is derived only after the constructor is invoked. -- var expectedError; -- var actualError; -- onGetSpecies = function() { -- try { -- ab.resize(0); -- expectedError = TypeError; -- } catch (_) { -- expectedError = Test262Error; -- } -- }; -- try { -- new TA(source); -- throw new Test262Error('the operation completed successfully'); -- } catch (caught) { -- actualError = caught; -- } -- -- assert.sameValue(actualError.constructor, expectedError); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-access-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-access-throws.js -deleted file mode 100644 -index f8e75d20916914ded361d5451c7dcfc11d4bc6df..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-access-throws.js -+++ /dev/null -@@ -1,46 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from getting typedArray argument's buffer.constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... --includes: [testTypedArray.js] --features: [TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- Object.defineProperty(sample.buffer, "constructor", { -- get: function() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js -deleted file mode 100644 -index 43743b956e742c63289ac819b000f7b596a7e54d..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js -+++ /dev/null -@@ -1,68 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Derive the ArrayBuffer prototype from the realm of the species constructor --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 8. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, cloneLength). -- ... -- -- 9.1.14 GetPrototypeFromConstructor -- -- ... -- 3. Let proto be ? Get(constructor, "prototype"). -- 4. If Type(proto) is not Object, then -- a. Let realm be ? GetFunctionRealm(constructor). -- b. Let proto be realm's intrinsic object named intrinsicDefaultProto. -- ... --includes: [testTypedArray.js] --features: [cross-realm, Symbol.species, TypedArray] -----*/ -- --var other = $262.createRealm().global; --var C = new other.Function(); --C.prototype = null; -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = C; -- -- var typedArray = new TA(sample); -- assert.sameValue( -- Object.getPrototypeOf(typedArray.buffer), other.ArrayBuffer.prototype -- ); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js -deleted file mode 100644 -index 7ed3aca0da1148beb44d30f6810c30d1863e53a1..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js -+++ /dev/null -@@ -1,60 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Use default ArrayBuffer constructor on undefined buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 8. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, cloneLength). -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- var called = 0; -- var custom = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function() { -- called++; -- }; -- -- ctor[Symbol.species].prototype = custom; -- -- var typedArray = new TA(sample); -- assert.sameValue(Object.getPrototypeOf(typedArray.buffer), custom); -- assert.sameValue(called, 0); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js -deleted file mode 100644 -index 2072aa96dd1a48530c622f0ebf8e5ab5cb8337fd..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js -+++ /dev/null -@@ -1,49 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- 8. Throw a TypeError exception. --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- var m = { m() {} }; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = m; -- -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js -deleted file mode 100644 -index b171826cfb1747d0c959669c36edc17026a72aa8..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js -+++ /dev/null -@@ -1,62 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from buffer.constructor.@@species.prototype --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- 8. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, cloneLength). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- 6. If S is either undefined or null, return defaultConstructor. -- 7. If IsConstructor(S) is true, return S. -- ... -- -- 24.1.1.1 AllocateArrayBuffer ( constructor, byteLength ) -- -- ... -- 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, -- "%ArrayBufferPrototype%", « [[ArrayBufferData]], [[ArrayBufferByteLength]] » ) -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- -- ctor[Symbol.species] = function(){}.bind(null); -- Object.defineProperty(ctor[Symbol.species], "prototype", { -- get() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-throws.js -deleted file mode 100644 -index ec2aaf3c1f5250a5461b0bc5f773d365b8a17b53..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-species-throws.js -+++ /dev/null -@@ -1,49 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt from getting typedArray argument's buffer.constructor.@@species --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 5. Let S be ? Get(C, @@species). -- ... --includes: [testTypedArray.js] --features: [Symbol.species, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- var ctor = {}; -- -- sample.buffer.constructor = ctor; -- Object.defineProperty(ctor, Symbol.species, { -- get() { -- throw new Test262Error(); -- } -- }); -- -- assert.throws(Test262Error, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js b/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js -deleted file mode 100644 -index ef97097495cf3dd666749f28a05791138ecfa8d4..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js -+++ /dev/null -@@ -1,65 +0,0 @@ --// Copyright (C) 2016 the V8 project authors. All rights reserved. --// This code is governed by the BSD license found in the LICENSE file. --/*--- --esid: sec-typedarray-typedarray --description: > -- Return abrupt completion from typedArray argument's buffer.constructor's value --info: | -- 22.2.4.3 TypedArray ( typedArray ) -- -- This description applies only if the TypedArray function is called with at -- least one argument and the Type of the first argument is Object and that -- object has a [[TypedArrayName]] internal slot. -- -- ... -- 17. If SameValue(elementType, srcType) is true, then -- a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset). -- ... -- -- 24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset [ , cloneConstructor ] ) -- -- ... -- 2. If cloneConstructor is not present, then -- a. Let cloneConstructor be ? SpeciesConstructor(srcBuffer, %ArrayBuffer%). -- ... -- -- 7.3.20 SpeciesConstructor ( O, defaultConstructor ) -- -- ... -- 2. Let C be ? Get(O, "constructor"). -- ... -- 4. If Type(C) is not Object, throw a TypeError exception. -- ... --includes: [testTypedArray.js] --features: [Symbol, TypedArray] -----*/ -- --testWithTypedArrayConstructors(function(TA) { -- var sample = new TA(); -- -- sample.buffer.constructor = 1; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = true; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = ''; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- sample.buffer.constructor = null; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); -- -- var s = Symbol('1'); -- sample.buffer.constructor = s; -- assert.throws(TypeError, function() { -- new TA(sample); -- }); --}); -diff --git a/JSTests/test262/test/built-ins/parseInt/15.1.2.2-2-1.js b/JSTests/test262/test/built-ins/parseInt/15.1.2.2-2-1.js -index 4dc1dc6001f91f402a43e606e81477022cf19cc1..0a9eb648a4576c4b646624c530069185de9b1891 100644 ---- a/JSTests/test262/test/built-ins/parseInt/15.1.2.2-2-1.js -+++ b/JSTests/test262/test/built-ins/parseInt/15.1.2.2-2-1.js -@@ -4,7 +4,7 @@ - /*--- - esid: sec-parseint-string-radix - description: > -- pareseInt - 'S' is the empty string when inputString does not -+ parseInt - 'S' is the empty string when inputString does not - contain any such characters - ---*/ - -diff --git a/JSTests/test262/test/harness/temporalHelpers-one-shift-time-zone.js b/JSTests/test262/test/harness/temporalHelpers-one-shift-time-zone.js -new file mode 100644 -index 0000000000000000000000000000000000000000..db4e4102d0aeccf83d009344fc10ba114fdf374c ---- /dev/null -+++ b/JSTests/test262/test/harness/temporalHelpers-one-shift-time-zone.js -@@ -0,0 +1,80 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+description: > -+ Verify the time zone arithmetic used in TemporalHelpers.oneShiftTimeZone() -+ against known cases in the implementation's time zone database -+includes: [compareArray.js, temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+function checkTimeZoneArithmetic(shiftInstant, shiftNs, realTimeZoneName, shiftWallTime) { -+ // No need to test this on hosts that don't provide an Intl object. It's -+ // sufficient that the logic is tested on at least one host. -+ if (typeof globalThis.Intl === "undefined") -+ return; -+ -+ const tz = TemporalHelpers.oneShiftTimeZone(shiftInstant, shiftNs); -+ const realTz = new Temporal.TimeZone(realTimeZoneName); -+ -+ assert.sameValue( -+ tz.getOffsetNanosecondsFor(shiftInstant), -+ realTz.getOffsetNanosecondsFor(shiftInstant), -+ 'offset at shift instant' -+ ); -+ const minus1 = shiftInstant.subtract({ hours: 1 }); -+ assert.sameValue( -+ tz.getOffsetNanosecondsFor(minus1), -+ realTz.getOffsetNanosecondsFor(minus1), -+ 'offset at 1 hour before shift' -+ ); -+ const plus1 = shiftInstant.add({ hours: 1 }); -+ assert.sameValue( -+ tz.getOffsetNanosecondsFor(plus1), -+ realTz.getOffsetNanosecondsFor(plus1), -+ 'offset at 1 hour after shift' -+ ); -+ -+ assert.compareArray( -+ tz.getPossibleInstantsFor(shiftWallTime).map((i) => i.epochNanoseconds), -+ realTz.getPossibleInstantsFor(shiftWallTime).map((i) => i.epochNanoseconds), -+ 'possible instants for wall time' -+ ); -+ const before1 = shiftWallTime.subtract({ hours: 1 }); -+ assert.compareArray( -+ tz.getPossibleInstantsFor(before1).map((i) => i.epochNanoseconds), -+ realTz.getPossibleInstantsFor(before1).map((i) => i.epochNanoseconds), -+ 'possible instants for 1 hour before wall time' -+ ); -+ const after1 = shiftWallTime.add({ hours: 1 }); -+ assert.compareArray( -+ tz.getPossibleInstantsFor(after1).map((i) => i.epochNanoseconds), -+ realTz.getPossibleInstantsFor(after1).map((i) => i.epochNanoseconds), -+ 'possible instants for 1 hour after wall time' -+ ); -+} -+ -+// Check a positive DST shift from +00:00 to +01:00 -+checkTimeZoneArithmetic( -+ new Temporal.Instant(1616893200000000000n), -+ 3600e9, -+ 'Europe/London', -+ new Temporal.PlainDateTime(2021, 3, 28, 1) -+); -+ -+// Check a negative DST shift from +00:00 to -01:00 -+checkTimeZoneArithmetic( -+ new Temporal.Instant(1635642000000000000n), -+ -3600e9, -+ 'Atlantic/Azores', -+ new Temporal.PlainDateTime(2021, 10, 31, 1) -+); -+ -+// Check the no-shift case -+checkTimeZoneArithmetic( -+ new Temporal.Instant(0n), -+ 0, -+ 'UTC', -+ new Temporal.PlainDateTime(1970, 1, 1) -+); -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-locales-invalid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-locales-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8c50a2f3d36af25e0c101bd7ecc25b79f44f75ca ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-locales-invalid.js -@@ -0,0 +1,17 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks error cases for the locales argument to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 3. Let _requestedLocales_ be ? CanonicalizeLocaleList(_locales_). -+includes: [testIntl.js] -+features: [Intl.DurationFormat] -+---*/ -+ -+for (const [locales, expectedError] of getInvalidLocaleArguments()) { -+ assert.throws(expectedError, function() { new Intl.DurationFormat(locales) }) -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-locales-valid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-locales-valid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..5687373bec687d3088946aa7de35aa0171a42336 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-locales-valid.js -@@ -0,0 +1,34 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks cases for the locales argument to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 3. Let _requestedLocales_ be ? CanonicalizeLocaleList(_locales_). -+features: [Intl.DurationFormat] -+---*/ -+ -+const defaultLocale = new Intl.DurationFormat().resolvedOptions().locale; -+ -+const matchers = ["lookup", "best fit"] -+ -+const tests = [ -+ [undefined, defaultLocale, "undefined"], -+ ["EN", "en", "Single value"], -+ [[], defaultLocale, "Empty array"], -+ [["en", "EN"], "en", "Duplicate value (canonical first)"], -+ [["EN", "en"], "en", "Duplicate value (canonical last)"], -+ [{ 0: "DE", length: 0 }, defaultLocale, "Object with zero length"], -+ [{ 0: "DE", length: 1 }, "de", "Object with length"], -+]; -+ -+ -+for (const [locales, expected, name] of tests) { -+ matchers.forEach((matcher)=>{ -+ const drf = new Intl.DurationFormat(locales, {localeMatcher: matcher}); -+ assert.sameValue(drf.resolvedOptions().locale, expected, name); -+ }); -+}; -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-defaults.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-defaults.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a4d62c2dbdbf5809a0dfa627cf628333f9b76cef ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-defaults.js -@@ -0,0 +1,32 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks handling of valid options for the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 17. For each row in Table 1, except the header row, in table order, do -+ a. Let styleSlot be the Style Slot value. -+ b. Let displaySlot be the Display Slot value. -+ c. Let unit be the Unit value. -+ d. Let valueList be the Values value. -+ e. Let digitalBase be the Digital Default value. -+ f. Let unitOptions be ? GetUnitOptions(unit, options, style, valueList, digitalBase, prevStyle). -+ g. Set durationFormat.[[]] to unitOptions.[[Style]]. -+ h. Set durationFormat.[[]] to unitOptions.[[Display]]. -+features: [Intl.DurationFormat] -+includes: [testIntl.js] -+---*/ -+ -+testOption( Intl.DurationFormat, "years", "string", ["long", "short", "narrow"], "narrow"); -+testOption( Intl.DurationFormat, "months", "string", ["long", "short", "narrow"], "narrow"); -+testOption( Intl.DurationFormat, "weeks", "string", ["long", "short", "narrow"], "narrow"); -+testOption( Intl.DurationFormat, "days", "string", ["long", "short", "narrow", "numeric", "2-digit"], "numeric"); -+testOption( Intl.DurationFormat, "hours", "string", ["long", "short", "narrow", "numeric", "2-digit"], "numeric"); -+testOption( Intl.DurationFormat, "minutes", "string", ["long", "short", "narrow", "numeric", "2-digit"], "numeric"); -+testOption( Intl.DurationFormat, "milliseconds", "string", ["long", "short", "narrow", "numeric", "2-digit"], "numeric"); -+testOption( Intl.DurationFormat, "microseconds", "string", ["long", "short", "narrow", "numeric", "2-digit"], "numeric"); -+testOption( Intl.DurationFormat, "nanoseconds", "string", ["long", "short", "narrow", "numeric", "2-digit"], "numeric"); -+ -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-invalid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e2439143a0f1642abf87154e2765327bc7c87dfb ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-invalid.js -@@ -0,0 +1,23 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Tests that the option localeMatcher is processed correctly. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 18. Set durationFormat.[[FractionalDigits]] to ? GetNumberOption(options, "fractionalDigits", 0, 9, undefined). -+features: [Intl.DurationFormat] -+---*/ -+ -+const invalidOptions = [ -+ -10, -+ 10 -+]; -+ -+for (const fractionalDigits of invalidOptions) { -+ assert.throws(RangeError, function() { -+ new Intl.DurationFormat("en", { fractionalDigits }); -+ }, `new Intl.DurationFormat("en", {fractionalDigits: "${fractionalDigits}"}) throws RangeError`); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-valid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-valid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8a505978c216c009ac66385c180d423903634019 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-fractionalDigits-valid.js -@@ -0,0 +1,25 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Tests that the option localeMatcher is processed correctly. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 18. Set durationFormat.[[FractionalDigits]] to ? GetNumberOption(options, "fractionalDigits", 0, 9, undefined). -+features: [Intl.DurationFormat] -+---*/ -+ -+const validOptions = [ -+ undefined, -+ 0, -+ 1, -+ 5, -+ 9 -+]; -+ -+for (const fractionalDigits of validOptions) { -+ const obj = new Intl.DurationFormat("en", {fractionalDigits}); -+ assert.sameValue(obj.resolvedOptions().fractionalDigits, fractionalDigits, `${fractionalDigits} is supported by DurationFormat`); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-invalid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..072cee07fb9a6fcba773f012d794f227bf93624e ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-invalid.js -@@ -0,0 +1,16 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks handling of a null options argument to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 4. Let options be GetOptionsObject(options). -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue(typeof Intl.DurationFormat, "function"); -+ -+assert.throws(TypeError, function() { new Intl.DurationFormat([], null) }) -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-localeMatcher-invalid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-localeMatcher-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..125cbb40924c175267472c3ae372325e16d622f6 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-localeMatcher-invalid.js -@@ -0,0 +1,30 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks handling of invalid value for the localeMatcher option to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 5. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit"). -+features: [Intl.DurationFormat] -+---*/ -+ -+const invalidOptions = [ -+ null, -+ 1, -+ "", -+ "Lookup", -+ "LOOKUP", -+ "lookup\0", -+ "Best fit", -+ "BEST FIT", -+ "best\u00a0fit", -+]; -+ -+for (const localeMatcher of invalidOptions) { -+ assert.throws(RangeError, function() { -+ new Intl.DurationFormat([], { localeMatcher }); -+ }, `${localeMatcher} is an invalid localeMatcher option value`); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-localeMatcher-valid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-localeMatcher-valid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b8758084f26176053ce952579b8cb18f5d11fb21 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-localeMatcher-valid.js -@@ -0,0 +1,15 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Tests that the option localeMatcher is processed correctly. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 5. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit"). -+features: [Intl.DurationFormat] -+includes: [testIntl.js] -+---*/ -+ -+testOption(Intl.DurationFormat, "localeMatcher", "string", ["lookup", "best fit"], "best fit", {noReturn: true}); -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-numberingSystem-invalid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-numberingSystem-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6dfe98eb6f2681b45a8f82291194e3feb430aaa7 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-numberingSystem-invalid.js -@@ -0,0 +1,36 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: > -+ Checks error cases for the options argument to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 6. Let numberingSystem be ? GetOption(options, "numberingSystem", "string", undefined, undefined). -+ 7. If numberingSystem does not match the Unicode Locale Identifier type nonterminal, throw a RangeError exception. -+features: [Intl.DurationFormat] -+---*/ -+ -+const invalidOptions = [ -+ "", -+ "a", -+ "ab", -+ "abcdefghi", -+ "abc-abcdefghi", -+ "!invalid!", -+ "-latn-", -+ "latn-", -+ "latn--", -+ "latn-ca", -+ "latn-ca-", -+ "latn-ca-gregory", -+ "latné", -+ "latn编号", -+]; -+for (const numberingSystem of invalidOptions) { -+ assert.throws(RangeError, function() { -+ new Intl.DurationFormat('en', {numberingSystem}); -+ }, `new Intl.DurationFormat("en", {numberingSystem: "${numberingSystem}"}) throws RangeError`); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-numberingSystem-valid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-numberingSystem-valid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fc50592554007d29a4439502cb91159e095f6d8a ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-numberingSystem-valid.js -@@ -0,0 +1,21 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: > -+ Checks error cases for the options argument to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 6. Let numberingSystem be ? GetOption(options, "numberingSystem", "string", undefined, undefined). -+ 7. If numberingSystem does not match the Unicode Locale Identifier type nonterminal, throw a RangeError exception. -+features: [Intl.DurationFormat] -+---*/ -+ -+const numberingSystems = Intl.supportedValuesOf("numberingSystem"); -+ -+for (const numberingSystem of numberingSystems) { -+ const obj = new Intl.DurationFormat("en", {numberingSystem}); -+ assert.sameValue(obj.resolvedOptions().numberingSystem, numberingSystem, `${numberingSystem} is supported by DurationFormat`); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-order.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-order.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7f91288b31d91d426de142d2c890881be30501ea ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-order.js -@@ -0,0 +1,41 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks the order of operations on the options argument to the DurationFormat constructor. -+info: | -+ Intl.DurationFormat ( [ locales [ , options ] ] ) -+ (...) -+ 5. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit"). -+ 6. Let numberingSystem be ? GetOption(options, "numberingSystem", "string", undefined, undefined). -+ 13. Let style be ? GetOption(options, "style", "string", « "long", "short", "narrow", "digital" », "long"). -+includes: [compareArray.js] -+features: [Intl.DurationFormat] -+---*/ -+ -+var actual = []; -+ -+const options = { -+ get localeMatcher() { -+ actual.push("localeMatcher"); -+ return undefined; -+ }, -+ get numberingSystem() { -+ actual.push("numberingSystem"); -+ return undefined; -+ }, -+ get style() { -+ actual.push("style"); -+ return undefined; -+ }, -+}; -+ -+const expected = [ -+ "localeMatcher", -+ "numberingSystem", -+ "style" -+]; -+ -+let nf = new Intl.DurationFormat(undefined, options); -+assert.compareArray(actual, expected); -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-style-invalid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-style-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..bd660129f1775c49d256036f8dfadba689cf04a9 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-style-invalid.js -@@ -0,0 +1,37 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks handling of invalid value for the style option to the DurationFormat constructor. -+info: | -+ InitializeDurationFormat (DurationFormat, locales, options) -+ (...) -+ 13. Let style be ? GetOption(options, "style", "string", « "long", "short", "narrow", "digital" », "long"). -+ 14. Set durationFormat.[[Style]] to style. -+features: [Intl.DurationFormat] -+---*/ -+ -+const invalidOptions = [ -+ null, -+ 1, -+ "", -+ "Long", -+ "LONG", -+ "long\0", -+ "Short", -+ "SHORT", -+ "short\0", -+ "Narrow", -+ "NARROW", -+ "narrow\0", -+ "Digital", -+ "DIGITAL", -+ "digital\0", -+]; -+ -+for (const invalidOption of invalidOptions) { -+ assert.throws(RangeError, function() { -+ new Intl.DurationFormat([], {"style": invalidOption}); -+ }, `${invalidOption} is an invalid style option value`); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/constructor-options-style-valid.js b/JSTests/test262/test/intl402/DurationFormat/constructor-options-style-valid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..464b59a2c63630fdb5ce422b801daa4be513cd09 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/constructor-options-style-valid.js -@@ -0,0 +1,31 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: Checks handling of valid values for the style option to the DurationFormat constructor. -+info: | -+ InitializeDurationFormat (DurationFormat, locales, options) -+ (...) -+ 13. Let style be ? GetOption(options, "style", "string", « "long", "short", "narrow", "digital" », "long"). -+ 14. Set durationFormat.[[Style]] to style. -+features: [Intl.DurationFormat] -+---*/ -+ -+const validOptions = [ -+ [undefined, "long"], -+ ["long", "long"], -+ ["short", "short"], -+ ["narrow", "narrow"], -+ ["digital", "digital"], -+ [{ toString() { return "short"; } }, "short"], -+ [{ toString() { return "long"; } }, "long"], -+ [{ toString() { return "narrow"; } }, "narrow"], -+ [{ toString() { return "digital"; } }, "digital"], -+]; -+ -+for (const [validOption, expected] of validOptions) { -+ const df = new Intl.DurationFormat([], {"style": validOption}); -+ const resolvedOptions = df.resolvedOptions(); -+ assert.sameValue(resolvedOptions.style, expected); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/instance/extensibility.js b/JSTests/test262/test/intl402/DurationFormat/extensibility.js -similarity index 100% -rename from JSTests/test262/test/intl402/DurationFormat/instance/extensibility.js -rename to JSTests/test262/test/intl402/DurationFormat/extensibility.js -diff --git a/JSTests/test262/test/intl402/DurationFormat/instance/length.js b/JSTests/test262/test/intl402/DurationFormat/length.js -similarity index 100% -rename from JSTests/test262/test/intl402/DurationFormat/instance/length.js -rename to JSTests/test262/test/intl402/DurationFormat/length.js -diff --git a/JSTests/test262/test/intl402/DurationFormat/instance/name.js b/JSTests/test262/test/intl402/DurationFormat/name.js -similarity index 100% -rename from JSTests/test262/test/intl402/DurationFormat/instance/name.js -rename to JSTests/test262/test/intl402/DurationFormat/name.js -diff --git a/JSTests/test262/test/intl402/DurationFormat/newtarget-undefined.js b/JSTests/test262/test/intl402/DurationFormat/newtarget-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..59d4f2dba023546b18b9f7b123260f392bd816b1 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/newtarget-undefined.js -@@ -0,0 +1,27 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat -+description: > -+ Verifies the NewTarget check for Intl.DurationFormat. -+info: | -+ Intl.DurationFormat ([ locales [ , options ]]) -+ (...) -+ 1. If NewTarget is undefined, throw a TypeError exception. -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue(typeof Intl.DurationFormat, "function"); -+ -+assert.throws(TypeError, function() { -+ Intl.DurationFormat(); -+}); -+ -+assert.throws(TypeError, function() { -+ Intl.DurationFormat("en"); -+}); -+ -+assert.throws(TypeError, function() { -+ Intl.DurationFormat("not-valid-tag"); -+}); -diff --git a/JSTests/test262/test/intl402/DurationFormat/instance/prop-desc.js b/JSTests/test262/test/intl402/DurationFormat/prop-desc.js -similarity index 100% -rename from JSTests/test262/test/intl402/DurationFormat/instance/prop-desc.js -rename to JSTests/test262/test/intl402/DurationFormat/prop-desc.js -diff --git a/JSTests/test262/test/intl402/DurationFormat/instance/prototype.js b/JSTests/test262/test/intl402/DurationFormat/prototype.js -similarity index 100% -rename from JSTests/test262/test/intl402/DurationFormat/instance/prototype.js -rename to JSTests/test262/test/intl402/DurationFormat/prototype.js -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/basic.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/basic.js -new file mode 100644 -index 0000000000000000000000000000000000000000..0ed87ecd89e20323f07d3133b9c5b13f991bed3a ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/basic.js -@@ -0,0 +1,19 @@ -+// Copyright 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: Tests that Intl.DurationFormat has a supportedLocalesOf property, and it works as expected. -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue(typeof Intl.DurationFormat.supportedLocalesOf, "function", -+ "supportedLocalesOf should be supported."); -+ -+const defaultLocale = new Intl.DurationFormat().resolvedOptions().locale; -+const notSupported = "zxx"; // "no linguistic content" -+const requestedLocales = [defaultLocale, notSupported]; -+ -+const supportedLocales = Intl.DurationFormat.supportedLocalesOf(requestedLocales); -+assert.sameValue(supportedLocales.length, 1, "The length of the supported locales list should be 1"); -+assert.sameValue(supportedLocales[0], defaultLocale, "The default locale is returned in the supported list."); -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/branding.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/branding.js -new file mode 100644 -index 0000000000000000000000000000000000000000..960b9584726e926ce52b23927332629fb14ea34c ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/branding.js -@@ -0,0 +1,32 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: > -+ Verifies there's no branding check for Intl.DurationFormat.supportedLocalesOf(). -+info: | -+ Intl.DurationFormat.supportedLocalesOf ( locales [, options ]) -+features: [Intl.DurationFormat] -+---*/ -+ -+const supportedLocalesOf = Intl.DurationFormat.supportedLocalesOf; -+ -+assert.sameValue(typeof supportedLocalesOf, "function"); -+ -+const thisValues = [ -+ undefined, -+ null, -+ true, -+ "", -+ Symbol(), -+ 1, -+ {}, -+ Intl.DurationFormat, -+ Intl.DurationFormat.prototype, -+]; -+ -+for (const thisValue of thisValues) { -+ const result = supportedLocalesOf.call(thisValue); -+ assert.sameValue(Array.isArray(result), true); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/length.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/length.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b0b50d466a16c48bdf71b2512f0289119f8b9f44 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/length.js -@@ -0,0 +1,22 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: > -+ Checks the "length" property of Intl.DurationFormat.supportedLocalesOf(). -+info: | -+ The value of the length property of the supportedLocalesOf method is 1. -+ Unless specified otherwise in this document, the objects, functions, and constructors described in this standard are subject to the generic requirements and restrictions specified for standard built-in ECMAScript objects in the ECMAScript 2019 Language Specification, 10th edition, clause 17, or successor. -+ Every built-in function object, including constructors, has a length property whose value is an integer. -+ 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: [Intl.DurationFormat] -+---*/ -+ -+verifyProperty(Intl.DurationFormat.supportedLocalesOf, "length", { -+ value: 1, -+ writable: false, -+ enumerable: false, -+ configurable: true, -+}); -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-empty.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-empty.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d1c4c3d427d02bfe14d6e2e8178ca7f778125285 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-empty.js -@@ -0,0 +1,19 @@ -+// Copyright 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: Checks handling of an empty locales argument to the supportedLocalesOf function. -+info: | -+ Intl.DurationFormat.supportedLocalesOf ( locales [, options ]) -+ (...) -+ 3. Return ? SupportedLocales(availableLocales, requestedLocales, options). -+includes: [compareArray.js] -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue(typeof Intl.DurationFormat.supportedLocalesOf, "function", -+ "Should support Intl.DurationFormat.supportedLocalesOf."); -+ -+assert.compareArray(Intl.DurationFormat.supportedLocalesOf(), []); -+assert.compareArray(Intl.DurationFormat.supportedLocalesOf([]), []); -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-invalid.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..534545d99ecf76237a0f21acad381838faea3d00 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-invalid.js -@@ -0,0 +1,20 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: Checks error cases for the locales argument to the supportedLocalesOf function. -+info: | -+ Intl.DurationFormat.supportedLocalesOf ( locales [, options ]) -+ (...) -+ 2. Let requestedLocales be CanonicalizeLocaleList(locales). -+includes: [testIntl.js] -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue(typeof Intl.DurationFormat.supportedLocalesOf, "function", -+ "Should support Intl.DurationFormat.supportedLocalesOf."); -+ -+for (const [locales, expectedError] of getInvalidLocaleArguments()) { -+ assert.throws(expectedError, () => Intl.DurationFormat.supportedLocalesOf(locales)); -+} -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-specific.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-specific.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a9ab7be55b82d77db3888e31b46c08e6ba693fe0 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/locales-specific.js -@@ -0,0 +1,22 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: Checks handling of specific locales arguments to the supportedLocalesOf function. -+info: | -+ Intl.DurationFormat.supportedLocalesOf ( locales [, options ]) -+ (...) -+ 3. Return ? SupportedLocales(availableLocales, requestedLocales, options). -+includes: [compareArray.js] -+locale: [sr, sr-Thai-RS, de, zh-CN] -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue(typeof Intl.DurationFormat.supportedLocalesOf, "function", -+ "Should support Intl.DurationFormat.supportedLocalesOf."); -+ -+assert.compareArray(Intl.DurationFormat.supportedLocalesOf("sr"), ["sr"]); -+ -+const multiLocale = ["sr-Thai-RS", "de", "zh-CN"]; -+assert.compareArray(Intl.DurationFormat.supportedLocalesOf(multiLocale, {localeMatcher: "lookup"}), multiLocale); -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/name.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/name.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a2c8ed63398c2c1a2e18813f3ab8959d0f2138e6 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/name.js -@@ -0,0 +1,21 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: > -+ Checks the "name" property of Intl.DurationFormat.supportedLocalesOf(). -+info: | -+ Unless specified otherwise in this document, the objects, functions, and constructors described in this standard are subject to the generic requirements and restrictions specified for standard built-in ECMAScript objects in the ECMAScript 2019 Language Specification, 10th edition, clause 17, or successor. -+ Every built-in function object, including constructors, that is not identified as an anonymous function 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. -+ Unless otherwise specified, the name property of a built-in function object, if it exists, has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }. -+includes: [propertyHelper.js] -+features: [Intl.DurationFormat] -+---*/ -+ -+verifyProperty(Intl.DurationFormat.supportedLocalesOf, "name", { -+ value: "supportedLocalesOf", -+ writable: false, -+ enumerable: false, -+ configurable: true, -+}); -diff --git a/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/prop-desc.js b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/prop-desc.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8226a7a98424db6232b05bdb8280b26dca7b32c1 ---- /dev/null -+++ b/JSTests/test262/test/intl402/DurationFormat/supportedLocalesOf/prop-desc.js -@@ -0,0 +1,29 @@ -+// Copyright 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-Intl.DurationFormat.supportedLocalesOf -+description: > -+ Checks the "supportedLocalesOf" property of the DurationFormat prototype object. -+info: | -+ Intl.DurationFormat.supportedLocalesOf ( locales [, options ]) -+ -+ Unless specified otherwise in this document, the objects, functions, and constructors described in this standard are subject to the generic requirements and restrictions specified for standard built-in ECMAScript objects in the ECMAScript 2019 Language Specification, 10th edition, clause 17, or successor. -+ -+ Every other data property described in clauses 18 through 26 and in Annex B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified. -+includes: [propertyHelper.js] -+features: [Intl.DurationFormat] -+---*/ -+ -+assert.sameValue( -+ typeof Intl.DurationFormat.supportedLocalesOf, -+ "function", -+ "typeof Intl.DurationFormat.supportedLocalesOf is function" -+); -+ -+verifyProperty(Intl.DurationFormat, "supportedLocalesOf", { -+ writable: true, -+ enumerable: false, -+ configurable: true, -+}); -+ -diff --git a/JSTests/test262/test/intl402/Intl/DateTimeFormat/prototype/formatRange/fails-on-distinct-temporal-types.js b/JSTests/test262/test/intl402/Intl/DateTimeFormat/prototype/formatRange/fails-on-distinct-temporal-types.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c3ec39df4c19f509b60dad1339725ecadc6ac39c ---- /dev/null -+++ b/JSTests/test262/test/intl402/Intl/DateTimeFormat/prototype/formatRange/fails-on-distinct-temporal-types.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-intl.datetimeformat.prototype.formatRange -+description: formatRange fails if given arguments of different Temporal types -+features: [Temporal] -+---*/ -+ -+const us = new Intl.DateTimeFormat('en-US'); -+ -+const instances = { -+ date: new Date(1580527800000), -+ instant: new Temporal.Instant(0n), -+ plaindate: new Temporal.PlainDate(2000, 5, 2), -+ plaindatetime: new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321), -+ plainmonthday: new Temporal.PlainMonthDay(5, 2), -+ plaintime: new Temporal.PlainTime(13, 37), -+ plainyearmonth: new Temporal.PlainYearMonth(2019, 6), -+ zoneddatetime: new Temporal.ZonedDateTime(0n, 'America/Kentucky/Louisville') -+}; -+ -+Object.entries(instances).forEach(([typeName, instance]) => { -+ Object.entries(instances).forEach(([anotherTypeName, anotherInstance]) => { -+ if (typeName !== anotherTypeName) { -+ assert.throws( -+ TypeError, -+ () => { us.formatRange(instance, anotherInstance); }, -+ 'formatRange: bad arguments (' + typeName + ' and ' + anotherTypeName + ')' -+ ); -+ } -+ }); -+}); -diff --git a/JSTests/test262/test/intl402/Intl/DateTimeFormat/prototype/formatRangeToParts/fails-on-distinct-temporal-types.js b/JSTests/test262/test/intl402/Intl/DateTimeFormat/prototype/formatRangeToParts/fails-on-distinct-temporal-types.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4aeaea5c185169e247db6fc8719bda52dea5f65b ---- /dev/null -+++ b/JSTests/test262/test/intl402/Intl/DateTimeFormat/prototype/formatRangeToParts/fails-on-distinct-temporal-types.js -@@ -0,0 +1,33 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-intl.datetimeformat.prototype.formatRangeToParts -+description: formatRange fails if given arguments of different Temporal types -+features: [Temporal] -+---*/ -+ -+const us = new Intl.DateTimeFormat('en-US'); -+ -+const instances = { -+ date: new Date(1580527800000), -+ instant: new Temporal.Instant(0n), -+ plaindate: new Temporal.PlainDate(2000, 5, 2), -+ plaindatetime: new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321), -+ plainmonthday: new Temporal.PlainMonthDay(5, 2), -+ plaintime: new Temporal.PlainTime(13, 37), -+ plainyearmonth: new Temporal.PlainYearMonth(2019, 6), -+ zoneddatetime: new Temporal.ZonedDateTime(0n, 'America/Kentucky/Louisville') -+}; -+ -+Object.entries(instances).forEach(([typeName, instance]) => { -+ Object.entries(instances).forEach(([anotherTypeName, anotherInstance]) => { -+ if (typeName !== anotherTypeName) { -+ assert.throws( -+ TypeError, -+ () => { us.formatRangeToParts(instance, anotherInstance); }, -+ 'formatRange: bad arguments (' + typeName + ' and ' + anotherTypeName + ')' -+ ); -+ } -+ }); -+}); -diff --git a/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js b/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js -index 1274a0daac770e613685c1ee65a6554461a43f71..e92266498e423be0cfeee27c02f3c25c5d714ab0 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js -+++ b/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement-invalid.js -@@ -1,4 +1,5 @@ - // Copyright 2021 the V8 project authors. All rights reserved. -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. - // This code is governed by the BSD license found in the LICENSE file. - /*--- - esid: sec-initializenumberformat -@@ -26,14 +27,18 @@ assert.throws(RangeError, function() { - new Intl.NumberFormat([], {roundingIncrement: 5001}); - }, '5001'); - --assert.throws(RangeError, function() { -+assert.throws(TypeError, function() { - new Intl.NumberFormat([], {roundingIncrement: 2, roundingPriority: 'morePrecision'}); - }, '2, roundingType is "morePrecision"'); - --assert.throws(RangeError, function() { -+assert.throws(TypeError, function() { - new Intl.NumberFormat([], {roundingIncrement: 2, roundingPriority: 'lessPrecision'}); - }, '2, roundingType is "lessPrecision"'); - --assert.throws(RangeError, function() { -+assert.throws(TypeError, function() { - new Intl.NumberFormat([], {roundingIncrement: 2, minimumSignificantDigits: 1}); - }, '2, roundingType is "significantDigits"'); -+ -+assert.throws(RangeError, function() { -+ new Intl.NumberFormat([], {roundingIncrement: 2, maximumFractionDigits:3 , minimumFractionDigits:2 }); -+}, '"maximumFractionDigits" is not equal to "minimumFractionDigits"'); -diff --git a/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement.js b/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement.js -index ed2637edac33c1604d6fec0f4818bc15b09db4d7..95a4bd5ce28440395f5e809b4f337cd6a94bbdd0 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement.js -+++ b/JSTests/test262/test/intl402/NumberFormat/constructor-roundingIncrement.js -@@ -39,7 +39,8 @@ for (const [value, expected] of values) { - get roundingIncrement() { - callOrder.push("roundingIncrement"); - return value; -- } -+ }, -+ minimumFractionDigits: 3 - }); - const resolvedOptions = nf.resolvedOptions(); - assert("roundingIncrement" in resolvedOptions, "has property for value " + value); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-max-min-fraction-significant-digits.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-max-min-fraction-significant-digits.js -new file mode 100644 -index 0000000000000000000000000000000000000000..dcbdeb8266e782b76c034373fdbf34c408c63520 ---- /dev/null -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-max-min-fraction-significant-digits.js -@@ -0,0 +1,27 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-intl.numberformat.prototype.format -+description: Tests that the digits are determined correctly when specifying at same time «"minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits"» -+features: [Intl.NumberFormat-v3] -+includes: [testIntl.js] -+---*/ -+ -+var locales = [new Intl.NumberFormat().resolvedOptions().locale, "ar", "de", "th", "ja"]; -+var numberingSystems = ["latn", "arab", "thai", "hanidec"]; -+ -+var nfTestMatrix = [ -+ // mnfd & mxfd > mnsd & mxsd -+ [{ useGrouping: false, minimumFractionDigits: 1, maximumFractionDigits: 4, minimumSignificantDigits: 1, maximumSignificantDigits: 2 }, { 1.23456: "1.2" }], -+ [{ useGrouping: false, minimumFractionDigits: 2, maximumFractionDigits: 4, minimumSignificantDigits: 1, maximumSignificantDigits: 2 }, { 1.23456: "1.2" }], -+ // mnfd & mxfd ∩ mnsd & mxsd -+ [{ useGrouping: false, minimumFractionDigits: 2, maximumFractionDigits: 4, minimumSignificantDigits: 2, maximumSignificantDigits: 3 }, { 1.23456: "1.23" }], -+ // mnfd & mxfd < mnsd & mxsd -+ [{ useGrouping: false, minimumFractionDigits: 1, maximumFractionDigits: 2, minimumSignificantDigits: 1, maximumSignificantDigits: 4}, { 1.23456: "1.235" }], -+ [{ useGrouping: false, minimumFractionDigits: 1, maximumFractionDigits: 2, minimumSignificantDigits: 2, maximumSignificantDigits: 4}, { 1.23456: "1.235" }], -+]; -+ -+nfTestMatrix.forEach((nfTestValues)=>{ -+ testNumberFormat(locales, numberingSystems, ...nfTestValues) -+}) -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js -index 5e1995a83d876ab046de9d3614c45d219540ddec..3958ec6c64f2997a373326bd165ed9c8484af65f 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-10.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 10, maximumFractionDigits: 2}, -+ {roundingIncrement: 10, maximumFractionDigits: 2, minimumFractionDigits: 2}, - { -- '1.100': '1.1', -- '1.125': '1.1', -- '1.150': '1.2', -- '1.175': '1.2', -- '1.200': '1.2', -+ '1.100': '1.10', -+ '1.125': '1.10', -+ '1.150': '1.20', -+ '1.175': '1.20', -+ '1.200': '1.20', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 10, maximumFractionDigits: 3}, -+ {roundingIncrement: 10, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.0100': '1.01', -- '1.0125': '1.01', -- '1.0150': '1.02', -- '1.0175': '1.02', -- '1.0200': '1.02', -+ '1.0100': '1.010', -+ '1.0125': '1.010', -+ '1.0150': '1.020', -+ '1.0175': '1.020', -+ '1.0200': '1.020', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js -index 4cba468788b92716dab99aee893d8bb15a663391..9e5e699e13b4a1f374a1858bd088933ac662bd33 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-100.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 100, maximumFractionDigits: 3}, -+ {roundingIncrement: 100, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.100': '1.1', -- '1.125': '1.1', -- '1.150': '1.2', -- '1.175': '1.2', -- '1.200': '1.2', -+ '1.100': '1.100', -+ '1.125': '1.100', -+ '1.150': '1.200', -+ '1.175': '1.200', -+ '1.200': '1.200', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 100, maximumFractionDigits: 4}, -+ {roundingIncrement: 100, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.0100': '1.01', -- '1.0125': '1.01', -- '1.0150': '1.02', -- '1.0175': '1.02', -- '1.0200': '1.02', -+ '1.0100': '1.0100', -+ '1.0125': '1.0100', -+ '1.0150': '1.0200', -+ '1.0175': '1.0200', -+ '1.0200': '1.0200', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js -index df30e5546bead4733e38b106b64fb595dfc81643..e7a013a1a8d3a1b6132aef636e1f4222e304f233 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 1000, maximumFractionDigits: 4}, -+ {roundingIncrement: 1000, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.100': '1.1', -- '1.125': '1.1', -- '1.150': '1.2', -- '1.175': '1.2', -- '1.200': '1.2', -+ '1.100': '1.1000', -+ '1.125': '1.1000', -+ '1.150': '1.2000', -+ '1.175': '1.2000', -+ '1.200': '1.2000', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 1000, maximumFractionDigits: 5}, -+ {roundingIncrement: 1000, maximumFractionDigits: 5, minimumFractionDigits: 5}, - { -- '1.0100': '1.01', -- '1.0125': '1.01', -- '1.0150': '1.02', -- '1.0175': '1.02', -- '1.0200': '1.02', -+ '1.0100': '1.01000', -+ '1.0125': '1.01000', -+ '1.0150': '1.02000', -+ '1.0175': '1.02000', -+ '1.0200': '1.02000', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2.js -index 3d208893c6de2ef83c75dbf899c5d904f4ab61ef..6ff2f1e9446c95d8ce8d2ee6c8c560b4f050555d 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2.js -@@ -15,7 +15,7 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 2, maximumFractionDigits: 1}, -+ {roundingIncrement: 2, maximumFractionDigits: 1, minimumFractionDigits: 1}, - { - '1.20': '1.2', - '1.25': '1.2', -@@ -28,7 +28,7 @@ testNumberFormat( - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 2, maximumFractionDigits: 2}, -+ {roundingIncrement: 2, maximumFractionDigits: 2, minimumFractionDigits: 2}, - { - '1.020': '1.02', - '1.025': '1.02', -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js -index 3011904d153e009387ee50d6506ce6a1e3c7a408..b2e0c4943af13cc383c8c506926c489b4bff2440 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-20.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 20, maximumFractionDigits: 2}, -+ {roundingIncrement: 20, maximumFractionDigits: 2, minimumFractionDigits: 2}, - { -- '1.20': '1.2', -- '1.25': '1.2', -- '1.30': '1.4', -- '1.35': '1.4', -- '1.40': '1.4', -+ '1.20': '1.20', -+ '1.25': '1.20', -+ '1.30': '1.40', -+ '1.35': '1.40', -+ '1.40': '1.40', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 20, maximumFractionDigits: 3}, -+ {roundingIncrement: 20, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.020': '1.02', -- '1.025': '1.02', -- '1.030': '1.04', -- '1.035': '1.04', -- '1.040': '1.04', -+ '1.020': '1.020', -+ '1.025': '1.020', -+ '1.030': '1.040', -+ '1.035': '1.040', -+ '1.040': '1.040', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js -index 08d5aa2e2cfd291ca6e20aa88fe2f76ad3ae2228..5fb3f2240e2a0c060143efac8cb27209355d31b8 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-200.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 200, maximumFractionDigits: 3}, -+ {roundingIncrement: 200, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.20': '1.2', -- '1.25': '1.2', -- '1.30': '1.4', -- '1.35': '1.4', -- '1.40': '1.4', -+ '1.20': '1.200', -+ '1.25': '1.200', -+ '1.30': '1.400', -+ '1.35': '1.400', -+ '1.40': '1.400', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 200, maximumFractionDigits: 4}, -+ {roundingIncrement: 200, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.020': '1.02', -- '1.025': '1.02', -- '1.030': '1.04', -- '1.035': '1.04', -- '1.040': '1.04', -+ '1.020': '1.0200', -+ '1.025': '1.0200', -+ '1.030': '1.0400', -+ '1.035': '1.0400', -+ '1.040': '1.0400', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js -index 2ea562c2b09a60a31270a9683ebe7cbcf46eba25..7ead62f25f8f6ef4833d840e1d7f7f2dcbe1d7ef 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 2000, maximumFractionDigits: 4}, -+ {roundingIncrement: 2000, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.20': '1.2', -- '1.25': '1.2', -- '1.30': '1.4', -- '1.35': '1.4', -- '1.40': '1.4', -+ '1.20': '1.2000', -+ '1.25': '1.2000', -+ '1.30': '1.4000', -+ '1.35': '1.4000', -+ '1.40': '1.4000', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 2000, maximumFractionDigits: 5}, -+ {roundingIncrement: 2000, maximumFractionDigits: 5, minimumFractionDigits: 5}, - { -- '1.020': '1.02', -- '1.025': '1.02', -- '1.030': '1.04', -- '1.035': '1.04', -- '1.040': '1.04', -+ '1.020': '1.02000', -+ '1.025': '1.02000', -+ '1.030': '1.04000', -+ '1.035': '1.04000', -+ '1.040': '1.04000', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js -index 607795d5229957d399e2f15504966da87ef4e3d4..5a89388b1cf82c8e6125ebd141f4702d342a1da1 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-25.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 25, maximumFractionDigits: 2, minimumFractionDigits: 1}, -+ {roundingIncrement: 25, maximumFractionDigits: 2, minimumFractionDigits: 2}, - { - '1.2500': '1.25', - '1.3125': '1.25', -- '1.3750': '1.5', -- '1.4375': '1.5', -- '1.5000': '1.5', -+ '1.3750': '1.50', -+ '1.4375': '1.50', -+ '1.5000': '1.50', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 25, maximumFractionDigits: 3}, -+ {roundingIncrement: 25, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { - '1.02500': '1.025', - '1.03125': '1.025', -- '1.03750': '1.05', -- '1.04375': '1.05', -- '1.05000': '1.05', -+ '1.03750': '1.050', -+ '1.04375': '1.050', -+ '1.05000': '1.050', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js -index 4843cad0bb4021ad92ca1d071e1acf1b7d68f6a0..4aa7fbb9c2dd932bd0958f0aa2c6bd99f37a38f6 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-250.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 250, maximumFractionDigits: 3, minimumFractionDigits: 1}, -+ {roundingIncrement: 250, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.2500': '1.25', -- '1.3125': '1.25', -- '1.3750': '1.5', -- '1.4375': '1.5', -- '1.5000': '1.5', -+ '1.2500': '1.250', -+ '1.3125': '1.250', -+ '1.3750': '1.500', -+ '1.4375': '1.500', -+ '1.5000': '1.500', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 250, maximumFractionDigits: 4}, -+ {roundingIncrement: 250, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.02500': '1.025', -- '1.03125': '1.025', -- '1.03750': '1.05', -- '1.04375': '1.05', -- '1.05000': '1.05', -+ '1.02500': '1.0250', -+ '1.03125': '1.0250', -+ '1.03750': '1.0500', -+ '1.04375': '1.0500', -+ '1.05000': '1.0500', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js -index 57859bdb2b592602436d92eb38d6ee070259e01f..754a35321afe13e7bbd8a50a91ff59e23205a4a0 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 2500, maximumFractionDigits: 4, minimumFractionDigits: 1}, -+ {roundingIncrement: 2500, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.2500': '1.25', -- '1.3125': '1.25', -- '1.3750': '1.5', -- '1.4375': '1.5', -- '1.5000': '1.5', -+ '1.2500': '1.2500', -+ '1.3125': '1.2500', -+ '1.3750': '1.5000', -+ '1.4375': '1.5000', -+ '1.5000': '1.5000', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 2500, maximumFractionDigits: 5}, -+ {roundingIncrement: 2500, maximumFractionDigits: 5, minimumFractionDigits: 5}, - { -- '1.02500': '1.025', -- '1.03125': '1.025', -- '1.03750': '1.05', -- '1.04375': '1.05', -- '1.05000': '1.05', -+ '1.02500': '1.02500', -+ '1.03125': '1.02500', -+ '1.03750': '1.05000', -+ '1.04375': '1.05000', -+ '1.05000': '1.05000', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js -index 85d56cb415ffc4e5feb5433e1583f7f74d37fbd4..9fe2e0b1841089f756459ce9b0924b3e970e7a74 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5.js -@@ -28,12 +28,12 @@ testNumberFormat( - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 5, maximumFractionDigits: 2}, -+ {roundingIncrement: 5, maximumFractionDigits: 2, minimumFractionDigits: 2}, - { - '1.0500': '1.05', - '1.0625': '1.05', -- '1.0750': '1.1', -- '1.0875': '1.1', -- '1.1000': '1.1', -+ '1.0750': '1.10', -+ '1.0875': '1.10', -+ '1.1000': '1.10', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js -index e527372331459d7fc0397551e9334ab4fd1038d1..f7f5528f7b3b98abb2ad9c7050aaffeac105627d 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-50.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 50, maximumFractionDigits: 2, minimumFractionDigits: 1}, -+ {roundingIncrement: 50, maximumFractionDigits: 2, minimumFractionDigits: 2}, - { -- '1.500': '1.5', -- '1.625': '1.5', -- '1.750': '2.0', -- '1.875': '2.0', -- '2.000': '2.0', -+ '1.500': '1.50', -+ '1.625': '1.50', -+ '1.750': '2.00', -+ '1.875': '2.00', -+ '2.000': '2.00', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 50, maximumFractionDigits: 3}, -+ {roundingIncrement: 50, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.0500': '1.05', -- '1.0625': '1.05', -- '1.0750': '1.1', -- '1.0875': '1.1', -- '1.1000': '1.1', -+ '1.0500': '1.050', -+ '1.0625': '1.050', -+ '1.0750': '1.100', -+ '1.0875': '1.100', -+ '1.1000': '1.100', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js -index 772cf1838d6d5d2f9ee5477e0af9f8873b25f067..6f0136d130eac5677fec097694246b97180dd634 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-500.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 500, maximumFractionDigits: 3, minimumFractionDigits: 1}, -+ {roundingIncrement: 500, maximumFractionDigits: 3, minimumFractionDigits: 3}, - { -- '1.500': '1.5', -- '1.625': '1.5', -- '1.750': '2.0', -- '1.875': '2.0', -- '2.000': '2.0', -+ '1.500': '1.500', -+ '1.625': '1.500', -+ '1.750': '2.000', -+ '1.875': '2.000', -+ '2.000': '2.000', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 500, maximumFractionDigits: 4}, -+ {roundingIncrement: 500, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.0500': '1.05', -- '1.0625': '1.05', -- '1.0750': '1.1', -- '1.0875': '1.1', -- '1.1000': '1.1', -+ '1.0500': '1.0500', -+ '1.0625': '1.0500', -+ '1.0750': '1.1000', -+ '1.0875': '1.1000', -+ '1.1000': '1.1000', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js -index 1929658e028b1030354db5d84460950d45692495..e5d708347f56aa97a4e79de4f7452ebcdafe9bab 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js -@@ -15,25 +15,25 @@ var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 5000, maximumFractionDigits: 4, minimumFractionDigits: 1}, -+ {roundingIncrement: 5000, maximumFractionDigits: 4, minimumFractionDigits: 4}, - { -- '1.500': '1.5', -- '1.625': '1.5', -- '1.750': '2.0', -- '1.875': '2.0', -- '2.000': '2.0', -+ '1.500': '1.5000', -+ '1.625': '1.5000', -+ '1.750': '2.0000', -+ '1.875': '2.0000', -+ '2.000': '2.0000', - } - ); - - testNumberFormat( - locales, - numberingSystems, -- {roundingIncrement: 5000, maximumFractionDigits: 5}, -+ {roundingIncrement: 5000, maximumFractionDigits: 5, minimumFractionDigits: 5}, - { -- '1.0500': '1.05', -- '1.0625': '1.05', -- '1.0750': '1.1', -- '1.0875': '1.1', -- '1.1000': '1.1', -+ '1.0500': '1.05000', -+ '1.0625': '1.05000', -+ '1.0750': '1.10000', -+ '1.0875': '1.10000', -+ '1.1000': '1.10000', - } - ); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js -index 91725349d0b3e9bd488c1b5753667852ecec2deb..356eafc84ffc83a0d55672b2e082197b9a5dbec9 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js -@@ -14,15 +14,15 @@ var locales = [ - ]; - var numberingSystems = ['arab', 'latn', 'thai', 'hanidec']; - --// minimumSignificantDigits is less precise -+// maximumSignificantDigits defaults to 21, beating maximumFractionDigits, which defaults to 3 - testNumberFormat( - locales, - numberingSystems, - {useGrouping: false, roundingPriority: 'morePrecision', minimumSignificantDigits: 2, minimumFractionDigits: 2}, -- {'1': '1.00'} -+ {'1': '1.0'} - ); - --// minimumSignificantDigits is more precise -+// maximumSignificantDigits defaults to 21, beating maximumFractionDigits, which defaults to 3 - testNumberFormat( - locales, - numberingSystems, -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/formatRange/x-greater-than-y-throws.js b/JSTests/test262/test/intl402/NumberFormat/prototype/formatRange/x-greater-than-y-throws.js -index 9b192d4bd352b2d5736fd7e46b9eed4b0939f24f..45ccd67d84cfafac2bfb7625464c2c74d7261e76 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/formatRange/x-greater-than-y-throws.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/formatRange/x-greater-than-y-throws.js -@@ -18,7 +18,7 @@ info: | - (...) - 1.1.21_4.a if y is a mathematical value and y < 0, throw a RangeError exception. - 1.1.21_4.b if y is -∞, throw a RangeError exception. -- features: [Intl.NumberFormat-v3] -+features: [Intl.NumberFormat-v3] - ---*/ - - const nf = new Intl.NumberFormat(); -diff --git a/JSTests/test262/test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js b/JSTests/test262/test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js -index 719f1bee00468f04222f27c51badae92e3e7fcc4..ab264b92e6df2d0347acdc7501d79ded62ea0f52 100644 ---- a/JSTests/test262/test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js -+++ b/JSTests/test262/test/intl402/NumberFormat/prototype/formatRangeToParts/x-greater-than-y-throws.js -@@ -18,7 +18,7 @@ info: | - (...) - 1.1.21_4.a if y is a mathematical value and y < 0, throw a RangeError exception. - 1.1.21_4.b if y is -∞, throw a RangeError exception. -- features: [Intl.NumberFormat-v3] -+features: [Intl.NumberFormat-v3] - ---*/ - - const nf = new Intl.NumberFormat(); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-number.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1fde733db504a56a0776c95b87064bdb4628a702 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.era(arg); -+assert.sameValue(result, undefined, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.era(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..645159e7472e649ff19d2f2928d6c01e22eeb65d ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.era(arg); -+assert.sameValue( -+ result1, -+ undefined, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.era(arg); -+assert.sameValue( -+ result2, -+ undefined, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-number.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e355b70e95185e3228a6554d476788b4a6ab6e19 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.era(arg); -+assert.sameValue(result1, undefined, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.era(arg); -+assert.sameValue(result2, undefined, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.era(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.era(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ef916fc9c61ee8a17b8e889c02dbe0087073ac2b ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.era(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.era(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.era(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.era(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.era(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ccdbfd47285525776f7d7b8c1634d1f3d74f9e4f ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.era(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-string-invalid.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b7a6b5c0bc1e8b9df25de13031ba9b6c2855c38e ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.era(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-wrong-type.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..209579e27cd8dd9a0670352fe165940f75db4224 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.era(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.era(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..eb1e61d9b19fe4b381b56f3bb3f482a2f5a9ade5 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.era({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/leap-second.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..42cb42f55aac9f709f9963070ab48bd461eff678 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.era -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.era(arg); -+assert.sameValue( -+ result1, -+ undefined, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.era(arg); -+assert.sameValue( -+ result2, -+ undefined, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/year-zero.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/year-zero.js -index ed3d5134f74cb03bf586581deca29bb995470d7e..a9230724b7e7b1a43ce9e5707469539dbe36b37a 100644 ---- a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/year-zero.js -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/era/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.era(arg); }, -+ () => instance.era(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-number.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..9cecd5ed35a62c8382ad7d19cc56b80f43f88d55 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-number.js -@@ -0,0 +1,29 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: A number is converted to a string, then to Temporal.PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const arg = 19761118; -+ -+const result = instance.eraYear(arg); -+assert.sameValue(result, undefined, "19761118 is a valid ISO string for PlainDate"); -+ -+const numbers = [ -+ 1, -+ -19761118, -+ 1234567890, -+]; -+ -+for (const arg of numbers) { -+ assert.throws( -+ RangeError, -+ () => instance.eraYear(arg), -+ `Number ${arg} does not convert to a valid ISO string for PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-leap-second.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1a2e15215b8c1de4b94fcc77eaf9e9972c50421d ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-leap-second.js -@@ -0,0 +1,28 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: Leap second is a valid ISO string for a calendar in a property bag -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = "2016-12-31T23:59:60"; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.eraYear(arg); -+assert.sameValue( -+ result1, -+ undefined, -+ "leap second is a valid ISO string for calendar" -+); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.eraYear(arg); -+assert.sameValue( -+ result2, -+ undefined, -+ "leap second is a valid ISO string for calendar (nested property)" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-number.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-number.js -new file mode 100644 -index 0000000000000000000000000000000000000000..e1640061d8219bbe710d55ac6f63945923353351 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-number.js -@@ -0,0 +1,41 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: A number as calendar in a property bag is converted to a string, then to a calendar -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const calendar = 19970327; -+ -+let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+const result1 = instance.eraYear(arg); -+assert.sameValue(result1, undefined, "19970327 is a valid ISO string for calendar"); -+ -+arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+const result2 = instance.eraYear(arg); -+assert.sameValue(result2, undefined, "19970327 is a valid ISO string for calendar (nested property)"); -+ -+const numbers = [ -+ 1, -+ -19970327, -+ 1234567890, -+]; -+ -+for (const calendar of numbers) { -+ let arg = { year: 1976, monthCode: "M11", day: 18, calendar }; -+ assert.throws( -+ RangeError, -+ () => instance.eraYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar` -+ ); -+ arg = { year: 1976, monthCode: "M11", day: 18, calendar: { calendar } }; -+ assert.throws( -+ RangeError, -+ () => instance.eraYear(arg), -+ `Number ${calendar} does not convert to a valid ISO string for calendar (nested property)` -+ ); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-wrong-type.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..fe9969bb0cd4a730722bafca87e8f505ea2afb15 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-wrong-type.js -@@ -0,0 +1,47 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: > -+ Appropriate error thrown when a calendar property from a property bag cannot -+ be converted to a calendar object or string -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const timeZone = new Temporal.TimeZone("UTC"); -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [calendar, description] of rangeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(RangeError, () => instance.eraYear(arg), `${description} does not convert to a valid ISO string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(RangeError, () => instance.eraYear(arg), `${description} does not convert to a valid ISO string (nested property)`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], // TypeError due to missing dateFromFields() -+ [Temporal.Calendar, "Temporal.Calendar, object"], // ditto -+ [Temporal.Calendar.prototype, "Temporal.Calendar.prototype, object"], // fails brand check in dateFromFields() -+]; -+ -+for (const [calendar, description] of typeErrorTests) { -+ let arg = { year: 2019, monthCode: "M11", day: 1, calendar }; -+ assert.throws(TypeError, () => instance.eraYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+ -+ arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar } }; -+ assert.throws(TypeError, () => instance.eraYear(arg), `${description} is not a valid property bag and does not convert to a string (nested property)`); -+} -+ -+const arg = { year: 2019, monthCode: "M11", day: 1, calendar: { calendar: undefined } }; -+assert.throws(RangeError, () => instance.eraYear(arg), `nested undefined calendar property is always a RangeError`); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-year-zero.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-year-zero.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3007055aeca2d8ff4f57939253b91d15aea5b052 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-propertybag-calendar-year-zero.js -@@ -0,0 +1,24 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: Negative zero, as an extended year, is rejected -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T17:45", -+ "-000000-10-31T17:45Z", -+ "-000000-10-31T17:45+01:00", -+ "-000000-10-31T17:45+00:00[UTC]", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+invalidStrings.forEach((arg) => { -+ assert.throws( -+ RangeError, -+ () => instance.eraYear(arg), -+ "reject minus zero as extended year" -+ ); -+}); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-string-invalid.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-string-invalid.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6b3f65b9ea42beaa73361dfd20bbeb8717412807 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-string-invalid.js -@@ -0,0 +1,61 @@ -+// Copyright (C) 2022 Igalia S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: > -+ RangeError thrown if an invalid ISO string (or syntactically valid ISO string -+ that is not supported) is used as a PlainDate -+features: [Temporal, arrow-function] -+---*/ -+ -+const invalidStrings = [ -+ // invalid ISO strings: -+ "", -+ "invalid iso8601", -+ "2020-01-00", -+ "2020-01-32", -+ "2020-02-30", -+ "2021-02-29", -+ "2020-00-01", -+ "2020-13-01", -+ "2020-01-01T", -+ "2020-01-01T25:00:00", -+ "2020-01-01T01:60:00", -+ "2020-01-01T01:60:61", -+ "2020-01-01junk", -+ "2020-01-01T00:00:00junk", -+ "2020-01-01T00:00:00+00:00junk", -+ "2020-01-01T00:00:00+00:00[UTC]junk", -+ "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", -+ "02020-01-01", -+ "2020-001-01", -+ "2020-01-001", -+ "2020-01-01T001", -+ "2020-01-01T01:001", -+ "2020-01-01T01:01:001", -+ // valid, but forms not supported in Temporal: -+ "2020-W01-1", -+ "2020-001", -+ "+0002020-01-01", -+ // valid, but this calendar must not exist: -+ "2020-01-01[u-ca=notexist]", -+ // may be valid in other contexts, but insufficient information for PlainDate: -+ "2020-01", -+ "+002020-01", -+ "01-01", -+ "2020-W01", -+ "P1Y", -+ "-P12Y", -+ // valid, but outside the supported range: -+ "-999999-01-01", -+ "+999999-01-01", -+]; -+const instance = new Temporal.Calendar("iso8601"); -+for (const arg of invalidStrings) { -+ assert.throws( -+ RangeError, -+ () => instance.eraYear(arg), -+ `"${arg}" should not be a valid ISO string for a PlainDate` -+ ); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-wrong-type.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-wrong-type.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d30f3214af213ee28f3dc009eb3f830b914c513e ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/argument-wrong-type.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: > -+ Appropriate error thrown when argument cannot be converted to a valid string -+ or property bag for PlainDate -+features: [BigInt, Symbol, Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+const rangeErrorTests = [ -+ [undefined, "undefined"], -+ [null, "null"], -+ [true, "boolean"], -+ ["", "empty string"], -+ [1, "number that doesn't convert to a valid ISO string"], -+ [1n, "bigint"], -+]; -+ -+for (const [arg, description] of rangeErrorTests) { -+ assert.throws(RangeError, () => instance.eraYear(arg), `${description} does not convert to a valid ISO string`); -+} -+ -+const typeErrorTests = [ -+ [Symbol(), "symbol"], -+ [{}, "plain object"], -+ [Temporal.PlainDate, "Temporal.PlainDate, object"], -+ [Temporal.PlainDate.prototype, "Temporal.PlainDate.prototype, object"], -+]; -+ -+for (const [arg, description] of typeErrorTests) { -+ assert.throws(TypeError, () => instance.eraYear(arg), `${description} is not a valid property bag and does not convert to a string`); -+} -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/calendar-datefromfields-called-with-options-undefined.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/calendar-datefromfields-called-with-options-undefined.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a2c9fa6645e71d12d5ffb9127234178fda51b5af ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/calendar-datefromfields-called-with-options-undefined.js -@@ -0,0 +1,15 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: > -+ Calendar.dateFromFields method is called with undefined as the options value -+ when call originates internally -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const calendar = TemporalHelpers.calendarFromFieldsUndefinedOptions(); -+calendar.eraYear({ year: 2000, month: 5, day: 3, calendar }); -+assert.sameValue(calendar.dateFromFieldsCallCount, 1); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/leap-second.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/leap-second.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3d1fabe6c2bbae37c7e9774c4c0dac7aaa4a84c7 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/leap-second.js -@@ -0,0 +1,26 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.calendar.prototype.erayear -+description: Leap second is a valid ISO string for PlainDate -+features: [Temporal] -+---*/ -+ -+const instance = new Temporal.Calendar("iso8601"); -+ -+let arg = "2016-12-31T23:59:60"; -+const result1 = instance.eraYear(arg); -+assert.sameValue( -+ result1, -+ undefined, -+ "leap second is a valid ISO string for PlainDate" -+); -+ -+arg = { year: 2016, month: 12, day: 31, hour: 23, minute: 59, second: 60 }; -+const result2 = instance.eraYear(arg); -+assert.sameValue( -+ result2, -+ undefined, -+ "second: 60 is ignored in property bag for PlainDate" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js -index 22bcccd92cf61b15ccc38e461e78e3bc2a500368..52cb511a15d6397c307e6190c764c5950efcccdf 100644 ---- a/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js -+++ b/JSTests/test262/test/intl402/Temporal/Calendar/prototype/eraYear/year-zero.js -@@ -7,11 +7,17 @@ description: Negative zero, as an extended year, is rejected - features: [Temporal, arrow-function] - ---*/ - --const arg = "-000000-10-31"; -+const invalidStrings = [ -+ "-000000-10-31", -+ "-000000-10-31T00:45", -+ "-000000-10-31T00:45+01:00", -+ "-000000-10-31T00:45+00:00[UTC]", -+]; - const instance = new Temporal.Calendar("iso8601"); -- --assert.throws( -+invalidStrings.forEach((arg) => { -+ assert.throws( - RangeError, -- () => { instance.eraYear(arg); }, -+ () => instance.eraYear(arg), - "reject minus zero as extended year" --); -+ ); -+}); -diff --git a/JSTests/test262/test/intl402/Temporal/Duration/compare/relativeto-hour.js b/JSTests/test262/test/intl402/Temporal/Duration/compare/relativeto-hour.js -new file mode 100644 -index 0000000000000000000000000000000000000000..318c0ba4ac55d2d65536b21d29f36c6624032103 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Duration/compare/relativeto-hour.js -@@ -0,0 +1,31 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.duration.compare -+description: relativeTo with hours. -+features: [Temporal] -+---*/ -+ -+const oneDay = new Temporal.Duration(0, 0, 0, 1); -+const hours24 = new Temporal.Duration(0, 0, 0, 0, 24); -+ -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { relativeTo: Temporal.ZonedDateTime.from('2017-01-01T00:00[America/Montevideo]') }), -+ 0, -+ 'relativeTo does not affect days if ZonedDateTime, and duration encompasses no DST change'); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { relativeTo: Temporal.ZonedDateTime.from('2019-11-03T00:00[America/Vancouver]') }), -+ 1, -+ 'relativeTo does affect days if ZonedDateTime, and duration encompasses DST change'); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { relativeTo: '2019-11-03T00:00[America/Vancouver]' }), -+ 1, -+ 'casts relativeTo to ZonedDateTime from string'); -+assert.sameValue( -+ Temporal.Duration.compare(oneDay, hours24, { -+ relativeTo: { year: 2019, month: 11, day: 3, timeZone: 'America/Vancouver' } -+ }), -+ 1, -+ 'casts relativeTo to ZonedDateTime from object'); -+ -diff --git a/JSTests/test262/test/intl402/Temporal/Instant/prototype/toString/timezone-offset.js b/JSTests/test262/test/intl402/Temporal/Instant/prototype/toString/timezone-offset.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ee2bd1e5fba195bd4c3279e5e1f5c55b19a23972 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/Instant/prototype/toString/timezone-offset.js -@@ -0,0 +1,19 @@ -+// Copyright (C) 2021 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.instant.prototype.tostring -+description: The time zone offset part of the string serialization (Intl time zones) -+features: [BigInt, Temporal] -+---*/ -+ -+const instant = new Temporal.Instant(0n); -+ -+function test(timeZoneIdentifier, expected, description) { -+ const timeZone = new Temporal.TimeZone(timeZoneIdentifier); -+ assert.sameValue(instant.toString({ timeZone }), expected, description); -+} -+ -+test("Europe/Berlin", "1970-01-01T01:00:00+01:00", "positive offset"); -+test("America/New_York", "1969-12-31T19:00:00-05:00", "negative offset"); -+test("Africa/Monrovia", "1969-12-31T23:15:30-00:45", "sub-minute offset"); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-always.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-always.js -new file mode 100644 -index 0000000000000000000000000000000000000000..727b24ce90c69868d13ceee8e88e433f7dae86d4 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-always.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Show calendar when calendarName is "always" -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 0, 0, 0, 0, "gregory"); -+ -+assert.sameValue( -+ dt.toString({ calendarName: "always" }), -+ "1976-11-18T15:23:00[u-ca=gregory]", -+ "shows non-ISO calendar if calendarName = always" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2f9586a83d0c2cf88509cb4431ac4598caecb1d1 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-auto.js -@@ -0,0 +1,14 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Possibly display calendar when calendarName is "auto" -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 0, 0, 0, 0, "gregory"); -+const expected = "1976-11-18T15:23:00[u-ca=gregory]"; -+ -+assert.sameValue(dt.toString(), expected, "shows non-ISO calendar by default (no arguments)"); -+assert.sameValue(dt.toString({ calendarName: "auto" }), expected, "shows only non-ISO calendar if calendarName = auto"); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-never.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-never.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1bd9018a213c412d5aff00540d9be6cab1d711ed ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/toString/calendarname-never.js -@@ -0,0 +1,16 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.tostring -+description: Do not show calendar (even non-ISO calendars) if calendarName = "never" -+features: [Temporal] -+---*/ -+ -+const dt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23); -+ -+assert.sameValue( -+ dt.withCalendar("gregory").toString({ calendarName: "never" }), -+ "1976-11-18T15:23:00", -+ "omits non-ISO calendar if calendarName = never" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js -new file mode 100644 -index 0000000000000000000000000000000000000000..118282b48dec7c40900dc9a52edfe88d9c0a4624 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-noniso.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate calendar is preserved with ISO PDT -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal = { -+ id: 'thisisnotiso', -+ era() { return "the era"; }, -+ eraYear() { return 1909; }, -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0); -+assert.sameValue(pdt.calendar.toString(), "iso8601", "PlainDateTime with ISO calendar"); -+const pd = new Temporal.PlainDate(2010, 11, 12, cal); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is changed if receiver has ISO calendar (1)", -+ "the era", -+ 1909 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is changed if receiver has ISO calendar (2)" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2849905981592797427fc06d26849cdb52c10208 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-id.js -@@ -0,0 +1,40 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate calendar is preserved when both calendars have the same id -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal1 = { -+ toString() { return "this is a string"; }, -+}; -+const cal2 = { -+ id: 'thisisnotiso', -+ era() { return "the era"; }, -+ eraYear() { return 1909; }, -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal1); -+const pd = new Temporal.PlainDate(2010, 11, 12, cal2); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is changed with same id (1)", -+ "the era", -+ 1909 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal2, -+ "calendar is changed with same id (2)" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f963a3b61d2ac34d9f1554d043e590e3b7156d71 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar-same-object.js -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: PlainDate calendar is preserved when both calendars are the same object -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+let calls = 0; -+const cal = { -+ id: 'thisisnotiso', -+ era() { return "the era"; }, -+ eraYear() { return 1909; }, -+ toString() { -+ ++calls; -+ return "this is a string"; -+ }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+const pd = new Temporal.PlainDate(2010, 11, 12, cal); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is unchanged with same calendars (1)", -+ "the era", -+ 1909 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is unchanged with same calendars (2)" -+); -+assert.sameValue(calls, 0, "should not have called cal.toString()"); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ad9f56f7bb4fae4311c4da5ea9aa9902b3f87310 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-plaindate-calendar.js -@@ -0,0 +1,38 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Original PDT calendar is preserved with ISO PlainDate -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal = { -+ id: 'thisisnotiso', -+ era() { return "the era"; }, -+ eraYear() { return 1909; }, -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const pdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+const pd = new Temporal.PlainDate(2010, 11, 12); -+assert.sameValue(pd.calendar.toString(), "iso8601", "PlainDate with ISO calendar"); -+const shifted = pdt.withPlainDate(pd); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is unchanged if input has ISO calendar (1)", -+ "the era", -+ 1909 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is unchanged if input has ISO calendar (2)" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-calendar.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-calendar.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2065751f7191043b9727d6b2ea873ba8f1e860b0 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-calendar.js -@@ -0,0 +1,25 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.withplaindate -+description: non-ISO calendars are handled correctly -+includes: [temporalHelpers.js] -+features: [Temporal] -+---*/ -+ -+const isopdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 123, 456, 789); -+const gregorypdt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 123, 456, 789, "gregory"); -+ -+const result1 = isopdt.withPlainDate("2020-11-13[u-ca=gregory]"); -+TemporalHelpers.assertPlainDateTime(result1, 2020, 11, "M11", 13, 3, 24, 30, 123, 456, 789, -+ "result1", "ce", 2020); -+assert.sameValue(result1.calendar.toString(), "gregory", "non-ISO calendar in argument overrides ISO calendar in receiver"); -+ -+const result2 = gregorypdt.withPlainDate("2020-11-13[u-ca=iso8601]"); -+TemporalHelpers.assertPlainDateTime(result2, 2020, 11, "M11", 13, 3, 24, 30, 123, 456, 789, -+ "result2", "ce", 2020); -+assert.sameValue(result2.calendar.toString(), "gregory", "non-ISO calendar in receiver overrides ISO calendar in argument"); -+ -+assert.throws(RangeError, () => gregorypdt.withPlainDate("2020-11-13[u-ca=japanese]"), -+ "throws if both `this` and `other` have a non-ISO calendar"); -diff --git a/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js -new file mode 100644 -index 0000000000000000000000000000000000000000..d86925d1b80aed0c02fcfaf1dda2033842c47b65 ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar.js -@@ -0,0 +1,36 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.plaindatetime.prototype.withplaindate -+description: Original PDT calendar is preserved with ISO string -+features: [Temporal] -+includes: [temporalHelpers.js] -+---*/ -+ -+const cal = { -+ id: "thisisnotiso", -+ era() { return "the era"; }, -+ eraYear() { return 1909; }, -+ toString() { return "this is a string"; }, -+ year() { return 2008; }, -+ month() { return 9; }, -+ monthCode() { return "M09"; }, -+ day() { return 6; } -+}; -+const dt = new Temporal.PlainDateTime(1995, 12, 7, 3, 24, 30, 0, 0, 0, cal); -+const shifted = dt.withPlainDate("2010-11-12"); -+ -+TemporalHelpers.assertPlainDateTime( -+ shifted, -+ 2008, 9, "M09", 6, 3, 24, 30, 0, 0, 0, -+ "calendar is unchanged if input has ISO calendar (1)", -+ "the era", -+ 1909 -+); -+ -+assert.sameValue( -+ shifted.calendar, -+ cal, -+ "calendar is unchanged if input has ISO calendar (2)" -+); -diff --git a/JSTests/test262/test/intl402/Temporal/TimeZone/etc-timezone.js b/JSTests/test262/test/intl402/Temporal/TimeZone/etc-timezone.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b3995e5f4ca3d97a92dc6e7df5387f869066ad2b ---- /dev/null -+++ b/JSTests/test262/test/intl402/Temporal/TimeZone/etc-timezone.js -@@ -0,0 +1,79 @@ -+// Copyright (C) 2022 Igalia, S.L. All rights reserved. -+// This code is governed by the BSD license found in the LICENSE file. -+ -+/*--- -+esid: sec-temporal.timezone -+description: Some Etc/GMT{+/-}{0}N timezones are valid, but not all -+features: [Temporal] -+---*/ -+ -+// "Etc/GMT-0" through "Etc/GMT-14" are OK -+ -+assert.sameValue( -+ (new Temporal.TimeZone("Etc/GMT-0")).toString(), -+ "UTC", // if the offset is -0, we say "UTC" rather than "GMT" -+ "Etc/GMT-0 is a valid timezone" -+); -+ -+[1,2,3,4,5,6,7,8,9,10,11,12,13,14].forEach((n) => { -+ let tz = "Etc/GMT-" + n; -+ let instance = new Temporal.TimeZone(tz); -+ assert.sameValue( -+ instance.toString(), -+ tz, -+ tz + " is a valid timezone" -+ ); -+}); -+ -+let gmtMinus24TZ = "Etc/GMT-24"; -+assert.throws( -+ RangeError, -+ () => { new Temporal.TimeZone(gmtMinus24TZ); }, -+ gmtMinus24TZ + " is an invalid timezone" -+); -+ -+// "Etc/GMT-0N" is not OK (1 ≤ N ≤ 9) -+[1,2,3,4,5,6,7,8,9].forEach((n) => { -+ let tz = "Etc/GMT-0" + n; -+ assert.throws( -+ RangeError, -+ () => { new Temporal.TimeZone(tz); }, -+ tz + " is an invalid timezone" -+ ); -+}); -+ -+// "Etc/GMT+0N" is not OK (0 ≤ N ≤ 9) -+[0,1,2,3,4,5,6,7,8,9].forEach((n) => { -+ let tz = "Etc/GMT+0" + n; -+ assert.throws( -+ RangeError, -+ () => { new Temporal.TimeZone(tz); }, -+ tz + " is an invalid timezone" -+ ); -+}); -+ -+// Etc/GMT+0" through "Etc/GMT+12" are OK -+ -+// zero is handled in its own way (say "UTC" rather than "GMT"): -+assert.sameValue( -+ (new Temporal.TimeZone("Etc/GMT+0")).toString(), -+ "UTC", // if the offset is +0, we say "UTC" rather than "GMT" -+ "Etc/GMT+0 is a valid timezone" -+); -+ -+[1,2,3,4,5,6,7,8,9,10,11,12].forEach((n) => { -+ let tz = "Etc/GMT+" + n; -+ let instance = new Temporal.TimeZone(tz); -+ assert.sameValue( -+ instance.toString(), -+ tz, -+ tz + " is a valid timezone" -+ ); -+}); -+ -+let gmtPlus24TZ = "Etc/GMT+24"; -+assert.throws( -+ RangeError, -+ () => { new Temporal.TimeZone(gmtPlus24TZ); }, -+ gmtPlus24TZ + " is an invalid timezone" -+); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-and.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-and.js -deleted file mode 100644 -index 78dadeef59163cf957d84ca6574228c5a1b15ecc..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-and.js -+++ /dev/null -@@ -1,60 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/and.case --// - src/compound-assignment-private/default/getter-setter.template --/*--- --description: Compound logical-and assignment with target being a private reference (to an accessor property with getter and setter) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -- ... -- 5.c. Let _setter_ be _entry_.[[Set]]. -- d. Perform ? Call(_setter_, _O_, « _value_ »). -- -----*/ -- -- --class C { -- #setterCalledWith; -- get #field() { -- return true; -- } -- set #field(value) { -- this.#setterCalledWith = value; -- } -- compoundAssignment() { -- return this.#field &&= false; -- } -- setterCalledWithValue() { -- return this.#setterCalledWith; -- } --} -- --const o = new C(); --assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the result"); --assert.sameValue(o.setterCalledWithValue(), false, "PutValue should call the setter with the result"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-nullish.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-nullish.js -deleted file mode 100644 -index 44aad7afe6697c037efef4dafe07359e4e65a3e2..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-nullish.js -+++ /dev/null -@@ -1,60 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/nullish.case --// - src/compound-assignment-private/default/getter-setter.template --/*--- --description: Compound nullish-coalescing assignment with target being a private reference (to an accessor property with getter and setter) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -- ... -- 5.c. Let _setter_ be _entry_.[[Set]]. -- d. Perform ? Call(_setter_, _O_, « _value_ »). -- -----*/ -- -- --class C { -- #setterCalledWith; -- get #field() { -- return null; -- } -- set #field(value) { -- this.#setterCalledWith = value; -- } -- compoundAssignment() { -- return this.#field ??= 1; -- } -- setterCalledWithValue() { -- return this.#setterCalledWith; -- } --} -- --const o = new C(); --assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the result"); --assert.sameValue(o.setterCalledWithValue(), 1, "PutValue should call the setter with the result"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-or.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-or.js -deleted file mode 100644 -index 8d4c7c61e1b7a7821c5fa20d62d38b1711e786db..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-accessor-property-or.js -+++ /dev/null -@@ -1,60 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/or.case --// - src/compound-assignment-private/default/getter-setter.template --/*--- --description: Compound logical-or assignment with target being a private reference (to an accessor property with getter and setter) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -- ... -- 5.c. Let _setter_ be _entry_.[[Set]]. -- d. Perform ? Call(_setter_, _O_, « _value_ »). -- -----*/ -- -- --class C { -- #setterCalledWith; -- get #field() { -- return false; -- } -- set #field(value) { -- this.#setterCalledWith = value; -- } -- compoundAssignment() { -- return this.#field ||= true; -- } -- setterCalledWithValue() { -- return this.#setterCalledWith; -- } --} -- --const o = new C(); --assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the result"); --assert.sameValue(o.setterCalledWithValue(), true, "PutValue should call the setter with the result"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-and.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-and.js -deleted file mode 100644 -index 5208a2d3c0fc1b1f67c91f9f7d66d5034dfd1990..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-and.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/and.case --// - src/compound-assignment-private/default/data-property.template --/*--- --description: Compound logical-and assignment with target being a private reference (to a field) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 3. If _entry_.[[Kind]] is ~field~, then -- a. Set _entry_.[[Value]] to _value_. -- -----*/ -- -- --class C { -- #field = true; -- compoundAssignment() { -- return this.#field &&= false; -- } -- fieldValue() { -- return this.#field; -- } --} -- --const o = new C(); --assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the result"); --assert.sameValue(o.fieldValue(), false, "PutValue should store the result in the private reference"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-nullish.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-nullish.js -deleted file mode 100644 -index e8ecb5f6ddcb87d0bf3c9d1bcdae9b8ac0d1cd05..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-nullish.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/nullish.case --// - src/compound-assignment-private/default/data-property.template --/*--- --description: Compound nullish-coalescing assignment with target being a private reference (to a field) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 3. If _entry_.[[Kind]] is ~field~, then -- a. Set _entry_.[[Value]] to _value_. -- -----*/ -- -- --class C { -- #field = null; -- compoundAssignment() { -- return this.#field ??= 1; -- } -- fieldValue() { -- return this.#field; -- } --} -- --const o = new C(); --assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the result"); --assert.sameValue(o.fieldValue(), 1, "PutValue should store the result in the private reference"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-or.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-or.js -deleted file mode 100644 -index 1057c97e80dc2021099d7b76bbfc02fd1a381144..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-data-property-or.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/or.case --// - src/compound-assignment-private/default/data-property.template --/*--- --description: Compound logical-or assignment with target being a private reference (to a field) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 3. If _entry_.[[Kind]] is ~field~, then -- a. Set _entry_.[[Value]] to _value_. -- -----*/ -- -- --class C { -- #field = false; -- compoundAssignment() { -- return this.#field ||= true; -- } -- fieldValue() { -- return this.#field; -- } --} -- --const o = new C(); --assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the result"); --assert.sameValue(o.fieldValue(), true, "PutValue should store the result in the private reference"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-and.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-and.js -deleted file mode 100644 -index 2d7d44a97308e812ba8cb619d6cd12b7a28d0b46..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-and.js -+++ /dev/null -@@ -1,48 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/and.case --// - src/compound-assignment-private/default/method.template --/*--- --description: Compound logical-and assignment with target being a private reference (to a private method) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 4. Else if _entry_.[[Kind]] is ~method~, then -- a. Throw a *TypeError* exception. -- -----*/ -- -- --class C { -- #privateMethod() {} -- compoundAssignment() { -- return this.#privateMethod &&= 1; -- } --} -- --const o = new C(); --assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result in a method private reference"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js -deleted file mode 100644 -index 9d1ad3243d8c8cbd8c44959da1f749e2367e8d51..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-nullish.js -+++ /dev/null -@@ -1,48 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/nullish.case --// - src/compound-assignment-private/default/method.template --/*--- --description: Compound nullish-coalescing assignment with target being a private reference (to a private method) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 4. Else if _entry_.[[Kind]] is ~method~, then -- a. Throw a *TypeError* exception. -- -----*/ -- -- --class C { -- #privateMethod() {} -- compoundAssignment() { -- return this.#privateMethod ??= 1; -- } --} -- --const o = new C(); --assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result in a method private reference"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js -deleted file mode 100644 -index 1ff03b32a2cd7fc99bf44caaf315ac4c48ffcc6a..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-method-or.js -+++ /dev/null -@@ -1,48 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/or.case --// - src/compound-assignment-private/default/method.template --/*--- --description: Compound logical-or assignment with target being a private reference (to a private method) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 4. Else if _entry_.[[Kind]] is ~method~, then -- a. Throw a *TypeError* exception. -- -----*/ -- -- --class C { -- #privateMethod() {} -- compoundAssignment() { -- return this.#privateMethod ||= 1; -- } --} -- --const o = new C(); --assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result in a method private reference"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js -deleted file mode 100644 -index 920814199ddc55434a5c280926033feea515572a..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js -+++ /dev/null -@@ -1,50 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/and.case --// - src/compound-assignment-private/default/getter.template --/*--- --description: Compound logical-and assignment with target being a private reference (to an accessor property with getter) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -- b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -- -----*/ -- -- --class C { -- get #field() { -- return 1; -- } -- compoundAssignment() { -- return this.#field &&= 1; -- } --} -- --const o = new C(); --assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js -deleted file mode 100644 -index 4b64e52fd50bc3afcd8b5aee92524ce80cea908d..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js -+++ /dev/null -@@ -1,50 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/nullish.case --// - src/compound-assignment-private/default/getter.template --/*--- --description: Compound nullish-coalescing assignment with target being a private reference (to an accessor property with getter) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -- b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -- -----*/ -- -- --class C { -- get #field() { -- return 1; -- } -- compoundAssignment() { -- return this.#field ??= 1; -- } --} -- --const o = new C(); --assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter"); -diff --git a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js b/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js -deleted file mode 100644 -index 3e0c16123ee6c1a8ae695d859a486868195dfe13..0000000000000000000000000000000000000000 ---- a/JSTests/test262/test/language/expressions/compound-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js -+++ /dev/null -@@ -1,50 +0,0 @@ --// This file was procedurally generated from the following sources: --// - src/compound-assignment-private/or.case --// - src/compound-assignment-private/default/getter.template --/*--- --description: Compound logical-or assignment with target being a private reference (to an accessor property with getter) --esid: sec-assignment-operators-runtime-semantics-evaluation --features: [class-fields-private] --flags: [generated] --info: | -- sec-assignment-operators-runtime-semantics-evaluation -- AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression -- 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -- 2. Let _lval_ be ? GetValue(_lref_). -- ... -- 7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_). -- 8. Perform ? PutValue(_lref_, _r_). -- 9. Return _r_. -- -- sec-property-accessors-runtime-semantics-evaluation -- MemberExpression : MemberExpression `.` PrivateIdentifier -- -- 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -- 2. Let _baseValue_ be ? GetValue(_baseReference_). -- 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -- 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -- -- PutValue (V, W) -- ... -- 5.b. If IsPrivateReference(_V_) is *true*, then -- i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -- -- PrivateSet (O, P, value) -- ... -- 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -- b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -- -----*/ -- -- --class C { -- get #field() { -- return 1; -- } -- compoundAssignment() { -- return this.#field ||= 1; -- } --} -- --const o = new C(); --assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..da33c16339f4f48092c914219337b8b63237c6e9 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-and.js -@@ -0,0 +1,61 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/getter-setter.template -+/*--- -+description: Logical-and assignment with target being a private reference (to an accessor property with getter and setter) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ ... -+ 5.c. Let _setter_ be _entry_.[[Set]]. -+ d. Perform ? Call(_setter_, _O_, « _value_ »). -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ #setterCalledWith; -+ get #field() { -+ return true; -+ } -+ set #field(value) { -+ this.#setterCalledWith = value; -+ } -+ compoundAssignment() { -+ return this.#field &&= false; -+ } -+ setterCalledWithValue() { -+ return this.#setterCalledWith; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the result"); -+assert.sameValue(o.setterCalledWithValue(), false, "PutValue should call the setter with the result"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..3a57a5e69c243f383bc3df0eefad6ad586f368de ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-nullish.js -@@ -0,0 +1,60 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/getter-setter.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to an accessor property with getter and setter) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ ... -+ 5.c. Let _setter_ be _entry_.[[Set]]. -+ d. Perform ? Call(_setter_, _O_, « _value_ »). -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+class C { -+ #setterCalledWith; -+ get #field() { -+ return null; -+ } -+ set #field(value) { -+ this.#setterCalledWith = value; -+ } -+ compoundAssignment() { -+ return this.#field ??= 1; -+ } -+ setterCalledWithValue() { -+ return this.#setterCalledWith; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the result"); -+assert.sameValue(o.setterCalledWithValue(), 1, "PutValue should call the setter with the result"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f1d057d2b2af217155c9d8d16312dc123df9d374 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-or.js -@@ -0,0 +1,61 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/getter-setter.template -+/*--- -+description: Logical-or assignment with target being a private reference (to an accessor property with getter and setter) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ ... -+ 5.c. Let _setter_ be _entry_.[[Set]]. -+ d. Perform ? Call(_setter_, _O_, « _value_ »). -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ #setterCalledWith; -+ get #field() { -+ return false; -+ } -+ set #field(value) { -+ this.#setterCalledWith = value; -+ } -+ compoundAssignment() { -+ return this.#field ||= true; -+ } -+ setterCalledWithValue() { -+ return this.#setterCalledWith; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the result"); -+assert.sameValue(o.setterCalledWithValue(), true, "PutValue should call the setter with the result"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..2fd976d88dd079f7ccb4c4f7f036aa1af9a077a9 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-and.js -@@ -0,0 +1,62 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/getter-setter-short-circuit.template -+/*--- -+description: Logical-and assignment with target being a private reference (to an accessor property with getter and setter (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ ... -+ 5.c. Let _setter_ be _entry_.[[Set]]. -+ d. Perform ? Call(_setter_, _O_, « _value_ »). -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ setterWasCalled = false; -+ get #field() { -+ return false; -+ } -+ set #field(value) { -+ this.setterWasCalled = true; -+ } -+ compoundAssignment() { -+ return this.#field &&= doNotCall(); -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the short-circuit value"); -+assert(!o.setterWasCalled, "The setter should not be called"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..8a0843794d986477e918b6dc876cd64fa3c3d400 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-nullish.js -@@ -0,0 +1,61 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/getter-setter-short-circuit.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to an accessor property with getter and setter (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ ... -+ 5.c. Let _setter_ be _entry_.[[Set]]. -+ d. Perform ? Call(_setter_, _O_, « _value_ »). -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ setterWasCalled = false; -+ get #field() { -+ return 1; -+ } -+ set #field(value) { -+ this.setterWasCalled = true; -+ } -+ compoundAssignment() { -+ return this.#field ??= doNotCall(); -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the short-circuit value"); -+assert(!o.setterWasCalled, "The setter should not be called"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..91a88e990cc6c95b3837a9e5ce964b6a8c79f320 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-accessor-property-short-circuit-or.js -@@ -0,0 +1,62 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/getter-setter-short-circuit.template -+/*--- -+description: Logical-or assignment with target being a private reference (to an accessor property with getter and setter (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ ... -+ 5.c. Let _setter_ be _entry_.[[Set]]. -+ d. Perform ? Call(_setter_, _O_, « _value_ »). -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ setterWasCalled = false; -+ get #field() { -+ return true; -+ } -+ set #field(value) { -+ this.setterWasCalled = true; -+ } -+ compoundAssignment() { -+ return this.#field ||= doNotCall(); -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the short-circuit value"); -+assert(!o.setterWasCalled, "The setter should not be called"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..ffd59ab034e064ee59b1bb3972bef8ec724c2c94 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-and.js -@@ -0,0 +1,53 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/data-property.template -+/*--- -+description: Logical-and assignment with target being a private reference (to a field) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 3. If _entry_.[[Kind]] is ~field~, then -+ a. Set _entry_.[[Value]] to _value_. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ #field = true; -+ compoundAssignment() { -+ return this.#field &&= false; -+ } -+ fieldValue() { -+ return this.#field; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the result"); -+assert.sameValue(o.fieldValue(), false, "PutValue should store the result in the private reference"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c3cd8f86c8899105cb9e13ab08e5877f023a04cf ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-nullish.js -@@ -0,0 +1,52 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/data-property.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to a field) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 3. If _entry_.[[Kind]] is ~field~, then -+ a. Set _entry_.[[Value]] to _value_. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+class C { -+ #field = null; -+ compoundAssignment() { -+ return this.#field ??= 1; -+ } -+ fieldValue() { -+ return this.#field; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the result"); -+assert.sameValue(o.fieldValue(), 1, "PutValue should store the result in the private reference"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..f7ca6eba72313e184d2c6d1cdb8e084b8bbe742a ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-or.js -@@ -0,0 +1,53 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/data-property.template -+/*--- -+description: Logical-or assignment with target being a private reference (to a field) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 3. If _entry_.[[Kind]] is ~field~, then -+ a. Set _entry_.[[Value]] to _value_. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ #field = false; -+ compoundAssignment() { -+ return this.#field ||= true; -+ } -+ fieldValue() { -+ return this.#field; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the result"); -+assert.sameValue(o.fieldValue(), true, "PutValue should store the result in the private reference"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c94ae0c709f394f7fe5645f39c8e869951ea35bf ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-and.js -@@ -0,0 +1,56 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/data-property-short-circuit.template -+/*--- -+description: Logical-and assignment with target being a private reference (to a field (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 3. If _entry_.[[Kind]] is ~field~, then -+ a. Set _entry_.[[Value]] to _value_. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ #field = false; -+ compoundAssignment() { -+ return this.#field &&= doNotCall(); -+ } -+ fieldValue() { -+ return this.#field; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..a8c3ac4dd11853fca18d1001e3b703e99be77861 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-nullish.js -@@ -0,0 +1,55 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/data-property-short-circuit.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to a field (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 3. If _entry_.[[Kind]] is ~field~, then -+ a. Set _entry_.[[Value]] to _value_. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ #field = 1; -+ compoundAssignment() { -+ return this.#field ??= doNotCall(); -+ } -+ fieldValue() { -+ return this.#field; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..7a176213fe8f512a0a3f3d468a10b58378c4da68 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-data-property-short-circuit-or.js -@@ -0,0 +1,56 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/data-property-short-circuit.template -+/*--- -+description: Logical-or assignment with target being a private reference (to a field (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 3. If _entry_.[[Kind]] is ~field~, then -+ a. Set _entry_.[[Value]] to _value_. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ #field = true; -+ compoundAssignment() { -+ return this.#field ||= doNotCall(); -+ } -+ fieldValue() { -+ return this.#field; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c604569474c3d5f873ba9e117bc10eb8097bd6ad ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-and.js -@@ -0,0 +1,49 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/method.template -+/*--- -+description: Logical-and assignment with target being a private reference (to a private method) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 4. Else if _entry_.[[Kind]] is ~method~, then -+ a. Throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ #privateMethod() {} -+ compoundAssignment() { -+ return this.#privateMethod &&= 1; -+ } -+} -+ -+const o = new C(); -+assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result in a method private reference"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..69bc35b9168b425c35c09dff408830e903c68eaf ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-nullish.js -@@ -0,0 +1,55 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/method-short-circuit.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to a private method (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 4. Else if _entry_.[[Kind]] is ~method~, then -+ a. Throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ #privateMethod() {} -+ compoundAssignment() { -+ return this.#privateMethod ??= doNotCall(); -+ } -+ getPrivateMethodFunctionObject() { -+ return this.#privateMethod; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), o.getPrivateMethodFunctionObject(), "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6053891284400cf4f2b10803986b107f3c9642f1 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-method-short-circuit-or.js -@@ -0,0 +1,56 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/method-short-circuit.template -+/*--- -+description: Logical-or assignment with target being a private reference (to a private method (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 4. Else if _entry_.[[Kind]] is ~method~, then -+ a. Throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ #privateMethod() {} -+ compoundAssignment() { -+ return this.#privateMethod ||= doNotCall(); -+ } -+ getPrivateMethodFunctionObject() { -+ return this.#privateMethod; -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), o.getPrivateMethodFunctionObject(), "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..c11c1f911ded2c0e891378dd3fde9966c6035d5e ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-and.js -@@ -0,0 +1,51 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/getter.template -+/*--- -+description: Logical-and assignment with target being a private reference (to an accessor property with getter) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ get #field() { -+ return true; -+ } -+ compoundAssignment() { -+ return this.#field &&= false; -+ } -+} -+ -+const o = new C(); -+assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..4eb987abc30e30c80c607170485479338eeacbde ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-nullish.js -@@ -0,0 +1,50 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/getter.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to an accessor property with getter) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+class C { -+ get #field() { -+ return null; -+ } -+ compoundAssignment() { -+ return this.#field ??= 1; -+ } -+} -+ -+const o = new C(); -+assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..1b6db870fd6dc5f21a89f4c163abaa63aeef7d1e ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-or.js -@@ -0,0 +1,51 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/getter.template -+/*--- -+description: Logical-or assignment with target being a private reference (to an accessor property with getter) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+class C { -+ get #field() { -+ return false; -+ } -+ compoundAssignment() { -+ return this.#field ||= true; -+ } -+} -+ -+const o = new C(); -+assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-and.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-and.js -new file mode 100644 -index 0000000000000000000000000000000000000000..6b14acbb7cde88237cc4597d226585eacc50f733 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-and.js -@@ -0,0 +1,55 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/and.case -+// - src/logical-assignment-private/default/getter-short-circuit.template -+/*--- -+description: Logical-and assignment with target being a private reference (to an accessor property with getter (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *false*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ get #field() { -+ return false; -+ } -+ compoundAssignment() { -+ return this.#field &&= doNotCall(); -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), false, "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-nullish.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-nullish.js -new file mode 100644 -index 0000000000000000000000000000000000000000..33df8df39ffb70bee05d9bde4447e095a4cb5825 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-nullish.js -@@ -0,0 +1,54 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/nullish.case -+// - src/logical-assignment-private/default/getter-short-circuit.template -+/*--- -+description: Nullish-coalescing assignment with target being a private reference (to an accessor property with getter (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. If _lval_ is neither *undefined* nor *null*, return _lval_. -+ ... -+ 6. Perform ? PutValue(_lref_, _rval_). -+ 7. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ get #field() { -+ return 1; -+ } -+ compoundAssignment() { -+ return this.#field ??= doNotCall(); -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), 1, "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-or.js b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-or.js -new file mode 100644 -index 0000000000000000000000000000000000000000..84a20fce9e07ebad7d4d0d29c3724191e2504f13 ---- /dev/null -+++ b/JSTests/test262/test/language/expressions/logical-assignment/left-hand-side-private-reference-readonly-accessor-property-short-circuit-or.js -@@ -0,0 +1,55 @@ -+// This file was procedurally generated from the following sources: -+// - src/logical-assignment-private/or.case -+// - src/logical-assignment-private/default/getter-short-circuit.template -+/*--- -+description: Logical-or assignment with target being a private reference (to an accessor property with getter (short-circuit version)) -+esid: sec-assignment-operators-runtime-semantics-evaluation -+features: [class-fields-private, logical-assignment-operators] -+flags: [generated] -+info: | -+ sec-property-accessors-runtime-semantics-evaluation -+ MemberExpression : MemberExpression `.` PrivateIdentifier -+ -+ 1. Let _baseReference_ be the result of evaluating |MemberExpression|. -+ 2. Let _baseValue_ be ? GetValue(_baseReference_). -+ 3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|. -+ 4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_). -+ -+ PutValue (V, W) -+ ... -+ 5.b. If IsPrivateReference(_V_) is *true*, then -+ i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_). -+ -+ PrivateSet (O, P, value) -+ ... -+ 5.a. Assert: _entry_.[[Kind]] is ~accessor~. -+ b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. -+ -+ -+ sec-assignment-operators-runtime-semantics-evaluation -+ AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression -+ 1. Let _lref_ be the result of evaluating |LeftHandSideExpression|. -+ 2. Let _lval_ be ? GetValue(_lref_). -+ 3. Let _lbool_ be ! ToBoolean(_lval_). -+ 4. If _lbool_ is *true*, return _lval_. -+ ... -+ 7. Perform ? PutValue(_lref_, _rval_). -+ 8. Return _rval_. -+---*/ -+ -+ -+function doNotCall() { -+ throw new Test262Error("The right-hand side should not be evaluated"); -+} -+ -+class C { -+ get #field() { -+ return true; -+ } -+ compoundAssignment() { -+ return this.#field ||= doNotCall(); -+ } -+} -+ -+const o = new C(); -+assert.sameValue(o.compoundAssignment(), true, "The expression should evaluate to the short-circuit value"); -diff --git a/JSTests/test262/test/language/expressions/unary-plus/S11.4.6_A3_T3.js b/JSTests/test262/test/language/expressions/unary-plus/S11.4.6_A3_T3.js -index 79bf732a2f2e51ff824dd64ee5b186223abf4ffe..9a3a2f6b49fb9c0d383842927eaa7045eb692cd6 100644 ---- a/JSTests/test262/test/language/expressions/unary-plus/S11.4.6_A3_T3.js -+++ b/JSTests/test262/test/language/expressions/unary-plus/S11.4.6_A3_T3.js -@@ -13,11 +13,21 @@ if (+"1" !== 1) { - } - - //CHECK#2 --if (isNaN(+"x") !== true) { -- throw new Test262Error('#2: +"x" === Not-a-Number. Actual: ' + (+"x")); -+if (+new Number("-1") !== -1) { -+ throw new Test262Error('#2: +new String("-1") === -1. Actual: ' + (+new String("-1"))); - } - - //CHECK#3 --if (+new Number("-1") !== -1) { -- throw new Test262Error('#3: +new String("-1") === -1. Actual: ' + (+new String("-1"))); -+if (isNaN(+"x") !== true) { -+ throw new Test262Error('#3: +"x" === Not-a-Number. Actual: ' + (+"x")); -+} -+ -+//CHECK#4 -+if (isNaN(+"INFINITY") !== true) { -+ throw new Test262Error('#4: +"INFINITY" === Not-a-Number. Actual: ' + (+"INFINITY")); -+} -+ -+//CHECK#5 -+if (isNaN(+"infinity") !== true) { -+ throw new Test262Error('#5: +"infinity" === Not-a-Number. Actual: ' + (+"infinity")); - } -diff --git a/JSTests/test262/test/language/statements/for-in/S12.6.4_A7_T2.js b/JSTests/test262/test/language/statements/for-in/S12.6.4_A7_T2.js -index 4ae8a3946ecf906e3030c10e59c744017cc3dba3..9cfbf9163610371235b2e20c50b97e7c2cd809ab 100644 ---- a/JSTests/test262/test/language/statements/for-in/S12.6.4_A7_T2.js -+++ b/JSTests/test262/test/language/statements/for-in/S12.6.4_A7_T2.js -@@ -13,7 +13,10 @@ description: > - - var __obj, __accum; - --__obj={aa:1,ba:2,ca:3}; -+__obj = Object.create(null); -+__obj.aa = 1; -+__obj.ba = 2; -+__obj.ca = 3; - - __accum=""; - -@@ -21,33 +24,20 @@ for (var __key in __obj){ - - erasator_T_1000(__obj,"b"); - -- __accum+=(__key+__obj[__key]); -+ __accum+=(__key+__obj[__key]); - - } - -- --////////////////////////////////////////////////////////////////////////////// --//CHECK#1 --if (!((__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1))) { -- throw new Test262Error('#1: (__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1)'); --} --// --////////////////////////////////////////////////////////////////////////////// -- --////////////////////////////////////////////////////////////////////////////// --//CHECK#2 --if (__accum.indexOf("ba2")!==-1) { -- throw new Test262Error('#2: __accum.indexOf("ba2") === -1. Actual: __accum.indexOf("ba2") ==='+ __accum.indexOf("ba2") ); --} --// --////////////////////////////////////////////////////////////////////////////// -- -+assert( -+ __accum === "aa1ca3" || __accum === "ca3aa1", -+ "Unexpected value: '" + __accum + "'" -+); - - // erasator is the hash map terminator - function erasator_T_1000(hash_map, charactr){ -- for (var key in hash_map){ -- if (key.indexOf(charactr)===0) { -- delete hash_map[key]; -- }; -- } -+ for (var key in hash_map){ -+ if (key.indexOf(charactr)===0) { -+ delete hash_map[key]; -+ }; -+ } - } -diff --git a/JSTests/test262/test262-Revision.txt b/JSTests/test262/test262-Revision.txt -index 534b49f0030041247c5ab3fa0c02d021f2d0038c..4a81c5028fed82b860345e18d4d1a16e09bcd9db 100644 ---- a/JSTests/test262/test262-Revision.txt -+++ b/JSTests/test262/test262-Revision.txt -@@ -1,2 +1,2 @@ - test262 remote url: git@github.com:tc39/test262.git --test262 revision: ec39db5877853f6c8703156af2530730bfdf59d5 -+test262 revision: 0a480293334c34a34f2cae012ddb4dfbd94e5782 -diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog -index 2efc62ebbb100878d9c1b8de4ca1fb4da972ec73..1f1a074d90b97966e327a6a6403a5df19427b1d1 100644 ---- a/LayoutTests/ChangeLog -+++ b/LayoutTests/ChangeLog -@@ -1,3 +1,911 @@ -+2022-05-10 Truitt Savell -+ -+ Rebase inspector/timeline/line-column.html for Mac -+ https://bugs.webkit.org/show_bug.cgi?id=240291 -+ -+ Unreviewed test gardening. -+ -+ * inspector/timeline/line-column-expected.txt: -+ -+2022-05-10 Tim Nguyen -+ -+ Fix inertness of pseudo-elements -+ https://bugs.webkit.org/show_bug.cgi?id=239831 -+ -+ Reviewed by Antti Koivisto. -+ -+ When we adjust style for a pseudo-element, `m_element` and `document().activeModalDialog()` are both null. So we accidentally reset inertness to false in those cases. -+ -+ Fix this by making checking for m_element's existence too. -+ -+ * platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-pseudo-element-hittest-expected.txt: Added. -+ -+2022-05-10 Brent Fulgham -+ -+ Remove abandoned CSSDeferredParser implementation and feature flag -+ https://bugs.webkit.org/show_bug.cgi?id=240244 -+ -+ Reviewed by Antti Koivisto. -+ -+ This patch rolls out the abandoned CSSDeferredParser implementation added in Bug 165743. -+ -+ * fast/css/deferred-parsing/dynamic-external-style-expected.txt: Removed. -+ * fast/css/deferred-parsing/dynamic-external-style.html: Removed. -+ * fast/css/deferred-parsing/dynamic-style-in-document-expected.txt: Removed. -+ * fast/css/deferred-parsing/dynamic-style-in-document.html: Removed. -+ * fast/css/deferred-parsing/hover-test-expected.txt: Removed. -+ * fast/css/deferred-parsing/hover-test.html: Removed. -+ * fast/css/deferred-parsing/keyframes-rule-expected.txt: Removed. -+ * fast/css/deferred-parsing/keyframes-rule.html: Removed. -+ * fast/css/deferred-parsing/media-print-expected.txt: Removed. -+ * fast/css/deferred-parsing/media-print.html: Removed. -+ * fast/css/deferred-parsing/nth-of-type-expected.txt: Removed. -+ * fast/css/deferred-parsing/nth-of-type.html: Removed. -+ * fast/css/deferred-parsing/resources/basic-sheet.css: Removed. -+ * fast/css/deferred-parsing/simple-external-style-expected.txt: Removed. -+ * fast/css/deferred-parsing/simple-external-style.html: Removed. -+ * fast/css/deferred-parsing/simple-style-in-document-expected.txt: Removed. -+ * fast/css/deferred-parsing/simple-style-in-document.html: Removed. -+ * fast/css/deferred-parsing/supports-rule-expected.txt: Removed. -+ * fast/css/deferred-parsing/supports-rule.html: Removed. -+ * platform/ios-wk2/TestExpectations: -+ * platform/ios/TestExpectations: -+ -+2022-05-09 Oriol Brufau -+ -+ [cssom] Don't index perspective/transform-origin-* in computed styles -+ https://bugs.webkit.org/show_bug.cgi?id=239670 -+ -+ Reviewed by Darin Adler. -+ -+ Update test expectations. -+ -+ * fast/css/getComputedStyle/computed-style-expected.txt: -+ * fast/css/getComputedStyle/computed-style-without-renderer-expected.txt: -+ * platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: -+ * platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: -+ * platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: -+ * platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt: -+ * platform/wpe/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: -+ * platform/wpe/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: -+ * svg/css/getComputedStyle-basic-expected.txt: -+ -+2022-05-09 Nikolaos Mouchtaris -+ -+ Support ray() shape in offset-path -+ https://bugs.webkit.org/show_bug.cgi?id=233344 -+ -+ Reviewed by Simon Fraser. -+ -+ * TestExpectations: -+ -+2022-05-09 Tim Nguyen -+ -+ Implement CSS :modal pseudo class -+ https://bugs.webkit.org/show_bug.cgi?id=240109 -+ -+ Reviewed by Simon Fraser. -+ -+ Removes :-internal-modal-dialog from internal pseudo classes. -+ -+ * fast/css/pseudo-class-internal-expected.txt: -+ * fast/css/pseudo-class-internal.html: -+ -+2022-05-09 Arcady Goldmints-Orlov -+ -+ [GLIB] Update some test expectations for known failures -+ https://bugs.webkit.org/show_bug.cgi?id=240240 -+ -+ Unreviewed test garderning. -+ -+ * platform/glib/TestExpectations: -+ -+2022-05-08 Wenson Hsieh -+ -+ [iOS] Double tapping on YouTube video causes playback to pause instead of seek -+ https://bugs.webkit.org/show_bug.cgi?id=240222 -+ rdar://92637636 -+ -+ Reviewed by Aditya Keerthi and Kate Cheney. -+ -+ Add a new layout test. See WebKit/ChangeLog for more details. -+ -+ * fast/events/touch/ios/touch-events-when-double-tapping-after-selecting-text-expected.txt: Added. -+ * fast/events/touch/ios/touch-events-when-double-tapping-after-selecting-text.html: Added. -+ -+2022-05-09 Kate Cheney -+ -+ Image controls menu button is not appearing for multi-page PDFs -+ https://bugs.webkit.org/show_bug.cgi?id=240120 -+ rdar://86425721 -+ -+ Reviewed by Megan Gardner. -+ -+ * TestExpectations: -+ * fast/attachment/attachment-image-controls-basic.html: Added. -+ * platform/mac-wk2/TestExpectations: -+ * platform/mac/fast/attachment/attachment-image-controls-basic-expected.txt: Added. -+ -+2022-05-09 Ziran Sun -+ -+ Make input placeholder line-height declaration !important -+ https://bugs.webkit.org/show_bug.cgi?id=240225 -+ -+ Reviewed by Tim Nguyen. -+ -+ Unskip the test that passes. -+ * TestExpectations: -+ -+2022-05-09 Antoine Quint -+ -+ REGRESSION (r291817): NativeImage passed to RemoteResourceCacheProxy::recordNativeImageUse may be null -+ https://bugs.webkit.org/show_bug.cgi?id=239649 -+ rdar://92018859 -+ -+ Reviewed by Dean Jackson. -+ -+ * system-preview/svg-image-expected.html: Added. -+ * system-preview/svg-image.html: Added. -+ -+2022-05-09 Manuel Rego Casasnovas -+ -+ [WinCairo][WK1] accessibility/aria-combobox-control-owns-elements.html is crashing after 250325@main -+ https://bugs.webkit.org/show_bug.cgi?id=240218 -+ -+ -+ Reviewed by Joanmarie Diggs. -+ -+ * platform/wincairo-wk1/TestExpectations: Mark test as timeout as it -+ was before r293958. -+ -+2022-05-08 Fujii Hironori -+ -+ [WinCairo][WK1] accessibility/aria-combobox-control-owns-elements.html is crashing after 250325@main -+ https://bugs.webkit.org/show_bug.cgi?id=240218 -+ -+ -+ Unreviewed test gardening. -+ -+ * platform/wincairo-wk1/TestExpectations: Skip it. -+ -+2022-05-07 Cameron McCormack -+ -+ Don't propagate GraphicsContextState change bits into TextPainter's glyph display list recorder -+ https://bugs.webkit.org/show_bug.cgi?id=239952 -+ -+ -+ Reviewed by Antti Koivisto. -+ -+ * fast/text/glyph-display-list-color-expected.txt: Added. -+ * fast/text/glyph-display-list-color.html: Added. -+ -+2022-05-06 Megan Gardner -+ -+ Fix flakey test by using the old API on old systems. -+ https://bugs.webkit.org/show_bug.cgi?id=240195 -+ -+ Reviewed by Tim Horton. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-06 Patrick Griffis -+ -+ CSP: Fix script-src-elem policies in workers -+ https://bugs.webkit.org/show_bug.cgi?id=239840 -+ -+ Reviewed by Kate Cheney. -+ -+ CSP: Fix script-src-elem policies in workers -+ -+ * http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem-expected.txt: Added. -+ * http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem.html: Added. -+ -+2022-05-06 Karl Rackler -+ -+ [Gardening] REGRESSION (r293117): [ iOS ] fast/innerHTML/001.html is a flaky image failure -+ https://bugs.webkit.org/show_bug.cgi?id=240170 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-06 Karl Rackler -+ -+ [Gardening][ iOS ] fast/innerHTML/001.html is a flaky image failure -+ https://bugs.webkit.org/show_bug.cgi?id=240170 -+ -+ Reviewed by Jonathan Bedard. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-05 Ben Nham -+ -+ Add support for Notification objects with custom data -+ https://bugs.webkit.org/show_bug.cgi?id=240153 -+ -+ Reviewed by Chris Dumez. -+ -+ Test that Notification objects with custom data can be created and shown by both documents -+ and service workers. -+ -+ * http/tests/notifications/notification-expected.txt: -+ * http/tests/notifications/notification.html: -+ * http/tests/workers/service/getnotifications-expected.txt: -+ * http/tests/workers/service/getnotifications-stop-expected.txt: -+ * http/tests/workers/service/getnotifications-stop.html: -+ * http/tests/workers/service/getnotifications.html: -+ * http/tests/workers/service/openwindow-from-notification-click.html: -+ * http/tests/workers/service/resources/shownotification-openwindow-worker.js: -+ (async tryShow): -+ (async getNotes): -+ * http/tests/workers/service/resources/shownotification-worker.js: -+ (async event): -+ (async tryShow): -+ (async tryShowInvalidData.try.data): -+ (async tryShowInvalidData): -+ (async getNotes): -+ * http/tests/workers/service/shownotification-allowed-document-expected.txt: -+ * http/tests/workers/service/shownotification-allowed-document.html: -+ * http/tests/workers/service/shownotification-allowed.html: -+ * http/tests/workers/service/shownotification-invalid-data-expected.txt: Added. -+ * http/tests/workers/service/shownotification-invalid-data.html: Added. -+ -+2022-05-06 Brent Fulgham -+ -+ Remove the viewportFitEnabled WKPreference now that it is always on -+ https://bugs.webkit.org/show_bug.cgi?id=240147 -+ -+ Reviewed by Tim Horton. -+ -+ Remove the WKPreference 'ViewportFitEnabled' now that it is always enabled on all platforms, and -+ we do not wish to turn it off in testing or in other debugging circumstances. -+ -+ * fast/css/variables/env/ios/safe-area-inset-env-set-expected.html: -+ * fast/css/variables/env/ios/safe-area-inset-env-set.html: -+ * fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation.html: -+ * fast/viewport/ios/viewport-fit-auto.html: -+ * fast/viewport/ios/viewport-fit-contain.html: -+ * fast/viewport/ios/viewport-fit-cover.html: -+ -+2022-05-06 Jer Noble -+ -+ [Cocoa] Seeking into a xHE-AAC track backed by a SourceBuffer can stall playback -+ https://bugs.webkit.org/show_bug.cgi?id=239750 -+ -+ -+ Reviewed by Eric Carlson. -+ -+ * media/media-source/content/test-xhe-aac-manifest.json: Added. -+ * media/media-source/content/test-xhe-aac.m4a: Added. -+ * media/media-source/media-mp4-xhe-aac-expected.txt: Added. -+ * media/media-source/media-mp4-xhe-aac.html: Added. -+ -+2022-05-06 Karl Rackler -+ -+ [ iOS ] fast/innerHTML/001.html is a flaky image failure -+ https://bugs.webkit.org/show_bug.cgi?id=240170 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-06 Patrick Griffis -+ -+ CSP: Fix incorrect blocked-uri for inline scripts and strict-dynamic policies -+ https://bugs.webkit.org/show_bug.cgi?id=240136 -+ -+ Reviewed by Kate Cheney. -+ -+ * http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report-expected.txt: Added. -+ * http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report.py: Added. -+ -+2022-05-06 Jer Noble -+ -+ Video playback fails when using postMessage() during a User Gesture -+ https://bugs.webkit.org/show_bug.cgi?id=239781 -+ -+ -+ Reviewed by Eric Carlson. -+ -+ * workers/worker-user-gesture-expected.txt: Added. -+ * workers/worker-user-gesture.html: Added. -+ * workers/worker-user-gesture.js: Added. -+ -+2022-05-06 Karl Rackler -+ -+ [ iOS Release ] fast/css-custom-paint/animate-repaint.html is a flaky failure -+ https://bugs.webkit.org/show_bug.cgi?id=240167 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-05 Karl Rackler -+ -+ [ iOS ] fast/images/exif-orientation-background-image-repeat.html is a consistent image failure -+ https://bugs.webkit.org/show_bug.cgi?id=240148 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-05 Manuel Rego Casasnovas -+ -+ ARIA reflection for Element attributes -+ https://bugs.webkit.org/show_bug.cgi?id=239852 -+ -+ Reviewed by Chris Dumez. -+ -+ Update test to include the new reflected attributes. -+ -+ * accessibility/ARIA-reflection-expected.txt: -+ * accessibility/ARIA-reflection.html: -+ -+2022-05-05 Karl Rackler -+ -+ [ iOS ][ Monterey Release wk2 ] imported/w3c/web-platform-tests/content-security-policy/inheritance/blob-url-in-main-window-self-navigate-inherits.sub.html is a flaky failure -+ https://bugs.webkit.org/show_bug.cgi?id=239568 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-05 Robert Jenner -+ -+ Remove and cleanup platform expectations folders -+ https://bugs.webkit.org/show_bug.cgi?id=240131 -+ -+ Unreviewed test gardening. -+ -+ * platform/mac-catalina-wk1/TestExpectations: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/anchor-element-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attrib-string-colors-with-color-filter-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attribute-string-for-copy-with-color-filter-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-1-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-2-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-3-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-4-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-5-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-1-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-2-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-with-color-filter-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/basic-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/comment-cdata-section-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/font-size-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/font-weight-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/letter-spacing-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/text-decorations-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/mac/attributed-string/vertical-align-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-4-expected.txt: Removed. -+ * platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-5-expected.txt: Removed. -+ * platform/mac-catalina-wk1/http/tests/cookies/js-get-and-set-http-only-cookie-expected.txt: Removed. -+ * platform/mac-catalina-wk1/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001-expected.txt: Removed. -+ * platform/mac-catalina-wk2/fast/events/contextmenu-lookup-action-for-image-expected.txt: Removed. -+ * platform/mac-catalina-wk2/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt: Removed. -+ * platform/mac-catalina-wk2/http/tests/workers/service/serviceworker-websocket.https-expected.txt: Removed. -+ * platform/mac-catalina-wk2/imported/w3c/web-platform-tests/media-source/mediasource-invalid-codec-expected.txt: Removed. -+ * platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt: Removed. -+ * platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket.https-expected.txt: Removed. -+ * platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt: Removed. -+ * platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt: Removed. -+ * platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/remove-own-iframe-during-onerror.window-expected.txt: Removed. -+ * platform/mac-catalina/TestExpectations: Removed. -+ * platform/mac-catalina/editing/input/reveal-caret-of-multiline-input-expected.txt: Removed. -+ * platform/mac-catalina/editing/pasteboard/pasting-tabs-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/3690703-2-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/3690703-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/3690719-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/select-from-textfield-outwards-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-mixed-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-mixed-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-mixed-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt: Removed. -+ * platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-mixed-expected.txt: Removed. -+ * platform/mac-catalina/fast/block/basic/001-expected.txt: Removed. -+ * platform/mac-catalina/fast/block/float/float-avoidance-expected.txt: Removed. -+ * platform/mac-catalina/fast/css/apple-system-control-colors-expected.txt: Removed. -+ * platform/mac-catalina/fast/css/continuationCrash-expected.txt: Removed. -+ * platform/mac-catalina/fast/css/rtl-ordering-expected.txt: Removed. -+ * platform/mac-catalina/fast/css/text-overflow-input-expected.txt: Removed. -+ * platform/mac-catalina/fast/dom/HTMLInputElement/input-slider-update-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/basic-inputs-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/basic-textareas-quirks-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/box-shadow-override-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/button-positioned-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/button-sizes-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/date/date-input-rendering-basic-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/form-element-geometry-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/hidpi-textfield-background-bleeding-expected.html: Removed. -+ * platform/mac-catalina/fast/forms/input-appearance-height-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-appearance-preventDefault-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-appearance-spinbutton-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-appearance-spinbutton-up-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-button-sizes-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-disabled-color-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-placeholder-visibility-1-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-placeholder-visibility-3-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-readonly-dimmed-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-table-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-text-word-wrap-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/input-value-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/listbox-bidi-align-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/listbox-width-change-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/option-text-clip-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/plaintext-mode-2-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/range/input-appearance-range-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/range/slider-padding-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/range/slider-thumb-shared-style-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/range/thumbslider-no-parent-slider-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/search-rtl-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/search/search-size-with-decorations-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/search/search-zoom-computed-style-height-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/select-change-listbox-to-popup-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/select-change-popup-to-listbox-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/select-selected-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/select-visual-hebrew-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/select/optgroup-rendering-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/textAreaLineHeight-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/textarea-placeholder-visibility-1-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/textarea-placeholder-visibility-2-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/textfield-outline-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/time/time-input-rendering-basic-expected.txt: Removed. -+ * platform/mac-catalina/fast/forms/visual-hebrew-text-field-expected.txt: Removed. -+ * platform/mac-catalina/fast/parser/document-write-option-expected.txt: Removed. -+ * platform/mac-catalina/fast/parser/entity-comment-in-textarea-expected.txt: Removed. -+ * platform/mac-catalina/fast/parser/open-comment-in-textarea-expected.txt: Removed. -+ * platform/mac-catalina/fast/repaint/block-inputrange-repaint-expected.txt: Removed. -+ * platform/mac-catalina/fast/repaint/slider-thumb-drag-release-expected.txt: Removed. -+ * platform/mac-catalina/fast/sandbox/mac/sandbox-mach-lookup-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/backslash-to-yen-sign-euc-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/basic/014-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/capitalize-boundaries-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/drawBidiText-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphenate-avoid-orphaned-word-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphenate-character-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphenate-first-word-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphenate-limit-before-after-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphenate-limit-lines-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphenate-locale-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/hyphens-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/indic-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/bidi-fallback-font-weight-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/bidi-linebreak-001-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/bidi-linebreak-002-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/bidi-linebreak-003-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/danda-space-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/pop-up-button-text-alignment-and-direction-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-en-US-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-en-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-es-ES-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-es-MX-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-es-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-fr-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-hi-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-pt-BR-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/navigator-language/navigator-language-ru-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/international/system-language/system-font-punctuation-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/justify-ideograph-leading-expansion-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/midword-break-after-breakable-char-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/vertical-rl-rtl-linebreak-expected.txt: Removed. -+ * platform/mac-catalina/fast/text/vertical-rl-rtl-linebreak-mixed-expected.txt: Removed. -+ * platform/mac-catalina/http/tests/navigation/javascriptlink-frames-expected.txt: Removed. -+ * platform/mac-catalina/http/tests/xmlhttprequest/methods-async-expected.txt: Removed. -+ * platform/mac-catalina/http/tests/xmlhttprequest/methods-expected.txt: Removed. -+ * platform/mac-catalina/http/tests/xmlhttprequest/workers/methods-async-expected.txt: Removed. -+ * platform/mac-catalina/http/tests/xmlhttprequest/workers/methods-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/fetch/redirect-navigate/preserve-fragment-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/canPlayType-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-video-element/resize-during-playback-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-combining-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-001-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-002-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-001-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-005-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-006-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/relations/css-styling/ignored-properties-001-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/relations/css-styling/padding-border-margin/border-002-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/mathml/relations/html5-tree/dynamic-childlist-001-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/media-source/mediasource-addsourcebuffer-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/media-source/mediasource-invalid-codec-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-getting-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt: Removed. -+ * platform/mac-catalina/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt: Removed. -+ * platform/mac-catalina/inspector/css/get-system-fonts-expected.txt: Removed. -+ * platform/mac-catalina/media/media-can-play-webm-expected.txt: Removed. -+ * platform/mac-catalina/platform/mac/fast/loader/file-url-mimetypes-3-expected.txt: Removed. -+ * platform/mac-catalina/platform/mac/fast/text/bidi-fallback-font-weight-expected.txt: Removed. -+ * platform/mac-catalina/platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment-expected.txt: Removed. -+ * platform/mac-catalina/platform/mac/fast/text/international/bidi-fallback-font-weight-expected.txt: Removed. -+ * platform/mac-catalina/svg/W3C-I18N/tspan-direction-rtl-expected.txt: Removed. -+ * platform/mac-catalina/svg/custom/svg-fonts-without-missing-glyph-expected.txt: Removed. -+ * platform/mac-catalina/svg/text/bidi-tspans-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug18359-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug2479-3-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug26178-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug30692-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug33855-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug60749-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/bugs/bug7342-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/other/wa_table_thtd_rowspan-expected.txt: Removed. -+ * platform/mac-catalina/tables/mozilla/other/wa_table_tr_align-expected.txt: Removed. -+ * platform/mac-catalina/transforms/2d/zoom-menulist-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/anchor-element-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attrib-string-colors-with-color-filter-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attribute-string-for-copy-with-color-filter-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-1-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-2-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-3-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-4-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-5-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-1-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-2-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-for-typing-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/attributed-string-for-typing-with-color-filter-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/basic-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/comment-cdata-section-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/font-size-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/font-weight-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/letter-spacing-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/text-decorations-expected.txt: Removed. -+ * platform/mac-mojave-wk1/editing/mac/attributed-string/vertical-align-expected.txt: Removed. -+ * platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt: Removed. -+ * platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt: Removed. -+ * platform/mac-mojave/css1/basic/inheritance-expected.txt: Removed. -+ * platform/mac-mojave/css2.1/t0602-c13-inh-underlin-00-e-expected.txt: Removed. -+ * platform/mac-mojave/css2.1/t0805-c5522-brdr-02-e-expected.txt: Removed. -+ * platform/mac-mojave/css2.1/t1202-counter-09-b-expected.txt: Removed. -+ * platform/mac-mojave/css2.1/t1202-counters-09-b-expected.txt: Removed. -+ * platform/mac-mojave/editing/input/reveal-caret-of-multiline-input-expected.txt: Removed. -+ * platform/mac-mojave/editing/mac/selection/context-menu-select-editability-expected.txt: Removed. -+ * platform/mac-mojave/editing/selection/3690703-2-expected.txt: Removed. -+ * platform/mac-mojave/editing/selection/3690703-expected.txt: Removed. -+ * platform/mac-mojave/editing/selection/3690719-expected.txt: Removed. -+ * platform/mac-mojave/fast/block/basic/001-expected.txt: Removed. -+ * platform/mac-mojave/fast/block/float/float-avoidance-expected.txt: Removed. -+ * platform/mac-mojave/fast/css-generated-content/014-expected.png: Removed. -+ * platform/mac-mojave/fast/css-generated-content/014-expected.txt: Removed. -+ * platform/mac-mojave/fast/css/apple-system-control-colors-expected.txt: Removed. -+ * platform/mac-mojave/fast/css/continuationCrash-expected.txt: Removed. -+ * platform/mac-mojave/fast/css/css3-nth-child-expected.txt: Removed. -+ * platform/mac-mojave/fast/css/line-height-font-order-expected.png: Removed. -+ * platform/mac-mojave/fast/css/line-height-font-order-expected.txt: Removed. -+ * platform/mac-mojave/fast/css/rtl-ordering-expected.txt: Removed. -+ * platform/mac-mojave/fast/css/text-overflow-input-expected.txt: Removed. -+ * platform/mac-mojave/fast/dom/34176-expected.txt: Removed. -+ * platform/mac-mojave/fast/dom/clone-node-dynamic-style-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/basic-inputs-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/button-positioned-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/button-sizes-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/date/date-input-rendering-basic-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/input-appearance-spinbutton-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/input-button-sizes-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/input-disabled-color-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/input-readonly-dimmed-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/input-text-word-wrap-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/listbox-bidi-align-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/listbox-width-change-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/option-text-clip-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/plaintext-mode-2-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/search-rtl-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/search/search-size-with-decorations-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/select-change-listbox-to-popup-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/select-change-popup-to-listbox-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/select-selected-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/select/optgroup-rendering-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/textfield-outline-expected.txt: Removed. -+ * platform/mac-mojave/fast/forms/time/time-input-rendering-basic-expected.txt: Removed. -+ * platform/mac-mojave/fast/images/image-controls-basic-expected.png: Removed. -+ * platform/mac-mojave/fast/indic-expected.txt: Removed. -+ * platform/mac-mojave/fast/invalid/003-expected.txt: Removed. -+ * platform/mac-mojave/fast/invalid/004-expected.txt: Removed. -+ * platform/mac-mojave/fast/invalid/nestedh3s-expected.txt: Removed. -+ * platform/mac-mojave/fast/overflow/007-expected.png: Removed. -+ * platform/mac-mojave/fast/overflow/007-expected.txt: Removed. -+ * platform/mac-mojave/fast/parser/document-write-option-expected.txt: Removed. -+ * platform/mac-mojave/fast/sandbox/mac/sandbox-mach-lookup-expected.txt: Removed. -+ * platform/mac-mojave/fast/selectors/018-expected.txt: Removed. -+ * platform/mac-mojave/fast/table/frame-and-rules-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/atsui-multiple-renderers-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/bidi-embedding-pop-and-push-same-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/font-weights-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/font-weights-zh-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/hyphenate-avoid-orphaned-word-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/hyphenate-character-expected.png: Removed. -+ * platform/mac-mojave/fast/text/hyphenate-character-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/hyphens-expected.png: Removed. -+ * platform/mac-mojave/fast/text/hyphens-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/indic-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/bidi-fallback-font-weight-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.png: Removed. -+ * platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/danda-space-expected.png: Removed. -+ * platform/mac-mojave/fast/text/international/danda-space-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/pop-up-button-text-alignment-and-direction-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-US-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-419-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-ES-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-MX-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-fr-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-hi-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ja-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-pt-BR-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ru-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-HK-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-Hant-HK-expected.txt: Removed. -+ * platform/mac-mojave/fast/text/international/system-language/system-font-punctuation-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/fetch-after-navigating-iframe-in-cross-origin-page-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-cross-origin-redirect-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-from-cross-origin-page-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/fetch-in-cross-origin-service-worker-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-post-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/cookies/same-site/popup-same-site-via-cross-site-redirect-expected.txt: Removed. -+ * platform/mac-mojave/http/tests/inspector/network/resource-sizes-network-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/cors/access-control-expose-headers-parsing.window-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/cors/credentials-flag-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/cors/origin-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/css/css-fonts/generic-family-keywords-001-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/css/css-pseudo/text-selection-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any.worker-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/content-type/script.window-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-actual.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/ignored-properties-001-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any-expected.txt: Removed. -+ * platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any.worker-expected.txt: Removed. -+ * platform/mac-mojave/platform/mac/fast/text/international/bidi-fallback-font-weight-expected.txt: Removed. -+ * platform/mac-mojave/svg/W3C-SVG-1.1/animate-elem-46-t-expected.txt: Removed. -+ * platform/mac-mojave/svg/W3C-SVG-1.1/struct-use-01-t-expected.txt: Removed. -+ * platform/mac-mojave/svg/batik/text/textStyles-expected.txt: Removed. -+ * platform/mac-mojave/svg/custom/glyph-selection-arabic-forms-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.png: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.png: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug2479-3-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug30692-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/bugs/bug33855-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/other/wa_table_thtd_rowspan-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla/other/wa_table_tr_align-expected.txt: Removed. -+ * platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png: Removed. -+ * platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt: Removed. -+ -+2022-05-05 Robert Jenner -+ -+ [ Catalina EWS ] webgl/2.0.0/* tests are flaky crashing ASSERTION FAILED: !needsLayout() -+ https://bugs.webkit.org/show_bug.cgi?id=229580 -+ -+ Unreviewed test gardening. Skip WebGL tests on mac-wk1. -+ -+ * platform/mac-wk1/TestExpectations: -+ -+2022-05-05 Karl Rackler -+ -+ [ iOS ][ macOS ] imported/w3c/web-platform-tests/webrtc/protocol/rtp-clockrate.html is a flaky failure -+ https://bugs.webkit.org/show_bug.cgi?id=240123 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ * platform/mac-wk2/TestExpectations: -+ -+2022-05-05 Karl Rackler -+ -+ [Gardening]REGRESSION (r293506): [ iOS ][ macOS ] imported/w3c/web-platform-tests/service-workers/service-worker/registration-updateviacache.https.html is a flaky failure -+ https://bugs.webkit.org/show_bug.cgi?id=240074 -+ -+ Unreviewed test gardening. -+ -+ * platform/mac-wk2/TestExpectations: -+ -+2022-05-05 Ziran Sun -+ -+ should have box-sizing: border-box in UA stylesheet -+ https://bugs.webkit.org/show_bug.cgi?id=197878 -+ -+ Reviewed by Tim Nguyen. -+ -+ * platform/glib/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt: -+ * platform/mac-wk1/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt. -+ -+2022-05-04 Devin Rousso -+ -+ [Apple Pay] REGRESSION(r291588): `appearance: -apple-pay-button` doesn't work with `border-width: 0` -+ https://bugs.webkit.org/show_bug.cgi?id=240087 -+ -+ -+ Reviewed by Kate Cheney. -+ -+ * fast/css/appearance-apple-pay-button-border-width.html: Added. -+ * fast/css/appearance-apple-pay-button-border-width-expected-mismatch.html: Added. -+ -+ * TestExpectations: -+ * platform/ios/TestExpectations: -+ * platform/mac/TestExpectations: -+ -+2022-05-04 Alex Christensen -+ -+ Crash in WindowProxy::setDOMWindow -+ https://bugs.webkit.org/show_bug.cgi?id=232763 -+ -+ Reviewed by Chris Dumez. -+ -+ * fast/dom/set-dom-window-without-page-expected.txt: Added. -+ * fast/dom/set-dom-window-without-page.html: Added. -+ -+2022-05-04 Simon Fraser -+ -+ Improve logging of display list items in IPC messages -+ https://bugs.webkit.org/show_bug.cgi?id=240053 -+ -+ Reviewed by Cameron McCormack. -+ -+ Now that display list logging is debug only, these tests will only work in debug builds. -+ -+ * platform/mac/TestExpectations: -+ -+2022-05-04 Aditya Keerthi -+ -+ Indeterminate, checked checkboxes do not render correctly on iOS, GTK, and Windows -+ https://bugs.webkit.org/show_bug.cgi?id=240015 -+ rdar://92645056 -+ -+ Reviewed by Cameron McCormack. -+ -+ Added a reference test to to verify that indeterminate, checked -+ checkboxes have the same appearance as indeterminate checkboxes. -+ -+ * fast/forms/checkbox-checked-indeterminate-expected.html: Added. -+ * fast/forms/checkbox-checked-indeterminate.html: Added. -+ -+2022-05-04 Karl Rackler -+ -+ [ iOS ] fast/text/international/system-language/navigator-language/navigator-language-fr.html is a flaky failure -+ https://bugs.webkit.org/show_bug.cgi?id=240104 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-04 Karl Rackler -+ -+ [Gardening]REGRESSION(r293038):[ iOS ] fast/forms/auto-fill-button/input-auto-fill-button.html is a consistent failure -+ https://bugs.webkit.org/show_bug.cgi?id=240065 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-04 Karl Rackler -+ -+ Unreviewed revert -+ This reverts commit 250254@main because rebaseline resolved failure -+ https://bugs.webkit.org/show_bug.cgi?id=240065 -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-04 Karl Rackler -+ -+ [ iOS ][ macOS Debug wk1 ] webaudio/AudioBuffer/huge-buffer.html is a flaky timeout -+ https://bugs.webkit.org/show_bug.cgi?id=240081 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ * platform/mac-wk1/TestExpectations: -+ -+2022-05-04 Kate Cheney -+ -+ REGRESSION (r293427): [ iOS ] http/tests/quicklook/same-origin-xmlhttprequest-allowed.html is a constant crash and failure (240024) -+ https://bugs.webkit.org/show_bug.cgi?id=240024 -+ rdar://92678727 -+ -+ Reviewed by Wenson Hsieh. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-04 Karl Rackler -+ -+ [Gardening][iOS Mac ] imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/same-hash.html is a flaky text failure -+ https://bugs.webkit.org/show_bug.cgi?id=237552 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ * platform/mac-wk1/TestExpectations: -+ -+2022-05-04 Karl Rackler -+ -+ REGRESSION (r293506): [ iOS ][ macOS ] imported/w3c/web-platform-tests/service-workers/service-worker/registration-updateviacache.https.html is a flaky failure -+ https://bugs.webkit.org/show_bug.cgi?id=240074 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ * platform/mac/TestExpectations: -+ -+2022-05-04 Karl Rackler -+ -+ [Rebaseline] REGRESSION (r293038):[ iOS ] fast/forms/auto-fill-button/input-auto-fill-button.html is a consistent failure -+ https://bugs.webkit.org/show_bug.cgi?id=240065 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt: -+ -+2022-05-04 Karl Rackler -+ -+ [ iOS ] fast/css/continuationCrash.html is a consistent failure -+ https://bugs.webkit.org/show_bug.cgi?id=240069 -+ -+ Unreviewed test gardening. -+ -+ * platform/ios/TestExpectations: -+ -+2022-05-04 Ziran Sun -+ -+ [InputElement] Selection after type change needs to follow HTML specification -+ https://bugs.webkit.org/show_bug.cgi?id=237361 -+ -+ Reviewed by Chris Dumez. -+ -+ * platform/gtk/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt: -+ * platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt: -+ * platform/mac-wk1/imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra-expected.txt. -+ * platform/mac-wk1/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt: -+ * platform/mac-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt: -+ -+2022-04-30 Philippe Normand -+ -+ [GStreamer] Mediastream mock audio interruption fixes after r290985 -+ https://bugs.webkit.org/show_bug.cgi?id=239926 -+ -+ Reviewed by Chris Dumez. -+ -+ * platform/glib/TestExpectations: Unflag mediastream tests now passing. -+ -+2022-05-04 Philippe Normand -+ -+ Web Inspector: Update jsmin to 3.0.1 -+ https://bugs.webkit.org/show_bug.cgi?id=239924 -+ -+ Reviewed by Yusuke Suzuki. -+ -+ * platform/gtk/inspector/timeline/line-column-expected.txt: -+ -+2022-05-03 Dan Glastonbury -+ -+ webgl/1.0.3/conformance/state/gl-object-get-calls.html times out after turning WebGL in GPUP on by default -+ https://bugs.webkit.org/show_bug.cgi?id=238691 -+ -+ -+ Unreviewed test gardening. -+ -+ * webgl/TestExpectations: -+ - 2022-05-03 Truitt Savell - - Some layout tests are failing on EWS but not post commit testing due to a OS difference -diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations -index 13d2f0cf1439e4f402332cbe184379605c2606d5..fcad56e0e5863907175c128db95998721f8af6a8 100644 ---- a/LayoutTests/TestExpectations -+++ b/LayoutTests/TestExpectations -@@ -280,6 +280,7 @@ media/deactivate-audio-session.html [ Skip ] - fast/css/appearance-apple-pay-button.html [ Skip ] - fast/css/appearance-apple-pay-button-border-radius.html [ Skip ] - fast/css/appearance-apple-pay-button-border-radius-longhands.html [ Skip ] -+fast/css/appearance-apple-pay-button-border-width.html [ Skip ] - fast/css/appearance-apple-pay-button-default-corners.html [ Skip ] - fast/css/getComputedStyle/computed-style-apple-pay-button.html [ Skip ] - fast/css/webkit-named-image/apple-pay-logo-black [ Skip ] -@@ -661,7 +662,6 @@ imported/w3c/web-platform-tests/html/browsers/windows/iframe-cross-origin-print. - imported/w3c/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html [ ImageOnlyFailure ] - imported/w3c/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html [ ImageOnlyFailure ] - imported/w3c/web-platform-tests/html/rendering/bindings/the-select-element-0/option-label.html [ ImageOnlyFailure ] --imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/input-placeholder-line-height.html [ ImageOnlyFailure ] - imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html [ ImageOnlyFailure ] - imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-roman.html [ ImageOnlyFailure ] - imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-alpha.html [ ImageOnlyFailure ] -@@ -3681,6 +3681,8 @@ webgl/1.0.x/conformance/glsl/misc/fragcolor-fragdata-invariant.html [ Pass ] - webgl/1.0.x/conformance/context/constants-and-properties.html [ Pass ] - webgl/1.0.x/conformance/extensions/webgl-multi-draw.html [ Pass Slow ] - -+# Debug builds on slower machines run close to the time out especially with GPUP enabled -+webkit.org/b/238691 [ Debug ] webgl/1.0.3/conformance/state/gl-object-get-calls.html [ Slow ] - - # WebGL conformance test suite 2.0.1 is skipped until 2.0.0 is retired. - webgl/2.0.y [ Skip ] -@@ -5072,23 +5074,15 @@ webkit.org/b/233340 imported/w3c/web-platform-tests/css/motion/offset-anchor-tra - webkit.org/b/233340 imported/w3c/web-platform-tests/css/motion/offset-anchor-transform-box-fill-box-002.html [ ImageOnlyFailure ] - webkit.org/b/233340 imported/w3c/web-platform-tests/css/motion/offset-anchor-transform-box-fill-box-003.html [ ImageOnlyFailure ] - --# CSS motion path that depends on ray(), currently not implemented. --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-001.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-002.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-003.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-004.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-005.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-006.html [ ImageOnlyFailure ] -+# CSS motion path ray test failing due to getting wrong size from containing block. - webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-007.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-008.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-009.html [ ImageOnlyFailure ] -+ -+# CSS motion path needs to implement contain for ray: https://bugs.webkit.org/show_bug.cgi?id=240259. - webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-contain-001.html [ ImageOnlyFailure ] - webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-contain-002.html [ ImageOnlyFailure ] - webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-contain-003.html [ ImageOnlyFailure ] - webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-contain-004.html [ ImageOnlyFailure ] - webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-path-ray-contain-005.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-rotate-001.html [ ImageOnlyFailure ] --webkit.org/b/233344 imported/w3c/web-platform-tests/css/motion/offset-rotate-002.html [ ImageOnlyFailure ] - - # IPC test failing in Debug mode due to assert. - [ Debug ] ipc/send-invalid-message.html [ Skip ] -@@ -5113,6 +5107,9 @@ imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp.html - # due to how MessagePort::dispatchMessages() is implemented. - imported/w3c/web-platform-tests/workers/shared-worker-name-via-options.html [ DumpJSConsoleLogInStdErr Failure Pass ] - -+# Display list logging is only available in debug -+[ Release ] fast/text/glyph-display-list-color.html [ Skip ] -+ - # Plugins - # FIXME: Remove these tests. - plugins/ [ Skip ] -@@ -5209,3 +5206,6 @@ webkit.org/b/239533 [ Debug ] editing/inserting/insert-list-user-select-none-cra - webkit.org/b/239550 fast/text/simple-line-hyphens-with-text-align.html [ ImageOnlyFailure ] - webkit.org/b/239550 fast/text/simple-line-layout-hyphen-limit-after.html [ ImageOnlyFailure ] - webkit.org/b/239550 fast/text/simple-line-layout-hyphen-limit-before.html [ ImageOnlyFailure ] -+ -+# Image controls menu is mac only. -+fast/attachment/attachment-image-controls-basic.html [ Skip ] -diff --git a/LayoutTests/accessibility/ARIA-reflection-expected.txt b/LayoutTests/accessibility/ARIA-reflection-expected.txt -index 9504b69bcbacd241b95854302ef5474e352a498e..e3feec30c4c7a9eafad1a94dedeec63f88bb80e7 100644 ---- a/LayoutTests/accessibility/ARIA-reflection-expected.txt -+++ b/LayoutTests/accessibility/ARIA-reflection-expected.txt -@@ -7,317 +7,292 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE - Test role < - > role - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["role"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("role", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty -+ -+Test ariaActiveDescendantElement < - > aria-activedescendant -+PASS element[currentProperty] is null -+PASS element.getAttribute(currentAttribute) is null -+PASS element.getAttribute(currentAttribute) is dataAttribute -+element.setAttribute("aria-activedescendant", otherData); -+PASS element[currentProperty] is otherDataProperty - - Test ariaAtomic < - > aria-atomic - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaAtomic"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-atomic", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaAutoComplete < - > aria-autocomplete - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaAutoComplete"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-autocomplete", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaBusy < - > aria-busy - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaBusy"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-busy", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaChecked < - > aria-checked - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaChecked"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-checked", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaColCount < - > aria-colcount - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaColCount"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-colcount", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaColIndex < - > aria-colindex - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaColIndex"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-colindex", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaColSpan < - > aria-colspan - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaColSpan"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-colspan", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaCurrent < - > aria-current - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaCurrent"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-current", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaDisabled < - > aria-disabled - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaDisabled"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-disabled", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty -+ -+Test ariaErrorMessageElement < - > aria-errormessage -+PASS element[currentProperty] is null -+PASS element.getAttribute(currentAttribute) is null -+PASS element.getAttribute(currentAttribute) is dataAttribute -+element.setAttribute("aria-errormessage", otherData); -+PASS element[currentProperty] is otherDataProperty - - Test ariaExpanded < - > aria-expanded - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaExpanded"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-expanded", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaHasPopup < - > aria-haspopup - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaHasPopup"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-haspopup", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaHidden < - > aria-hidden - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaHidden"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-hidden", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaInvalid < - > aria-invalid - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaInvalid"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-invalid", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaKeyShortcuts < - > aria-keyshortcuts - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaKeyShortcuts"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-keyshortcuts", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaLabel < - > aria-label - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaLabel"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-label", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaLevel < - > aria-level - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaLevel"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-level", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaLive < - > aria-live - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaLive"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-live", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaModal < - > aria-modal - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaModal"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-modal", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaMultiLine < - > aria-multiline - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaMultiLine"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-multiline", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaMultiSelectable < - > aria-multiselectable - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaMultiSelectable"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-multiselectable", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaOrientation < - > aria-orientation - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaOrientation"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-orientation", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaPlaceholder < - > aria-placeholder - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaPlaceholder"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-placeholder", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaPosInSet < - > aria-posinset - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaPosInSet"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-posinset", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaPressed < - > aria-pressed - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaPressed"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-pressed", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaReadOnly < - > aria-readonly - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaReadOnly"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-readonly", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaRelevant < - > aria-relevant - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaRelevant"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-relevant", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaRequired < - > aria-required - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaRequired"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-required", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaRoleDescription < - > aria-roledescription - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaRoleDescription"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-roledescription", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaRowCount < - > aria-rowcount - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaRowCount"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-rowcount", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaRowIndex < - > aria-rowindex - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaRowIndex"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-rowindex", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaRowSpan < - > aria-rowspan - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaRowSpan"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-rowspan", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaSelected < - > aria-selected - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaSelected"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-selected", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaSetSize < - > aria-setsize - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaSetSize"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-setsize", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaSort < - > aria-sort - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaSort"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-sort", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaValueMax < - > aria-valuemax - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaValueMax"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-valuemax", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaValueMin < - > aria-valuemin - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaValueMin"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-valuemin", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaValueNow < - > aria-valuenow - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaValueNow"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-valuenow", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - Test ariaValueText < - > aria-valuetext - PASS element[currentProperty] is null - PASS element.getAttribute(currentAttribute) is null --element["ariaValueText"] = data; --PASS element.getAttribute(currentAttribute) is data -+PASS element.getAttribute(currentAttribute) is dataAttribute - element.setAttribute("aria-valuetext", otherData); --PASS element[currentProperty] is otherData -+PASS element[currentProperty] is otherDataProperty - - --PASS count is 38 -+PASS count is 40 - PASS successfullyParsed is true - - TEST COMPLETE -diff --git a/LayoutTests/accessibility/ARIA-reflection.html b/LayoutTests/accessibility/ARIA-reflection.html -index 323b189c4e3e401a4ffd56d4cfee464729aff918..93a9b7a17f9a44e4cd11beca969f0ce57769ceee 100644 ---- a/LayoutTests/accessibility/ARIA-reflection.html -+++ b/LayoutTests/accessibility/ARIA-reflection.html -@@ -5,7 +5,8 @@ -
- -
-- -+
-+
-
- -

-@@ -21,22 +22,40 @@ - var currentProperty; - var currentAttribute; - -+ function isElementReflectionProperty(property) { -+ switch (property) { -+ case "ariaActiveDescendantElement": -+ case "ariaErrorMessageElement": -+ return true; -+ } -+ return false; -+ } -+ -+ function convertPropertyToAttribute(property) { -+ if (isElementReflectionProperty(property)) -+ property = property.replace("Element", ""); -+ return property.replace("aria", "aria-").toLowerCase(); -+ } -+ - function testElement() { -- currentAttribute = currentProperty.replace("aria", "aria-").toLowerCase(); -- -+ currentAttribute = convertPropertyToAttribute(currentProperty); -+ - debug("\nTest " + currentProperty + " < - > " + currentAttribute); - shouldBeNull("element[currentProperty]"); - shouldBeNull("element.getAttribute(currentAttribute)"); -- -+ - // Set the property value -- debug("element[\"" + currentProperty + "\"] = data;"); -- element[currentProperty] = data; -- shouldBe("element.getAttribute(currentAttribute)", "data"); -+ dataProperty = isElementReflectionProperty(currentProperty) ? firstChild : data; -+ dataAttribute = isElementReflectionProperty(currentProperty) ? firstChild.id : data; -+ element[currentProperty] = dataProperty; -+ shouldBe("element.getAttribute(currentAttribute)", "dataAttribute"); - - // Set the attribute value -+ otherDataProperty = isElementReflectionProperty(currentProperty) ? secondChild : otherData; -+ otherDataAttribute = isElementReflectionProperty(currentProperty) ? secondChild.id : otherData; - debug("element.setAttribute(\"" + currentAttribute + "\", otherData);"); -- element.setAttribute(currentAttribute, otherData); -- shouldBe("element[currentProperty]", "otherData"); -+ element.setAttribute(currentAttribute, otherDataAttribute); -+ shouldBe("element[currentProperty]", "otherDataProperty"); - } - - function testRole() { -@@ -59,7 +78,7 @@ - } - - debug("\n"); -- shouldBe("count", "38"); -+ shouldBe("count", "40"); - - } else { - testFailed("Could not load accessibility controller"); -diff --git a/LayoutTests/fast/attachment/attachment-image-controls-basic.html b/LayoutTests/fast/attachment/attachment-image-controls-basic.html -new file mode 100644 -index 0000000000000000000000000000000000000000..08e5027ff7d6ea4bc11405a37521f30225c08a1f ---- /dev/null -+++ b/LayoutTests/fast/attachment/attachment-image-controls-basic.html -@@ -0,0 +1,13 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/LayoutTests/fast/css/appearance-apple-pay-button-border-width-expected-mismatch.html b/LayoutTests/fast/css/appearance-apple-pay-button-border-width-expected-mismatch.html -new file mode 100644 -index 0000000000000000000000000000000000000000..7c89b545c5ac0a2a9db0571749025946344396e3 ---- /dev/null -+++ b/LayoutTests/fast/css/appearance-apple-pay-button-border-width-expected-mismatch.html -@@ -0,0 +1 @@ -+
-diff --git a/LayoutTests/fast/css/appearance-apple-pay-button-border-width.html b/LayoutTests/fast/css/appearance-apple-pay-button-border-width.html -new file mode 100644 -index 0000000000000000000000000000000000000000..ef2dadf1d44d6d198585f9dfbddf97201f2b434e ---- /dev/null -+++ b/LayoutTests/fast/css/appearance-apple-pay-button-border-width.html -@@ -0,0 +1,9 @@ -+ -+
-diff --git a/LayoutTests/fast/css/deferred-parsing/dynamic-external-style-expected.txt b/LayoutTests/fast/css/deferred-parsing/dynamic-external-style-expected.txt -deleted file mode 100644 -index d2f009cf73ba5d7fca3ceb237b03ac055d485bac..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/dynamic-external-style-expected.txt -+++ /dev/null -@@ -1,12 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 2 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 1 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/dynamic-external-style.html b/LayoutTests/fast/css/deferred-parsing/dynamic-external-style.html -deleted file mode 100644 -index e9ff9ddc3f4a5eaa33ccd66e5e787f2ddfe7b150..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/dynamic-external-style.html -+++ /dev/null -@@ -1,36 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/dynamic-style-in-document-expected.txt b/LayoutTests/fast/css/deferred-parsing/dynamic-style-in-document-expected.txt -deleted file mode 100644 -index d2f009cf73ba5d7fca3ceb237b03ac055d485bac..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/dynamic-style-in-document-expected.txt -+++ /dev/null -@@ -1,12 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 2 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 1 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/dynamic-style-in-document.html b/LayoutTests/fast/css/deferred-parsing/dynamic-style-in-document.html -deleted file mode 100644 -index 55f28e811749d78df83823ba010a721257b6e24a..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/dynamic-style-in-document.html -+++ /dev/null -@@ -1,52 +0,0 @@ -- -- -- -- -- -- -- -- --
-- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/hover-test-expected.txt b/LayoutTests/fast/css/deferred-parsing/hover-test-expected.txt -deleted file mode 100644 -index 2c98592feba39aa290f1aab1505122476b316286..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/hover-test-expected.txt -+++ /dev/null -@@ -1,11 +0,0 @@ --Test that deferred parsing doesn't parse the :hover rule until the hover happens. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 1 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 0 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/hover-test.html b/LayoutTests/fast/css/deferred-parsing/hover-test.html -deleted file mode 100644 -index d3ad4ad0d52f1bb2e6f58d7222b7393ba3593f82..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/hover-test.html -+++ /dev/null -@@ -1,48 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/keyframes-rule-expected.txt b/LayoutTests/fast/css/deferred-parsing/keyframes-rule-expected.txt -deleted file mode 100644 -index c193c9dd81a1eede173f9e90c366782c03f45938..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/keyframes-rule-expected.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 0 --PASS internals.deferredKeyframesRulesCount(document.styleSheets[0]) is 1 --PASS internals.deferredKeyframesRulesCount(document.styleSheets[0]) is 0 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/keyframes-rule.html b/LayoutTests/fast/css/deferred-parsing/keyframes-rule.html -deleted file mode 100644 -index 832b99758e53d8b567d0cd576d11fdd22563d9c8..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/keyframes-rule.html -+++ /dev/null -@@ -1,40 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/media-print-expected.txt b/LayoutTests/fast/css/deferred-parsing/media-print-expected.txt -deleted file mode 100644 -index 09a19f21b4e7388115db4c8fac61c9934989e6c8..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/media-print-expected.txt -+++ /dev/null -@@ -1,14 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 0 --PASS internals.deferredGroupRulesCount(document.styleSheets[0]) is 1 --PASS internals.deferredGroupRulesCount(document.styleSheets[0]) is 0 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 3 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/media-print.html b/LayoutTests/fast/css/deferred-parsing/media-print.html -deleted file mode 100644 -index f702cf9f5dbd82354a8d70bfdfc81d1e0defa6ef..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/media-print.html -+++ /dev/null -@@ -1,59 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/nth-of-type-expected.txt b/LayoutTests/fast/css/deferred-parsing/nth-of-type-expected.txt -deleted file mode 100644 -index 1a577ea3cce6774d1ee3146076a7edfc6c26044f..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/nth-of-type-expected.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --This tests deferred parsing of CSS :nth-of-type style rules where some are invalid. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS document.styleSheets[0].cssRules.length is 4 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 4 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 2 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/nth-of-type.html b/LayoutTests/fast/css/deferred-parsing/nth-of-type.html -deleted file mode 100644 -index dd168157a54163d809f7415e95ce90d16a5fd113..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/nth-of-type.html -+++ /dev/null -@@ -1,46 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/resources/basic-sheet.css b/LayoutTests/fast/css/deferred-parsing/resources/basic-sheet.css -deleted file mode 100644 -index 8b39ca5959b490db30c4a8625e676b7ffeb8a715..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/resources/basic-sheet.css -+++ /dev/null -@@ -1,21 +0,0 @@ --/* This rule should parse. */ --body { -- color: black; --} -- --/* This rule should parse because it is empty. */ --.unknown { -- --} -- --/* This rule should not parse. */ --div#unknown { -- color:red; --} -- --/* This rule should not parse. */ --quote { -- color:lime; -- background-color:blue; -- border:10px solid white; --} -diff --git a/LayoutTests/fast/css/deferred-parsing/simple-external-style-expected.txt b/LayoutTests/fast/css/deferred-parsing/simple-external-style-expected.txt -deleted file mode 100644 -index 8f4c5815da25b41b0e6b08d22bbd8e2215c88243..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/simple-external-style-expected.txt -+++ /dev/null -@@ -1,11 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 2 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/simple-external-style.html b/LayoutTests/fast/css/deferred-parsing/simple-external-style.html -deleted file mode 100644 -index dd73c02d9215a9ed1b3aba651820b5f8fc40920a..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/simple-external-style.html -+++ /dev/null -@@ -1,26 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/simple-style-in-document-expected.txt b/LayoutTests/fast/css/deferred-parsing/simple-style-in-document-expected.txt -deleted file mode 100644 -index 8f4c5815da25b41b0e6b08d22bbd8e2215c88243..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/simple-style-in-document-expected.txt -+++ /dev/null -@@ -1,11 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 2 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/simple-style-in-document.html b/LayoutTests/fast/css/deferred-parsing/simple-style-in-document.html -deleted file mode 100644 -index 974c4b9996db11e9263747182386a102098e0f34..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/simple-style-in-document.html -+++ /dev/null -@@ -1,45 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/deferred-parsing/supports-rule-expected.txt b/LayoutTests/fast/css/deferred-parsing/supports-rule-expected.txt -deleted file mode 100644 -index 09a19f21b4e7388115db4c8fac61c9934989e6c8..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/supports-rule-expected.txt -+++ /dev/null -@@ -1,14 +0,0 @@ --This tests deferred parsing of CSS style rules. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- -- --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 0 --PASS internals.deferredGroupRulesCount(document.styleSheets[0]) is 1 --PASS internals.deferredGroupRulesCount(document.styleSheets[0]) is 0 --PASS internals.deferredStyleRulesCount(document.styleSheets[0]) is 3 --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/fast/css/deferred-parsing/supports-rule.html b/LayoutTests/fast/css/deferred-parsing/supports-rule.html -deleted file mode 100644 -index 637f2c7a1e43793aef15a2acdbf9846235069be3..0000000000000000000000000000000000000000 ---- a/LayoutTests/fast/css/deferred-parsing/supports-rule.html -+++ /dev/null -@@ -1,58 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -diff --git a/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt b/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt -index c846ceb2d04653f2275fd49f88ab6a80f3ef35c7..57ca96c7f70c3b92ff8ffc4c8be9f7bdfe59a198 100644 ---- a/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt -+++ b/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt -@@ -149,6 +149,7 @@ page-break-before: auto; - page-break-inside: auto; - paint-order: normal; - perspective: none; -+perspective-origin: 392px 288px; - pointer-events: auto; - position: static; - print-color-adjust: economy; -@@ -187,6 +188,7 @@ text-shadow: none; - text-transform: none; - top: auto; - transform: none; -+transform-origin: 392px 288px; - transform-style: flat; - transition-delay: 0s; - transition-duration: 0s; -diff --git a/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt b/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt -index 9cbe8511918eefecf2400479169566f76832213b..2b72f38f251280817cce08c87571d0dbb2209233 100644 ---- a/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt -+++ b/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt -@@ -148,6 +148,7 @@ page-break-before: auto - page-break-inside: auto - paint-order: normal - perspective: none -+perspective-origin: 50% 50% - pointer-events: auto - position: static - print-color-adjust: economy -@@ -186,6 +187,7 @@ text-shadow: none - text-transform: none - top: auto - transform: none -+transform-origin: 50% 50% - transform-style: flat - transition-delay: 0s - transition-duration: 0s -diff --git a/LayoutTests/fast/css/pseudo-class-internal-expected.txt b/LayoutTests/fast/css/pseudo-class-internal-expected.txt -index 838ceb72f603a965894738b05ae879ab449fd6b5..53a246fb75e8505218df264ee8e5b2a762d60995 100644 ---- a/LayoutTests/fast/css/pseudo-class-internal-expected.txt -+++ b/LayoutTests/fast/css/pseudo-class-internal-expected.txt -@@ -4,7 +4,6 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE - - - PASS target.matches(":-internal-direct-focus") threw exception SyntaxError: The string did not match the expected pattern.. --PASS target.matches(":-internal-modal-dialog") threw exception SyntaxError: The string did not match the expected pattern.. - PASS successfullyParsed is true - - TEST COMPLETE -diff --git a/LayoutTests/fast/css/pseudo-class-internal.html b/LayoutTests/fast/css/pseudo-class-internal.html -index 4243ad067f9fd347a2ae32082a512249f9851e32..2112634287940c9840ba25feff934eab492aa0c3 100644 ---- a/LayoutTests/fast/css/pseudo-class-internal.html -+++ b/LayoutTests/fast/css/pseudo-class-internal.html -@@ -10,7 +10,6 @@ description('This tests that -internal- pseudo classes are not exposed'); - function runTest() { - const internalPseudoClasses = [ - ':-internal-direct-focus', -- ':-internal-modal-dialog', - ]; - for (const pseudo of internalPseudoClasses) { - shouldThrowErrorName('target.matches("' + pseudo + '")', 'SyntaxError'); -diff --git a/LayoutTests/fast/css/variables/env/ios/safe-area-inset-env-set-expected.html b/LayoutTests/fast/css/variables/env/ios/safe-area-inset-env-set-expected.html -index c4dee78b9b7e096ab540a46547b8363acbadf023..7aa5caf06096144517fdbe1e4b12047dd4883323 100644 ---- a/LayoutTests/fast/css/variables/env/ios/safe-area-inset-env-set-expected.html -+++ b/LayoutTests/fast/css/variables/env/ios/safe-area-inset-env-set-expected.html -@@ -1,9 +1,5 @@ - - -- - - -+ -+ -+

Select me

-+
Then double tap here
-+

-+
-+
-\ No newline at end of file
-diff --git a/LayoutTests/fast/forms/checkbox-checked-indeterminate-expected.html b/LayoutTests/fast/forms/checkbox-checked-indeterminate-expected.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..ffedc416b6c6635b3698a61097e2e4448f20170f
---- /dev/null
-+++ b/LayoutTests/fast/forms/checkbox-checked-indeterminate-expected.html
-@@ -0,0 +1,14 @@
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-diff --git a/LayoutTests/fast/forms/checkbox-checked-indeterminate.html b/LayoutTests/fast/forms/checkbox-checked-indeterminate.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..dc5af493f7a81f11f2892d1ec5a71aeda4c63c65
---- /dev/null
-+++ b/LayoutTests/fast/forms/checkbox-checked-indeterminate.html
-@@ -0,0 +1,14 @@
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-diff --git a/LayoutTests/fast/frames/frame-window-as-callback-expected.txt b/LayoutTests/fast/frames/frame-window-as-callback-expected.txt
-index 5d777375c275847e7137659ab514fb31e648e504..389d6f00cb41fab132ed36a085a8355c0bc33cb2 100644
---- a/LayoutTests/fast/frames/frame-window-as-callback-expected.txt
-+++ b/LayoutTests/fast/frames/frame-window-as-callback-expected.txt
-@@ -3,7 +3,7 @@ Tests that we are using the right global object for DOM callbacks.
- On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
- 
- 
--PASS nextNodeError.constructor is f.contentWindow.TypeError
-+PASS: Global object was the right one.
- PASS successfullyParsed is true
- 
- TEST COMPLETE
-diff --git a/LayoutTests/fast/frames/frame-window-as-callback.html b/LayoutTests/fast/frames/frame-window-as-callback.html
-index 9325c4e27645b704c090ec6ca6656dadd04f1f9e..fbb9f26a2e679c043064bf06ccc344b2af5c518e 100644
---- a/LayoutTests/fast/frames/frame-window-as-callback.html
-+++ b/LayoutTests/fast/frames/frame-window-as-callback.html
-@@ -6,6 +6,7 @@
- description("Tests that we are using the right global object for DOM callbacks.");
- jsTestIsAsync = true;
- 
-+document.result = "PASS: Global object was the right one.";
- var f = document.body.appendChild(document.createElement("iframe"));
- f.onload = function() {
-     f.onload = null;
-@@ -14,14 +15,13 @@ f.onload = function() {
-         var iterator = document.createNodeIterator(document, NodeFilter.SHOW_ALL, f.contentWindow);
-         iterator.nextNode();
-     } catch(e) {
--        window.nextNodeError = e;
-+        e.constructor.constructor("debug(document.result)")();
-     }
- 
--    shouldBe("nextNodeError.constructor", "f.contentWindow.TypeError");
-     finishJSTest();
- };
- 
--f.src = "resources/empty-body.html";
-+f.src = "resources/wrong-global-object.html";
- 
- 
- 
-diff --git a/LayoutTests/fast/frames/resources/wrong-global-object.html b/LayoutTests/fast/frames/resources/wrong-global-object.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..998567c2c8fa9e9c36777862cefa090e55bb3077
---- /dev/null
-+++ b/LayoutTests/fast/frames/resources/wrong-global-object.html
-@@ -0,0 +1,4 @@
-+
-+
-diff --git a/LayoutTests/fast/text/glyph-display-list-color-expected.txt b/LayoutTests/fast/text/glyph-display-list-color-expected.txt
-new file mode 100644
-index 0000000000000000000000000000000000000000..899b99b50cc7b39c1a85d650d874505913601be0
---- /dev/null
-+++ b/LayoutTests/fast/text/glyph-display-list-color-expected.txt
-@@ -0,0 +1,6 @@
-+
-+(draw-glyphs
-+  (local-anchor (0,0))
-+  (anchor-point (0,0))
-+  (length 9) extent at (0,0) size 0x0)
-+
-diff --git a/LayoutTests/fast/text/glyph-display-list-color.html b/LayoutTests/fast/text/glyph-display-list-color.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..86c4f4eea729559278bfac466e2e8e1f40586af6
---- /dev/null
-+++ b/LayoutTests/fast/text/glyph-display-list-color.html
-@@ -0,0 +1,27 @@
-+
-+
-+
-+
Some text
-+

-+
-diff --git a/LayoutTests/fast/viewport/ios/viewport-fit-auto.html b/LayoutTests/fast/viewport/ios/viewport-fit-auto.html
-index f27004a4dc1126c27509496341082602602133ba..8d5d85331a54c16b5b896f8613d2be34ae3d040d 100644
---- a/LayoutTests/fast/viewport/ios/viewport-fit-auto.html
-+++ b/LayoutTests/fast/viewport/ios/viewport-fit-auto.html
-@@ -2,10 +2,6 @@
- 
- 
- 
--    
-     
-     
-     
-     
-     
-     
-     
-     
-     
-     
-     
- 
-@@ -24,6 +25,7 @@ test(function() {
-     assert_equals(notification.body, "");
-     assert_equals(notification.tag, "");
-     assert_equals(notification.icon, "");
-+    assert_equals(notification.data, null);
- }, "The Notification object initializes its properties to their default values from the NotificationOptions dictionary if it is not provided.");
- 
- test(function() {
-@@ -32,7 +34,8 @@ test(function() {
-         lang: "en",
-         body: "test body",
-         tag: "test tag",
--        icon: "foo.png"
-+        icon: "foo.png",
-+        data: {foo: 'bar'}
-     });
- 
-     assert_equals(notification.title, "test title");
-@@ -41,8 +44,13 @@ test(function() {
-     assert_equals(notification.body, "test body");
-     assert_equals(notification.tag, "test tag");
-     assert_equals(notification.icon, "http://127.0.0.1:8000/notifications/foo.png");
-+    assert_equals(JSON.stringify(notification.data), '{"foo":"bar"}')
- }, "The Notification object initializes its properties to the values from NotificationOptions dictionary if it is provided.");
- 
-+test(function() {
-+    assert_throws_dom('DataCloneError', function() { new Notification("title", { data: function() { } }); });
-+}, "The Notification constructor should throw if it is passed a non-cloneable data option.");
-+
- test(function() {
-     let notification1 = new Notification("test title", { dir: "auto" });
-     assert_equals(notification1.dir, "auto");
-@@ -56,6 +64,17 @@ test(function() {
-     assert_throws_js(TypeError, function() { new Notification("test title", { dir: "foo" }) });
- }, "The NotificationOptions dictionary only accepts valid NotificationDirection values.");
- 
-+promise_test(async function() {
-+    let notification = new Notification("test title", { data: { foo: 'bar' } });
-+    let data = notification.data;
-+    assert_equals(JSON.stringify(data), '{"foo":"bar"}')
-+    gc();
-+    await new Promise(resolve => setTimeout(resolve, 10));
-+    gc();
-+    await new Promise(resolve => setTimeout(resolve, 10));
-+    assert_equals(data, notification.data);
-+}, "The Notification data property returns the same object after GC.");
-+
- 
- 
- 
-diff --git a/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem-expected.txt b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem-expected.txt
-new file mode 100644
-index 0000000000000000000000000000000000000000..456519637146b5f1c37c871fea8c131d2d75671c
---- /dev/null
-+++ b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem-expected.txt
-@@ -0,0 +1,2 @@
-+ALERT: importScripts allowed
-+
-diff --git a/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem.html b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..b998922b191bce9a493393b12304f3c2b29d9957
---- /dev/null
-+++ b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-and-script-src-elem.html
-@@ -0,0 +1,28 @@
-+
-+
-+
-+
-+
-+
-+
-+
-+
-diff --git a/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report-expected.txt b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report-expected.txt
-new file mode 100644
-index 0000000000000000000000000000000000000000..ea2b07e103473e769b6a2e6c72601bbcf6914132
---- /dev/null
-+++ b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report-expected.txt
-@@ -0,0 +1,9 @@
-+CONSOLE MESSAGE: Refused to execute a script because it does not appear in the script-src directive of the Content Security Policy.
-+CSP report received:
-+CONTENT_TYPE: application/csp-report
-+HTTP_HOST: 127.0.0.1:8000
-+HTTP_REFERER: http://127.0.0.1:8000/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report.py
-+REQUEST_METHOD: POST
-+REQUEST_URI: /security/contentSecurityPolicy/resources/save-report.py
-+=== POST DATA ===
-+{"csp-report":{"document-uri":"http://127.0.0.1:8000/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report.py","referrer":"","violated-directive":"script-src-elem","effective-directive":"script-src-elem","original-policy":"script-src 'nonce-dummy' 'strict-dynamic'; report-uri resources/save-report.py","blocked-uri":"inline","status-code":200}}
-diff --git a/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report.py b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report.py
-new file mode 100755
-index 0000000000000000000000000000000000000000..42fae8b5eab443abba619e268aa7faa5b3181930
---- /dev/null
-+++ b/LayoutTests/http/tests/security/contentSecurityPolicy/script-src-strict-dynamic-inline-report.py
-@@ -0,0 +1,10 @@
-+#!/usr/bin/env python3
-+
-+import sys
-+
-+sys.stdout.write(
-+    "Content-Security-Policy: script-src 'nonce-dummy' 'strict-dynamic'; report-uri resources/save-report.py\r\n"
-+    'Content-Type: text/html\r\n\r\n'
-+    "\n"
-+    '\n'
-+)
-diff --git a/LayoutTests/http/tests/workers/service/getnotifications-expected.txt b/LayoutTests/http/tests/workers/service/getnotifications-expected.txt
-index 2ca25741b9987c9e1f22343fd0828ba783b2c4bf..e9e70eea9a606a3f7ccbcba9be59a2b557101e5b 100644
---- a/LayoutTests/http/tests/workers/service/getnotifications-expected.txt
-+++ b/LayoutTests/http/tests/workers/service/getnotifications-expected.txt
-@@ -15,32 +15,38 @@ There are 3 notifications
- Title: Hello
- Body: Body1
- Tag: tag-a
-+Data: null
- Title: There
- Body: Body2
- Tag: tag-b
-+Data: null
- Title: Buddy
- Body: Body3
- Tag: tag-b
-+Data: Data3
- 
- Got notifications
- There are 1 notifications
- Title: Hello
- Body: Body1
- Tag: tag-a
-+Data: null
- 
- Got notifications
- There are 2 notifications
- Title: There
- Body: Body2
- Tag: tag-b
-+Data: null
- Title: Buddy
- Body: Body3
- Tag: tag-b
-+Data: Data3
- 
- Retrieving notifications from page registration object - 3
--Notification: Hello / Body1 / tag-a
--Notification: There / Body2 / tag-b
--Notification: Buddy / Body3 / tag-b
-+Notification: Hello / Body1 / tag-a / null
-+Notification: There / Body2 / tag-b / null
-+Notification: Buddy / Body3 / tag-b / Data3
- Retrieving notifications from page registration object - end
- PASS successfullyParsed is true
- 
-diff --git a/LayoutTests/http/tests/workers/service/getnotifications-stop-expected.txt b/LayoutTests/http/tests/workers/service/getnotifications-stop-expected.txt
-index a6d85b371fd04fdb50787618386c7d61a3229df6..f21c9cc1e8cfceb7776df52dbb7aa3ed796d0f97 100644
---- a/LayoutTests/http/tests/workers/service/getnotifications-stop-expected.txt
-+++ b/LayoutTests/http/tests/workers/service/getnotifications-stop-expected.txt
-@@ -15,35 +15,41 @@ There are 3 notifications
- Title: Hello
- Body: Body1
- Tag: tag-a
-+Data: null
- Title: There
- Body: Body2
- Tag: tag-b
-+Data: null
- Title: Buddy
- Body: Body3
- Tag: tag-b
-+Data: Data3
- 
- Got notifications
- There are 1 notifications
- Title: Hello
- Body: Body1
- Tag: tag-a
-+Data: null
- 
- Got notifications
- There are 2 notifications
- Title: There
- Body: Body2
- Tag: tag-b
-+Data: null
- Title: Buddy
- Body: Body3
- Tag: tag-b
-+Data: Data3
- 
- Loading iframe
- Get notifications from iframe
- Remove iframes to stop notifications
- Retrieving notifications from page registration object - 3
--Notification: Hello / Body1 / tag-a
--Notification: There / Body2 / tag-b
--Notification: Buddy / Body3 / tag-b
-+Notification: Hello / Body1 / tag-a / null
-+Notification: There / Body2 / tag-b / null
-+Notification: Buddy / Body3 / tag-b / Data3
- Retrieving notifications from page registration object - end
- PASS successfullyParsed is true
- 
-diff --git a/LayoutTests/http/tests/workers/service/getnotifications-stop.html b/LayoutTests/http/tests/workers/service/getnotifications-stop.html
-index e71dde1d5da74d650ec70d5f89e30f3f9466d0e3..34cd6bf1cba1994c68fad9f4b7667a97c583d566 100644
---- a/LayoutTests/http/tests/workers/service/getnotifications-stop.html
-+++ b/LayoutTests/http/tests/workers/service/getnotifications-stop.html
-@@ -66,7 +66,7 @@ async function gotNotes(event)
-     if (numberGot == 1) {
-         event.source.postMessage("tryshow|Hello|Body1|tag-a");
-         event.source.postMessage("tryshow|There|Body2|tag-b");
--        event.source.postMessage("tryshow|Buddy|Body3|tag-b");
-+        event.source.postMessage("tryshow|Buddy|Body3|tag-b|Data3");
-     } else if (numberGot == 4) {
-         debug("Loading iframe");
-         const frame = await with_iframe("resources/getNotifications-iframe.html");
-@@ -79,7 +79,7 @@ async function gotNotes(event)
- 
-         debug("Retrieving notifications from page registration object - " + notifications.length);
-         notifications.forEach(notification => {
--            debug("Notification: " + notification.title + " / " + notification.body + " / " + notification.tag);
-+            debug("Notification: " + notification.title + " / " + notification.body + " / " + notification.tag + " / " + notification.data);
-         });    
-         debug("Retrieving notifications from page registration object - end");
- 
-diff --git a/LayoutTests/http/tests/workers/service/getnotifications.html b/LayoutTests/http/tests/workers/service/getnotifications.html
-index 34ef31ecd5ae3f1d2d80674d14b5079b8a18ffe8..8fdafbc832002547369c336ad703ed9bda6ad17d 100644
---- a/LayoutTests/http/tests/workers/service/getnotifications.html
-+++ b/LayoutTests/http/tests/workers/service/getnotifications.html
-@@ -56,12 +56,12 @@ async function gotNotes(event)
-     if (numberGot == 1) {
-         event.source.postMessage("tryshow|Hello|Body1|tag-a");
-         event.source.postMessage("tryshow|There|Body2|tag-b");
--        event.source.postMessage("tryshow|Buddy|Body3|tag-b");
-+        event.source.postMessage("tryshow|Buddy|Body3|tag-b|Data3");
-     } else if (numberGot == 4) {
-         const notifications = await registration.getNotifications({ tag: "" });
-         debug("Retrieving notifications from page registration object - " + notifications.length);
-         notifications.forEach(notification => {
--            debug("Notification: " + notification.title + " / " + notification.body + " / " + notification.tag);
-+            debug("Notification: " + notification.title + " / " + notification.body + " / " + notification.tag + " / " + notification.data);
-         });    
-         debug("Retrieving notifications from page registration object - end");
- 
-diff --git a/LayoutTests/http/tests/workers/service/openwindow-from-notification-click.html b/LayoutTests/http/tests/workers/service/openwindow-from-notification-click.html
-index 3c2cc7929c36d544418a772fbb83e51109df3d7b..681c0961cabb9395ad4b9efe3dd4c5eb06cfbfe8 100644
---- a/LayoutTests/http/tests/workers/service/openwindow-from-notification-click.html
-+++ b/LayoutTests/http/tests/workers/service/openwindow-from-notification-click.html
-@@ -37,7 +37,7 @@ async function registerServiceWorker() {
- 
-     installingWorker.addEventListener("statechange", () => {
-         if (installingWorker.state === "activated") {
--            installingWorker.postMessage("tryshow");
-+            installingWorker.postMessage("tryshow|title|body|tag|foobar");
-         }
-     });
- }
-@@ -55,7 +55,7 @@ navigator.serviceWorker.addEventListener('message', event => {
-     } else if (event.data == "shown") {
-         if (testRunner)
-             testRunner.simulateWebNotificationClickForServiceWorkerNotifications();
--    } else if (event.data == "clicked") {
-+    } else if (event.data == "clicked|data:foobar") {
-         shouldBeFalse("gotClicked");
-         shouldBeFalse("gotClosed");
-         gotClicked = true;
-diff --git a/LayoutTests/http/tests/workers/service/resources/shownotification-openwindow-worker.js b/LayoutTests/http/tests/workers/service/resources/shownotification-openwindow-worker.js
-index feb5d134dd530d9d0fb30d78bc8144aae1013286..1d3500877552e0f435ed8b004d4ec8b1ad21be9b 100644
---- a/LayoutTests/http/tests/workers/service/resources/shownotification-openwindow-worker.js
-+++ b/LayoutTests/http/tests/workers/service/resources/shownotification-openwindow-worker.js
-@@ -17,7 +17,7 @@ clients.openWindow('http://127.0.0.1:8000/workers/service/resources/openwindow-c
- });
- 
- self.addEventListener('notificationclick', async function(event) {
--    await messageClients("clicked");
-+    await messageClients("clicked|data:" + event.notification.data);
-     event.notification.close();
- 
-     // Should fail because about:blank is not an allowable URL
-@@ -49,21 +49,22 @@ self.addEventListener('notificationclose', async function(event) {
- 
- async function tryShow(message)
- {
--    var title, body, tag;
-+    var command, title, body, tag, data;
-     var components = message.split('|');
- 
-     if (components.length == 1) {
-         title = "This is a notification";        
--    } else {
--        title = components[1];
--        body = components[2];
--        tag = components[3];
-+    } else if (components.length == 4) {
-+        [command, title, body, tag] = components;
-+    } else if (components.length == 5) {
-+        [command, title, body, tag, data] = components;
-     }
-     
-     try {
-         await registration.showNotification(title, {
-             body: body,
--            tag: tag
-+            tag: tag,
-+            data: data
-         });
-     } catch(error) {
-         await messageClients("showFailed");
-@@ -93,6 +94,7 @@ async function getNotes(message)
-         reply += "Title: " + notification.title + "|";
-         reply += "Body: " + notification.body + "|";
-         reply += "Tag: " + notification.tag + "|";
-+        reply += "Data: " + notification.data + "|";
-     }
-     await messageClients(reply);
- }
-diff --git a/LayoutTests/http/tests/workers/service/resources/shownotification-worker.js b/LayoutTests/http/tests/workers/service/resources/shownotification-worker.js
-index 7e4692bae57d29010ac1b2b7ba3155535a485987..690469a32d8f90fa965a5b0960ec0d81f7b875af 100644
---- a/LayoutTests/http/tests/workers/service/resources/shownotification-worker.js
-+++ b/LayoutTests/http/tests/workers/service/resources/shownotification-worker.js
-@@ -9,7 +9,7 @@ let messageClients = async function(msg) {
- }
- 
- self.addEventListener('notificationclick', async function(event) {
--    await messageClients("clicked");
-+    await messageClients("clicked|data:" + event.notification.data);
-     event.notification.close();
- });
- 
-@@ -19,15 +19,15 @@ self.addEventListener('notificationclose', async function(event) {
- 
- async function tryShow(message)
- {
--    var title, body, tag;
-+    var command, title, body, tag, data;
-     var components = message.split('|');
- 
-     if (components.length == 1) {
-         title = "This is a notification";        
--    } else {
--        title = components[1];
--        body = components[2];
--        tag = components[3];
-+    } else if (components.length == 4) {
-+        [command, title, body, tag] = components;
-+    } else if (components.length == 5) {
-+        [command, title, body, tag, data] = components;
-     }
- 
-     if (!self.Notification) {
-@@ -37,7 +37,8 @@ async function tryShow(message)
-     try {
-          new Notification(title, {
-             body: body,
--            tag: tag
-+            tag: tag,
-+            data: data
-         });
-         await messageClients("showFailed due to Notification created from constructor");
-         return;
-@@ -51,7 +52,8 @@ async function tryShow(message)
-     try {
-         await registration.showNotification(title, {
-             body: body,
--            tag: tag
-+            tag: tag,
-+            data: data
-         });
-     } catch(error) {
-         await messageClients("showFailed");
-@@ -61,6 +63,21 @@ async function tryShow(message)
-     await messageClients("shown");
- }
- 
-+async function tryShowInvalidData()
-+{
-+    let error = null;
-+    try {
-+        await registration.showNotification("Invalid notification", { data: function() { } });
-+    } catch (e) {
-+        error = e;
-+    }
-+
-+    if (error)
-+        await messageClients("showFailed: threw " + error.name);
-+    else if (error0)
-+        await messageClients("shown");
-+}
-+
- var seenNotes = new Set();
- 
- async function getNotes(message)
-@@ -81,6 +98,7 @@ async function getNotes(message)
-         reply += "Title: " + notification.title + "|";
-         reply += "Body: " + notification.body + "|";
-         reply += "Tag: " + notification.tag + "|";
-+        reply += "Data: " + notification.data + "|";
-     }
-     await messageClients(reply);
- }
-@@ -89,6 +107,8 @@ self.addEventListener('message', async function(event) {
-     var messageName = event.data.split('|')[0];
-     if (messageName == "tryshow")
-         await tryShow(event.data);
-+    if (messageName == "tryshowinvaliddata")
-+        await tryShowInvalidData();
-     if (messageName == "getnotes")
-         await getNotes(event.data);
- });
-diff --git a/LayoutTests/http/tests/workers/service/shownotification-allowed-document-expected.txt b/LayoutTests/http/tests/workers/service/shownotification-allowed-document-expected.txt
-index 9018fcebf6732f78803b19165ad3bffd6d1c76da..7d7c66b3c2ba5443d9f1af7d85888b2843357ddd 100644
---- a/LayoutTests/http/tests/workers/service/shownotification-allowed-document-expected.txt
-+++ b/LayoutTests/http/tests/workers/service/shownotification-allowed-document-expected.txt
-@@ -4,6 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
- 
- 
- PASS Notification.permission is "granted"
-+PASS threwDataCloneError is true
- PASS gotClicked is false
- PASS gotClosed is false
- PASS gotClicked is true
-diff --git a/LayoutTests/http/tests/workers/service/shownotification-allowed-document.html b/LayoutTests/http/tests/workers/service/shownotification-allowed-document.html
-index 1f4328f400519e16384692f84e807e3b28e91042..5f9bb614ba4bf2d0dd6c458d2370f63c6bae2b8c 100644
---- a/LayoutTests/http/tests/workers/service/shownotification-allowed-document.html
-+++ b/LayoutTests/http/tests/workers/service/shownotification-allowed-document.html
-@@ -20,6 +20,8 @@ description("This tests that a notification shown by a service worker registrati
- 
- shouldBeEqualToString("Notification.permission", "granted");
- 
-+var threwDataCloneError = false;
-+
- async function registerServiceWorker() {
-     var registration = await navigator.serviceWorker.register('resources/shownotification-worker.js');
- 
-@@ -37,7 +39,14 @@ async function registerServiceWorker() {
- 
-     installingWorker.addEventListener("statechange", async () => {
-         if (installingWorker.state === "activated") {
--            await registration.showNotification("This is a notification", { body: "body", tag: "tag" });
-+            try {
-+                await registration.showNotification("Invalid notification", { data: function() { } });
-+            } catch (error) {
-+                threwDataCloneError = error.name == 'DataCloneError';
-+            }
-+            shouldBeTrue('threwDataCloneError');
-+
-+            await registration.showNotification("This is a notification", { body: "body", tag: "tag", data: "foobar" });
-             if (window.testRunner)
-                 testRunner.simulateWebNotificationClickForServiceWorkerNotifications();
-         }
-@@ -50,7 +59,7 @@ var gotClosed = false;
- navigator.serviceWorker.addEventListener('message', async event => {
-     if (event.data == "showFailed") {
-         failTheTest("Unexpectedly received the failed-to-show message");
--    } else if (event.data == "clicked") {
-+    } else if (event.data == "clicked|data:foobar") {
-         shouldBeFalse("gotClicked");
-         shouldBeFalse("gotClosed");
-         gotClicked = true;
-diff --git a/LayoutTests/http/tests/workers/service/shownotification-allowed.html b/LayoutTests/http/tests/workers/service/shownotification-allowed.html
-index 766abfee51ca3ad24cea8478f389beaada86ad1c..32df3586dcb5c6a3b91f3c6748708592f0525009 100644
---- a/LayoutTests/http/tests/workers/service/shownotification-allowed.html
-+++ b/LayoutTests/http/tests/workers/service/shownotification-allowed.html
-@@ -37,7 +37,7 @@ async function registerServiceWorker() {
- 
-     installingWorker.addEventListener("statechange", () => {
-         if (installingWorker.state === "activated") {
--            installingWorker.postMessage("tryshow");
-+            installingWorker.postMessage("tryshow|title|body|tag|foobar");
-         }
-     });
- }
-@@ -57,7 +57,7 @@ navigator.serviceWorker.addEventListener('message', async event => {
- 
-         if (testRunner)
-             testRunner.simulateWebNotificationClickForServiceWorkerNotifications();
--    } else if (event.data == "clicked") {
-+    } else if (event.data == "clicked|data:foobar") {
-         shouldBeFalse("gotClicked");
-         shouldBeFalse("gotClosed");
-         gotClicked = true;
-diff --git a/LayoutTests/http/tests/workers/service/shownotification-invalid-data-expected.txt b/LayoutTests/http/tests/workers/service/shownotification-invalid-data-expected.txt
-new file mode 100644
-index 0000000000000000000000000000000000000000..8ceac45ec73a5cc373bc950874087a51bffe6aed
---- /dev/null
-+++ b/LayoutTests/http/tests/workers/service/shownotification-invalid-data-expected.txt
-@@ -0,0 +1,11 @@
-+This tests that a notification shown by a service worker fails if it is passed an invalid data option
-+
-+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-+
-+
-+PASS Notification.permission is "granted"
-+PASS Notification constructor failed with DataCloneError
-+PASS successfullyParsed is true
-+
-+TEST COMPLETE
-+
-diff --git a/LayoutTests/http/tests/workers/service/shownotification-invalid-data.html b/LayoutTests/http/tests/workers/service/shownotification-invalid-data.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..31e83df4b3ba7bdc085514a7fe950cad7caab987
---- /dev/null
-+++ b/LayoutTests/http/tests/workers/service/shownotification-invalid-data.html
-@@ -0,0 +1,52 @@
-+
-+
-+
-+
-+
-+
-+
-diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog
-index 2d6b0b1c5bab266d8c91a0eb41d5915cd51caf48..e4d5d6965aaf7b9e5dbf570f080898058206ffce 100644
---- a/LayoutTests/imported/w3c/ChangeLog
-+++ b/LayoutTests/imported/w3c/ChangeLog
-@@ -1,3 +1,113 @@
-+2022-05-10  Tim Nguyen  
-+
-+        Fix inertness of pseudo-elements
-+        https://bugs.webkit.org/show_bug.cgi?id=239831
-+
-+        Reviewed by Antti Koivisto.
-+
-+        When we adjust style for a pseudo-element, `m_element` and `document().activeModalDialog()` are both null. So we accidentally reset inertness to false in those cases.
-+
-+        Fix this by making checking for m_element's existence too.
-+
-+        * web-platform-tests/inert/inert-pseudo-element-hittest-expected.txt: Added.
-+        * web-platform-tests/inert/inert-pseudo-element-hittest.html: Added.
-+
-+2022-05-09  Oriol Brufau  
-+
-+        [cssom] Don't index perspective/transform-origin-* in computed styles
-+        https://bugs.webkit.org/show_bug.cgi?id=239670
-+
-+        Reviewed by Darin Adler.
-+
-+        Update some test expectations.
-+
-+        Add serialize-all-longhands.html, it still fails due to
-+        https://webkit.org/b/239965 and https://webkit.org/b/239989.
-+
-+        * web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
-+        * web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt:
-+        * web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt:
-+        * web-platform-tests/css/cssom/serialize-all-longhands-expected.txt: Added.
-+        * web-platform-tests/css/cssom/serialize-all-longhands.html: Added.
-+
-+2022-05-09  Tim Nguyen  
-+
-+        Implement CSS :modal pseudo class
-+        https://bugs.webkit.org/show_bug.cgi?id=240109
-+
-+        Reviewed by Simon Fraser.
-+
-+        Add and extend tests for :modal pseudo-class.
-+
-+        * web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has-expected.txt: Added.
-+        * web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has.html: Added.
-+        * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-show-modal.html:
-+
-+2022-05-06  Rob Buis  
-+
-+        Use correct document as root for lazy image observer
-+        https://bugs.webkit.org/show_bug.cgi?id=240083
-+
-+        Reviewed by Simon Fraser.
-+
-+        Add a test for scrolling a lazy loaded image into view in an iframe.
-+
-+        * web-platform-tests/html/semantics/embedded-content/the-img-element/scrolling-below-viewport-image-lazy-loading-in-iframe-expected.txt: Added.
-+        * web-platform-tests/html/semantics/embedded-content/the-img-element/scrolling-below-viewport-image-lazy-loading-in-iframe.html: Added.
-+
-+2022-05-06  Manuel Rego Casasnovas  
-+
-+        [selectors] Double script focus after mouse click shouldn't match :focus-visible
-+        https://bugs.webkit.org/show_bug.cgi?id=239472
-+        
-+
-+        Reviewed by Antti Koivisto.
-+
-+        * web-platform-tests/css/selectors/focus-visible-script-focus-020-expected.txt: Added.
-+        * web-platform-tests/css/selectors/focus-visible-script-focus-020.html: Added.
-+
-+2022-05-05  Ben Nham  
-+        
-+        Add support for Notification objects with custom data
-+        https://bugs.webkit.org/show_bug.cgi?id=240153
-+
-+        Reviewed by Chris Dumez.
-+
-+        * web-platform-tests/notifications/idlharness.https.any-expected.txt:
-+        * web-platform-tests/notifications/idlharness.https.any.serviceworker-expected.txt:
-+        * web-platform-tests/wasm/serialization/module/serialization-via-notifications-api.any-expected.txt:
-+
-+2022-05-05  Manuel Rego Casasnovas  
-+
-+        ARIA reflection for Element attributes
-+        https://bugs.webkit.org/show_bug.cgi?id=239852
-+
-+        Reviewed by Chris Dumez.
-+
-+        Small fix on the test and update test results with the new PASS.
-+        Add new test case to cover elements moved to a different document.
-+
-+        * web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt:
-+        * web-platform-tests/dom/nodes/aria-element-reflection.tentative.html:
-+
-+2022-05-05  Ziran Sun  
-+
-+         should have box-sizing: border-box in UA stylesheet
-+        https://bugs.webkit.org/show_bug.cgi?id=197878
-+
-+        Reviewed by Tim Nguyen.
-+
-+        * web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt:
-+
-+2022-05-04  Ziran Sun  
-+
-+        [InputElement] Selection after type change needs to follow HTML specification
-+        https://bugs.webkit.org/show_bug.cgi?id=237361
-+
-+        Reviewed by Chris Dumez.
-+
-+        * web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra-expected.txt:
-+
- 2022-05-03  Youenn Fablet  
- 
-         ServiceWorkerRegistration update should fail if called from an installing service worker context
-diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
-index 6f720c9ae24e44987e21ee703b17dc42ef812c07..c5cec17b71a654e5705d975356a672889d1a7cc4 100644
---- a/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
-+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
-@@ -239,8 +239,7 @@ PASS page-break-before
- PASS page-break-inside
- PASS paint-order
- PASS perspective
--PASS perspective-origin-x
--PASS perspective-origin-y
-+PASS perspective-origin
- PASS pointer-events
- PASS position
- PASS print-color-adjust
-@@ -317,9 +316,7 @@ PASS top
- PASS touch-action
- PASS transform
- PASS transform-box
--PASS transform-origin-x
--PASS transform-origin-y
--PASS transform-origin-z
-+PASS transform-origin
- PASS transform-style
- PASS transition-delay
- PASS transition-duration
-diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt
-index c249e8d12c202b3326e730d6d20f0331a27b02e6..7abe10c543f7713fd5ce490b689400f3c30907c7 100644
---- a/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt
-+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt
-@@ -236,8 +236,7 @@ PASS page-break-before
- PASS page-break-inside
- PASS paint-order
- PASS perspective
--FAIL perspective-origin-x assert_not_equals: Should have the initial value. got disallowed value ""
--FAIL perspective-origin-y assert_not_equals: Should have the initial value. got disallowed value ""
-+PASS perspective-origin
- PASS pointer-events
- PASS position
- PASS print-color-adjust
-@@ -313,9 +312,7 @@ PASS top
- PASS touch-action
- PASS transform
- PASS transform-box
--FAIL transform-origin-x assert_not_equals: Should have the initial value. got disallowed value ""
--FAIL transform-origin-y assert_not_equals: Should have the initial value. got disallowed value ""
--FAIL transform-origin-z assert_not_equals: Should have the initial value. got disallowed value ""
-+PASS transform-origin
- PASS transform-style
- PASS transition-delay
- PASS transition-duration
-diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
-index c80c4e3d066218cd20fcf976e5beddc83fcdd9e7..f09204a710804df19b633aca6d6c5cbc5a25dcdc 100644
---- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
-+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
-@@ -1,8 +1,8 @@
- 
- PASS getComputedStyle returns no style for detached element
--FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 403
--FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 403
--FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 403
--FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 403
-+FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 400
-+FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 400
-+FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 400
-+FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 400
- PASS getComputedStyle returns no style for shadow tree outside of flattened tree
- 
-diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-all-longhands-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-all-longhands-expected.txt
-new file mode 100644
-index 0000000000000000000000000000000000000000..66ca461d4feee4aba36b1dff210df30c2c81ee6b
---- /dev/null
-+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-all-longhands-expected.txt
-@@ -0,0 +1,4 @@
-+
-+PASS Specified style
-+FAIL Computed style assert_array_equals: lengths differ, expected array [] length 0, got ["size", "-webkit-text-combine"] length 2
-+
-diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-all-longhands.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-all-longhands.html
-new file mode 100644
-index 0000000000000000000000000000000000000000..95204b63613cf73c1b1b146db6d96c874ca68e7d
---- /dev/null
-+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-all-longhands.html
-@@ -0,0 +1,36 @@
-+
-+
-+Serialize all longhands
-+
-+
-+
-+
-+
-+ -+ -+ -+ -diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-script-focus-020-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-script-focus-020-expected.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..bd57fa9c4fbb83f7bce3495d0a594e2146518e0e ---- /dev/null -+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-script-focus-020-expected.txt -@@ -0,0 +1,10 @@ -+This test checks that a double script focus after a mouse click on a focusable element that does not match :focus visible, does NOT match :focus-visible. -+ -+Click on the element that says "Click me". -+If the element that says "Focused" has a red outline then the test result is FAILURE, if it has a green background then the test result is SUCCESS. -+Click me -+Focused -+ -+PASS ":focus-visible" should be a valid selector -+PASS Double script focus after mouse click on a focusable element that does not match :focus-visible, does NOT match :focus-visible -+ -diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-script-focus-020.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-script-focus-020.html -new file mode 100644 -index 0000000000000000000000000000000000000000..eb68efc683012154e970117df9e04295933a97ed ---- /dev/null -+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-script-focus-020.html -@@ -0,0 +1,70 @@ -+ -+ -+CSS Test (Selectors): Double script focus after mouse click on a focusable element that does not match :focus-visible, does NOT match :focus-visible -+ -+ -+ -+ -+ -+ -+ -+ -+ -+

This test checks that a double script focus after a mouse click on a focusable element that does not match :focus visible, does NOT match :focus-visible.

-+
    -+
  1. Click on the element that says "Click me".
  2. -+
  3. If the element that says "Focused" has a red outline then the test result is FAILURE, if it has a green background then the test result is SUCCESS.
  4. -+
-+

Your user-agent does not support :focus-visible pseudo-class, please SKIP this test.

-+ -+
Click me
-+
Focused
-+ -+ -diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has-expected.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..2bf24feaeb5ebfdce9f18634f39cb5265eb540d2 ---- /dev/null -+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has-expected.txt -@@ -0,0 +1,6 @@ -+This is some text. -+ -+PASS :modal pseudo-class is not active with dialog.show() -+PASS :modal pseudo-class invalidation with showModal+close -+PASS :modal pseudo-class invalidation with showModal+remove -+ -diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has.html -new file mode 100644 -index 0000000000000000000000000000000000000000..9c487fba16fdad7d07dfc1b867dfddf7a4a021cb ---- /dev/null -+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/modal-pseudo-class-in-has.html -@@ -0,0 +1,44 @@ -+ -+ -+CSS Selectors Invalidation: :modal pseudo class in :has() -+ -+ -+ -+ -+ -+
-+ This is some text. -+ This is a dialog -+
-+ -\ No newline at end of file -diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt -index dca318b09853abba97d5df75bf343bc153587ac0..16780647167f46aa5d0cc1463a93e200a2cddcc1 100644 ---- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt -+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt -@@ -9,10 +9,7 @@ First description. - Second description. - Item 1 - Item 2 --Item 1 --Item 2 - Hello world! --I am an apple - I am a pear - I am a banana - Billing -@@ -47,17 +44,17 @@ Wonderful - Fantastic - - --FAIL aria-activedescendant element reflection assert_equals: invalid ID for relationship returns null expected (object) null but got (undefined) undefined --FAIL If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute. assert_equals: expected (object) Element node
Item 1
but got (undefined) undefined --FAIL Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string assert_true: expected true got false --FAIL Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed. assert_equals: expected (object) null but got (undefined) undefined --FAIL aria-errormessage assert_equals: expected (string) "errorMessage" but got (object) null -+PASS aria-activedescendant element reflection -+PASS If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute. -+PASS Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string -+PASS Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed. -+PASS aria-errormessage - FAIL aria-details assert_array_equals: value is undefined, expected array --FAIL Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale. assert_equals: expected (object) Element node
Item 1
but got (undefined) undefined --FAIL Changing the ID of an element causes the content attribute to become out of sync. assert_equals: expected (object) Element node
Item 1
but got (undefined) undefined --FAIL Reparenting an element into a descendant shadow scope hides the element reference. assert_equals: null before expected (object) null but got (undefined) undefined --FAIL Reparenting referenced element cannot cause retargeting of reference. assert_equals: expected (string) "apple" but got (object) null --FAIL Element reference set in invalid scope remains intact throughout move to valid scope. assert_equals: expected null but got Element node
-+PASS Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale. -+PASS Changing the ID of an element causes the content attribute to become out of sync. -+PASS Reparenting an element into a descendant shadow scope hides the element reference. -+PASS Reparenting referenced element cannot cause retargeting of reference. -+PASS Element reference set in invalid scope remains intact throughout move to valid scope. - FAIL aria-labelledby. assert_array_equals: parsed content attribute sets element references. value is undefined, expected array - FAIL aria-controls. assert_array_equals: value is undefined, expected array - FAIL aria-describedby. assert_array_equals: value is undefined, expected array -@@ -67,6 +64,7 @@ FAIL shadow DOM behaviour for FrozenArray element reflection. assert_array_equal - FAIL Moving explicitly set elements across shadow DOM boundaries. assert_equals: expected (string) "buttonDescription1 buttonDescription2" but got (object) null - FAIL Moving explicitly set elements around within the same scope, and removing from the DOM. assert_array_equals: aria-labeled by is supported by IDL getter. value is undefined, expected array - PASS Reparenting. --FAIL Attaching element reference before it's inserted into the DOM. assert_equals: Referenced element not inserted into document, so is in an invalid scope. expected null but got Element node --FAIL Cross-document references and moves. assert_equals: Cross-document is an invalid scope, so reference will not be visible. expected null but got Element node -+PASS Attaching element reference before it's inserted into the DOM. -+PASS Cross-document references and moves. -+PASS Adopting element keeps references. - -diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html -index 776fff314322b9004e1e6783c626c0356ca8f0a7..f748de1ec1f959ff8e345d3a9b53a00d37370185 100644 ---- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html -+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html -@@ -164,6 +164,7 @@ - - -+ -+ -+ - - - -diff --git a/LayoutTests/inspector/timeline/line-column-expected.txt b/LayoutTests/inspector/timeline/line-column-expected.txt -index bfcac989eac0fbd80e85acc63c4e7c286b87a385..5e4a858a49cfeda06f9fbbf84d1cf7f24eabd6ba 100644 ---- a/LayoutTests/inspector/timeline/line-column-expected.txt -+++ b/LayoutTests/inspector/timeline/line-column-expected.txt -@@ -64,7 +64,7 @@ PASS: Capturing started. - "functionName": "", - "url": "", - "scriptId": "", -- "lineNumber": 142, -+ "lineNumber": 141, - "columnNumber": 97 - } - ], -@@ -117,7 +117,7 @@ PASS: Capturing started. - "functionName": "", - "url": "", - "scriptId": "", -- "lineNumber": 142, -+ "lineNumber": 141, - "columnNumber": 97 - } - ], -@@ -177,7 +177,7 @@ PASS: Capturing started. - "functionName": "", - "url": "", - "scriptId": "", -- "lineNumber": 142, -+ "lineNumber": 141, - "columnNumber": 97 - } - ], -diff --git a/LayoutTests/media/airplay-wirelessvideoplaybackdisabled-expected.txt b/LayoutTests/media/airplay-wirelessvideoplaybackdisabled-expected.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..5d0e2fb4c5b042eac5aa8525258a5f9e854d06a1 ---- /dev/null -+++ b/LayoutTests/media/airplay-wirelessvideoplaybackdisabled-expected.txt -@@ -0,0 +1,19 @@ -+ -+Test that 'wirelessvideoplaybackdisabled' attribute is set correctly after removing the 'x-webkit-wirelessvideoplaybackdisabled' attribute. -+ -+Test a video element without a source. -+EXPECTED (video.hasAttribute("x-webkit-wirelessvideoplaybackdisabled") == 'true') OK -+EXPECTED (video.webkitWirelessVideoPlaybackDisabled == 'true') OK -+RUN(video.removeAttribute("x-webkit-wirelessvideoplaybackdisabled")) -+EXPECTED (video.hasAttribute("x-webkit-wirelessvideoplaybackdisabled") == 'false') OK -+EXPECTED (video.webkitWirelessVideoPlaybackDisabled == 'true') OK -+Test a video element with a source. -+EVENT(canplaythrough) -+RUN(video.setAttribute("x-webkit-wirelessvideoplaybackdisabled", "")) -+EXPECTED (video.hasAttribute("x-webkit-wirelessvideoplaybackdisabled") == 'true') OK -+EXPECTED (video.webkitWirelessVideoPlaybackDisabled == 'true') OK -+RUN(video.removeAttribute("x-webkit-wirelessvideoplaybackdisabled")) -+EXPECTED (video.hasAttribute("x-webkit-wirelessvideoplaybackdisabled") == 'false') OK -+EXPECTED (video.webkitWirelessVideoPlaybackDisabled == 'false') OK -+END OF TEST -+ -diff --git a/LayoutTests/media/airplay-wirelessvideoplaybackdisabled.html b/LayoutTests/media/airplay-wirelessvideoplaybackdisabled.html -new file mode 100644 -index 0000000000000000000000000000000000000000..d8757f7c52b4d7820451691756cb97ea82c1d20c ---- /dev/null -+++ b/LayoutTests/media/airplay-wirelessvideoplaybackdisabled.html -@@ -0,0 +1,53 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+

Test that 'wirelessvideoplaybackdisabled' attribute is set correctly after -+ removing the 'x-webkit-wirelessvideoplaybackdisabled' attribute.

-+ -+ -diff --git a/LayoutTests/media/media-source/content/test-xhe-aac-manifest.json b/LayoutTests/media/media-source/content/test-xhe-aac-manifest.json -new file mode 100644 -index 0000000000000000000000000000000000000000..ccbd0f4bb471d6d21e0006f2146b816768a8d26e ---- /dev/null -+++ b/LayoutTests/media/media-source/content/test-xhe-aac-manifest.json -@@ -0,0 +1,9 @@ -+{ -+ "url": "content/test-xhe-aac.m4a", -+ "type": "audio/mp4; codecs=\"mp4a.40.42\"", -+ "init": { "offset": 0, "size": 756 }, -+ "duration": 33.968, -+ "media": [ -+ { "offset": 756, "size": 280130, "timestamp": 0, "duration": 33.968 } -+ ] -+} -diff --git a/LayoutTests/media/media-source/content/test-xhe-aac.m4a b/LayoutTests/media/media-source/content/test-xhe-aac.m4a -new file mode 100644 -index 0000000000000000000000000000000000000000..d9d5876abc102c365798ecda1bf60362093a404b -Binary files /dev/null and b/LayoutTests/media/media-source/content/test-xhe-aac.m4a differ -diff --git a/LayoutTests/media/media-source/media-mp4-xhe-aac-expected.txt b/LayoutTests/media/media-source/media-mp4-xhe-aac-expected.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..61a93a45d63d8b3a369ab1b806857e6aaa363f1c ---- /dev/null -+++ b/LayoutTests/media/media-source/media-mp4-xhe-aac-expected.txt -@@ -0,0 +1,15 @@ -+ -+RUN(video.src = URL.createObjectURL(source)) -+EVENT(sourceopen) -+RUN(sourceBuffer = source.addSourceBuffer(loader.type())) -+RUN(sourceBuffer.appendBuffer(loader.initSegment())) -+EVENT(update) -+Append media segment. -+RUN(sourceBuffer.appendBuffer(loader.mediaSegment(0))) -+EVENT(update) -+RUN(video.currentTime = video.duration - 0.5) -+EVENT(seeked) -+RUN(video.play()) -+EVENT(ended) -+END OF TEST -+ -diff --git a/LayoutTests/media/media-source/media-mp4-xhe-aac.html b/LayoutTests/media/media-source/media-mp4-xhe-aac.html -new file mode 100644 -index 0000000000000000000000000000000000000000..7fbf8e2a65a62bf03997ad1fd1afc90518a58335 ---- /dev/null -+++ b/LayoutTests/media/media-source/media-mp4-xhe-aac.html -@@ -0,0 +1,53 @@ -+ -+ -+ -+ media-mp4-xhe-aac -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/LayoutTests/platform/glib/TestExpectations b/LayoutTests/platform/glib/TestExpectations -index 3314e7fc415d325f83a636753b7c763dc9a76fd4..ec0ca0e0f4a8de7276d8fb598f24ecfa34557fbf 100644 ---- a/LayoutTests/platform/glib/TestExpectations -+++ b/LayoutTests/platform/glib/TestExpectations -@@ -554,6 +554,9 @@ webkit.org/b/221308 [ Debug ] fast/selectors/is-backtracking.html [ Timeout ] - webkit.org/b/228920 imported/w3c/web-platform-tests/css/css-overflow/clip-006.html [ ImageOnlyFailure ] - webkit.org/b/228920 imported/w3c/web-platform-tests/css/css-overflow/clip-007.html [ ImageOnlyFailure ] - -+webkit.org/b/209080 imported/w3c/web-platform-tests/css/css-writing-modes/line-box-height-vlr-011.xht [ ImageOnlyFailure ] -+webkit.org/b/209080 imported/w3c/web-platform-tests/css/css-writing-modes/line-box-height-vlr-013.xht [ ImageOnlyFailure ] -+ - webkit.org/b/229389 imported/w3c/web-platform-tests/css/css-text/white-space/control-chars-001.html [ ImageOnlyFailure ] - webkit.org/b/229389 imported/w3c/web-platform-tests/css/css-text/white-space/control-chars-002.html [ ImageOnlyFailure ] - webkit.org/b/229389 imported/w3c/web-platform-tests/css/css-text/white-space/control-chars-003.html [ ImageOnlyFailure ] -@@ -781,9 +784,6 @@ webkit.org/b/213699 imported/w3c/web-platform-tests/mediacapture-record/MediaRec - webkit.org/b/230415 fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event.html [ Timeout ] - webkit.org/b/79203 fast/mediastream/RTCRtpSender-replaceTrack.html [ Failure ] - webkit.org/b/187603 fast/mediastream/media-stream-track-source-failure.html [ Timeout Failure Pass ] --fast/mediastream/media-stream-video-track-interrupted-from-audio.html [ Failure ] --fast/mediastream/media-stream-track-interrupted.html [ Failure ] --fast/mediastream/track-ended-while-muted.html [ Failure ] - - webkit.org/b/223508 imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Failure Pass ] - -@@ -1297,6 +1297,8 @@ webkit.org/b/234118 imported/mozilla/svg/image/image-filter-01.svg [ ImageOnlyFa - webkit.org/b/234118 svg/custom/filter-update-different-root.html [ ImageOnlyFailure ] - webkit.org/b/234118 svg/filters/color-space-conversion.svg [ ImageOnlyFailure ] - webkit.org/b/234118 svg/filters/container-with-filters.svg [ ImageOnlyFailure ] -+webkit.org/b/234118 imported/w3c/web-platform-tests/css/filter-effects/css-filters-animation-opacity.html [ ImageOnlyFailure ] -+webkit.org/b/234118 imported/w3c/web-platform-tests/css/filter-effects/effect-reference-on-span.html [ ImageOnlyFailure ] - webkit.org/b/234118 imported/w3c/web-platform-tests/css/filter-effects/morphology-mirrored.html [ ImageOnlyFailure ] - webkit.org/b/234118 imported/w3c/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html [ ImageOnlyFailure ] - webkit.org/b/234118 imported/w3c/web-platform-tests/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html [ ImageOnlyFailure ] -diff --git a/LayoutTests/platform/glib/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt b/LayoutTests/platform/glib/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt -index 1f959a2df3381d8d72c342ca7b029605f3b20a95..c13139b54111bb417cad14022f6bd93df831c528 100644 ---- a/LayoutTests/platform/glib/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt -+++ b/LayoutTests/platform/glib/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt -@@ -134,7 +134,7 @@ PASS - text-indent - PASS - text-shadow - PASS - text-align - PASS - display --FAIL - box-sizing assert_equals: expected "border-box" but got "content-box" -+PASS - box-sizing - PASS - letter-spacing - PASS - word-spacing - PASS - line-height -diff --git a/LayoutTests/platform/gtk/TestExpectations b/LayoutTests/platform/gtk/TestExpectations -index 7e363ca12d671306bb9bc395860bb526b64463ad..8cdc44ea7f593adb262d5dfabd4aff025b401d1f 100644 ---- a/LayoutTests/platform/gtk/TestExpectations -+++ b/LayoutTests/platform/gtk/TestExpectations -@@ -906,6 +906,9 @@ webkit.org/b/236298 imported/w3c/web-platform-tests/css/css-pseudo/first-letter- - webkit.org/b/236298 imported/w3c/web-platform-tests/css/css-ui/text-overflow-012.html [ ImageOnlyFailure ] - webkit.org/b/236298 imported/w3c/web-platform-tests/css/css-ui/text-overflow-022.html [ ImageOnlyFailure ] - -+# Requires support for xHE-HAAC audio codec -+webkit.org/b/239750 media/media-source/media-mp4-xhe-aac.html [ Skip ] -+ - #//////////////////////////////////////////////////////////////////////////////////////// - # End of Expected failures. - #//////////////////////////////////////////////////////////////////////////////////////// -@@ -1852,6 +1855,9 @@ webkit.org/b/160119 fast/repaint/selection-gap-flipped-fixed-child.html [ Failur - # UNSORTED Expectations. When in doubt, put it here. - #//////////////////////////////////////////////////////////////////////////////////////// - -+webkit.org/b/240270 imported/w3c/web-platform-tests/css/motion/offset-rotate-001.html [ ImageOnlyFailure ] -+webkit.org/b/240270 imported/w3c/web-platform-tests/css/motion/offset-rotate-002.html [ ImageOnlyFailure ] -+ - accessibility/dialog-properties.html [ Skip ] - accessibility/ignored-aria-role-description.html [ Skip ] - -diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt -index 7e29a476c6a5ea387c6d633bcd34d082f0b7165e..90eac7e1a8249243739a2a233fb3ef8c7a9827e4 100644 ---- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt -+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt -@@ -239,8 +239,7 @@ PASS page-break-before - PASS page-break-inside - PASS paint-order - PASS perspective --PASS perspective-origin-x --PASS perspective-origin-y -+PASS perspective-origin - PASS pointer-events - PASS position - PASS print-color-adjust -@@ -317,9 +316,7 @@ PASS top - PASS touch-action - PASS transform - PASS transform-box --PASS transform-origin-x --PASS transform-origin-y --PASS transform-origin-z -+PASS transform-origin - PASS transform-style - PASS transition-delay - PASS transition-duration -diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt -index ab9f673a5ee50378c49ea5010c0d514ff163d70a..a2b849edc44b5d49b130753b91fb73054c3264bf 100644 ---- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt -+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt -@@ -1,8 +1,8 @@ - - PASS getComputedStyle returns no style for detached element --FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 401 --FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 401 --FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 401 --FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 401 -+FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 398 -+FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 398 -+FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 398 -+FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 398 - PASS getComputedStyle returns no style for shadow tree outside of flattened tree - -diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt -index a2456742781fddada3ca8456b29401e8b6c7a442..cf78552949818c2f67691b2442a02231c7175d54 100644 ---- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt -+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt -@@ -1,10 +1,10 @@ - --FAIL change state from hidden to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from hidden to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from hidden to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from hidden to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from hidden to text -+PASS change state from hidden to search -+PASS change state from hidden to tel -+PASS change state from hidden to url - PASS change state from hidden to email --FAIL change state from hidden to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from hidden to password - PASS change state from hidden to datetime-local - PASS change state from hidden to date - PASS change state from hidden to month -@@ -105,11 +105,11 @@ PASS change state from url to image - PASS change state from url to reset - PASS change state from url to button - PASS change state from email to hidden --FAIL change state from email to text assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to search assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to tel assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to url assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to password assert_equals: selectionStart should be 0 expected 0 but got 6 -+PASS change state from email to text -+PASS change state from email to search -+PASS change state from email to tel -+PASS change state from email to url -+PASS change state from email to password - PASS change state from email to datetime-local - PASS change state from email to date - PASS change state from email to month -@@ -147,12 +147,12 @@ PASS change state from password to image - PASS change state from password to reset - PASS change state from password to button - PASS change state from datetime-local to hidden --FAIL change state from datetime-local to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from datetime-local to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from datetime-local to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from datetime-local to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from datetime-local to text -+PASS change state from datetime-local to search -+PASS change state from datetime-local to tel -+PASS change state from datetime-local to url - PASS change state from datetime-local to email --FAIL change state from datetime-local to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from datetime-local to password - PASS change state from datetime-local to date - PASS change state from datetime-local to month - PASS change state from datetime-local to week -@@ -168,12 +168,12 @@ PASS change state from datetime-local to image - PASS change state from datetime-local to reset - PASS change state from datetime-local to button - PASS change state from date to hidden --FAIL change state from date to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from date to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from date to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from date to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from date to text -+PASS change state from date to search -+PASS change state from date to tel -+PASS change state from date to url - PASS change state from date to email --FAIL change state from date to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from date to password - PASS change state from date to datetime-local - PASS change state from date to month - PASS change state from date to week -@@ -189,12 +189,12 @@ PASS change state from date to image - PASS change state from date to reset - PASS change state from date to button - PASS change state from month to hidden --FAIL change state from month to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from month to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from month to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from month to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from month to text -+PASS change state from month to search -+PASS change state from month to tel -+PASS change state from month to url - PASS change state from month to email --FAIL change state from month to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from month to password - PASS change state from month to datetime-local - PASS change state from month to date - PASS change state from month to week -@@ -210,12 +210,12 @@ PASS change state from month to image - PASS change state from month to reset - PASS change state from month to button - PASS change state from week to hidden --FAIL change state from week to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from week to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from week to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from week to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from week to text -+PASS change state from week to search -+PASS change state from week to tel -+PASS change state from week to url - PASS change state from week to email --FAIL change state from week to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from week to password - PASS change state from week to datetime-local - PASS change state from week to date - PASS change state from week to month -@@ -231,12 +231,12 @@ PASS change state from week to image - PASS change state from week to reset - PASS change state from week to button - PASS change state from time to hidden --FAIL change state from time to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from time to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from time to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from time to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from time to text -+PASS change state from time to search -+PASS change state from time to tel -+PASS change state from time to url - PASS change state from time to email --FAIL change state from time to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from time to password - PASS change state from time to datetime-local - PASS change state from time to date - PASS change state from time to month -@@ -273,12 +273,12 @@ PASS change state from number to image - PASS change state from number to reset - PASS change state from number to button - PASS change state from range to hidden --FAIL change state from range to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from range to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from range to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from range to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from range to text -+PASS change state from range to search -+PASS change state from range to tel -+PASS change state from range to url - PASS change state from range to email --FAIL change state from range to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from range to password - PASS change state from range to datetime-local - PASS change state from range to date - PASS change state from range to month -@@ -294,12 +294,12 @@ PASS change state from range to image - PASS change state from range to reset - PASS change state from range to button - PASS change state from color to hidden --FAIL change state from color to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from color to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from color to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from color to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from color to text -+PASS change state from color to search -+PASS change state from color to tel -+PASS change state from color to url - PASS change state from color to email --FAIL change state from color to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from color to password - PASS change state from color to datetime-local - PASS change state from color to date - PASS change state from color to month -@@ -315,12 +315,12 @@ PASS change state from color to image - PASS change state from color to reset - PASS change state from color to button - PASS change state from checkbox to hidden --FAIL change state from checkbox to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from checkbox to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from checkbox to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from checkbox to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from checkbox to text -+PASS change state from checkbox to search -+PASS change state from checkbox to tel -+PASS change state from checkbox to url - PASS change state from checkbox to email --FAIL change state from checkbox to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from checkbox to password - PASS change state from checkbox to datetime-local - PASS change state from checkbox to date - PASS change state from checkbox to month -@@ -336,12 +336,12 @@ PASS change state from checkbox to image - PASS change state from checkbox to reset - PASS change state from checkbox to button - PASS change state from radio to hidden --FAIL change state from radio to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from radio to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from radio to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from radio to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from radio to text -+PASS change state from radio to search -+PASS change state from radio to tel -+PASS change state from radio to url - PASS change state from radio to email --FAIL change state from radio to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from radio to password - PASS change state from radio to datetime-local - PASS change state from radio to date - PASS change state from radio to month -@@ -378,12 +378,12 @@ PASS change state from file to image - PASS change state from file to reset - PASS change state from file to button - PASS change state from submit to hidden --FAIL change state from submit to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from submit to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from submit to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from submit to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from submit to text -+PASS change state from submit to search -+PASS change state from submit to tel -+PASS change state from submit to url - PASS change state from submit to email --FAIL change state from submit to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from submit to password - PASS change state from submit to datetime-local - PASS change state from submit to date - PASS change state from submit to month -@@ -399,12 +399,12 @@ PASS change state from submit to image - PASS change state from submit to reset - PASS change state from submit to button - PASS change state from image to hidden --FAIL change state from image to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from image to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from image to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from image to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from image to text -+PASS change state from image to search -+PASS change state from image to tel -+PASS change state from image to url - PASS change state from image to email --FAIL change state from image to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from image to password - PASS change state from image to datetime-local - PASS change state from image to date - PASS change state from image to month -@@ -420,12 +420,12 @@ PASS change state from image to submit - PASS change state from image to reset - PASS change state from image to button - PASS change state from reset to hidden --FAIL change state from reset to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from reset to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from reset to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from reset to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from reset to text -+PASS change state from reset to search -+PASS change state from reset to tel -+PASS change state from reset to url - PASS change state from reset to email --FAIL change state from reset to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from reset to password - PASS change state from reset to datetime-local - PASS change state from reset to date - PASS change state from reset to month -@@ -441,12 +441,12 @@ PASS change state from reset to submit - PASS change state from reset to image - PASS change state from reset to button - PASS change state from button to hidden --FAIL change state from button to text assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from button to search assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from button to tel assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" --FAIL change state from button to url assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from button to text -+PASS change state from button to search -+PASS change state from button to tel -+PASS change state from button to url - PASS change state from button to email --FAIL change state from button to password assert_equals: selectionDirection should be '{noneDirectionResult}' expected "none" but got "forward" -+PASS change state from button to password - PASS change state from button to datetime-local - PASS change state from button to date - PASS change state from button to month -diff --git a/LayoutTests/platform/gtk/inspector/timeline/line-column-expected.txt b/LayoutTests/platform/gtk/inspector/timeline/line-column-expected.txt -index 25f930e2921f889c16477fbfa102a2d1c7677680..c962d68101cf47315d5e01dc3f0d3fe359d62547 100644 ---- a/LayoutTests/platform/gtk/inspector/timeline/line-column-expected.txt -+++ b/LayoutTests/platform/gtk/inspector/timeline/line-column-expected.txt -@@ -60,7 +60,7 @@ PASS: Capturing started. - "functionName": "", - "url": "", - "scriptId": "", -- "lineNumber": 142, -+ "lineNumber": 141, - "columnNumber": 97 - } - ], -@@ -113,7 +113,7 @@ PASS: Capturing started. - "functionName": "", - "url": "", - "scriptId": "", -- "lineNumber": 142, -+ "lineNumber": 141, - "columnNumber": 97 - } - ], -@@ -165,7 +165,7 @@ PASS: Capturing started. - "functionName": "", - "url": "", - "scriptId": "", -- "lineNumber": 142, -+ "lineNumber": 141, - "columnNumber": 97 - } - ], -diff --git a/LayoutTests/platform/ios-wk2/TestExpectations b/LayoutTests/platform/ios-wk2/TestExpectations -index d85b883d3f5a85792d166b1275e6833a52567b41..8a9e47f716986b38c13ffe77d6787fa1047c6feb 100644 ---- a/LayoutTests/platform/ios-wk2/TestExpectations -+++ b/LayoutTests/platform/ios-wk2/TestExpectations -@@ -1196,9 +1196,6 @@ webkit.org/b/165344 [ Release ] http/tests/security/module-incorrect-mime-types. - - webkit.org/b/162685 [ Release ] http/tests/cache/disk-cache/disk-cache-204-status-code.html [ Pass Failure ] - --# Hover test does not apply --fast/css/deferred-parsing/hover-test.html [ Skip ] -- - # Skipped because there is no key to show the context menu - fast/events/context-activated-by-key-event.html [ Skip ] - -diff --git a/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt b/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt -index 786e77f1d6a0c4a5dcf6dedb55ca81dcc4573512..cf78552949818c2f67691b2442a02231c7175d54 100644 ---- a/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt -+++ b/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt -@@ -105,11 +105,11 @@ PASS change state from url to image - PASS change state from url to reset - PASS change state from url to button - PASS change state from email to hidden --FAIL change state from email to text assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to search assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to tel assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to url assert_equals: selectionStart should be 0 expected 0 but got 6 --FAIL change state from email to password assert_equals: selectionStart should be 0 expected 0 but got 6 -+PASS change state from email to text -+PASS change state from email to search -+PASS change state from email to tel -+PASS change state from email to url -+PASS change state from email to password - PASS change state from email to datetime-local - PASS change state from email to date - PASS change state from email to month -diff --git a/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-pseudo-element-hittest-expected.txt b/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-pseudo-element-hittest-expected.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..d804e22be80d36163473f2761153e38b6f6c675e ---- /dev/null -+++ b/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-pseudo-element-hittest-expected.txt -@@ -0,0 +1,6 @@ -+Manual test: hover the green square, pass if it does not turn red. -+ -+ -+PASS Hit-testing cannot reach pseudo elements of inert nodes -+FAIL Hit-testing can reach pseudo elements of non-inert nodes assert_array_equals: target got all events lengths differ, expected array ["mousedown", "mouseenter", "mousemove", "mouseover", "pointerdown", "pointerenter", "pointermove", "pointerover"] length 8, got [] length 0 -+ -diff --git a/LayoutTests/platform/ios/TestExpectations b/LayoutTests/platform/ios/TestExpectations -index e8476ce1b9fc3e6bed200cccd6445fdae77fa47d..1322ec3aa782f2c39e00f0432a3865d2f89834d0 100644 ---- a/LayoutTests/platform/ios/TestExpectations -+++ b/LayoutTests/platform/ios/TestExpectations -@@ -39,6 +39,7 @@ fast/forms/ios/ipad/open-picker-using-keyboard.html [ Pass Timeout ] - fast/css/appearance-apple-pay-button.html [ Pass ] - fast/css/appearance-apple-pay-button-border-radius.html [ Pass ] - fast/css/appearance-apple-pay-button-border-radius-longhands.html [ Pass ] -+fast/css/appearance-apple-pay-button-border-width.html [ Pass ] - fast/css/appearance-apple-pay-button-default-corners.html [ Pass ] - fast/css/webkit-named-image/apple-pay-logo-black [ Pass ] - fast/css/webkit-named-image/apple-pay-logo-white [ Pass ] -@@ -2462,8 +2463,6 @@ fast/selectors/040.html - - webkit.org/b/165691 http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-iframe-in-main-frame.html [ Pass Failure ] - --fast/css/deferred-parsing/hover-test.html [ Skip ] -- - # Form validation popover does not obey minimum font size setting on iOS but Dynamic Type instead. - fast/forms/validation-message-minimum-font-size.html [ Skip ] - -@@ -3450,7 +3449,6 @@ model-element/model-element-inline-preview-deletion-upon-source-change.html [ Sk - - # webkit.org/b/201982 These are flaky failures on iOS - fast/images/exif-orientation-svg-feimage.html [ Pass Failure ] --fast/images/exif-orientation-background-image-repeat.html [ Pass Failure ] - fast/images/image-orientation-dynamic-from-image.html [ Pass Failure ] - fast/images/image-orientation-none.html [ Pass Failure ] - -@@ -3593,6 +3591,23 @@ webkit.org/b/239567 tables/mozilla/bugs/bug26178.html [ Pass Failure ] - # iOS has a WebGPU implementation. - http/tests/webgpu [ Pass ] - --webkit.org/b/240024 http/tests/quicklook/same-origin-xmlhttprequest-allowed.html [ Pass Failure Crash ] -+webkit.org/b/240037 css3/background/background-repeat-space-content.html [ Pass ImageOnlyFailure ] -+ -+webkit.org/b/240069 fast/css/continuationCrash.html [ Pass Failure ] -+ -+webkit.org/b/240074 imported/w3c/web-platform-tests/service-workers/service-worker/registration-updateviacache.https.html [ Pass Failure ] -+ -+webkit.org/b/237552 imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/same-hash.html [ Pass Failure ] -+ -+webkit.org/b/240081 webaudio/AudioBuffer/huge-buffer.html [ Pass Timeout ] -+ -+webkit.org/b/240104 fast/text/international/system-language/navigator-language/navigator-language-fr.html [ Pass Failure ] -+ -+webkit.org/b/240123 imported/w3c/web-platform-tests/webrtc/protocol/rtp-clockrate.html [ Pass Failure ] -+ -+webkit.org/b/239568 imported/w3c/web-platform-tests/content-security-policy/inheritance/blob-url-in-main-window-self-navigate-inherits.sub.html [ Pass Failure ] -+ -+webkit.org/b/240148 fast/images/exif-orientation-background-image-repeat.html [ Pass Failure ImageOnlyFailure ] -+ -+webkit.org/b/240167 [ Release ] fast/css-custom-paint/animate-repaint.html [ Pass Failure ] - --webkit.org/b/240037 css3/background/background-repeat-space-content.html [ Pass ImageOnlyFailure ] -\ No newline at end of file -diff --git a/LayoutTests/platform/ios/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt b/LayoutTests/platform/ios/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt -index 9ed6dfbe889d1503ed8dd35b542382f8a40bbc9c..a3e83f18f2a67f93110dc01174282a3451419f87 100644 ---- a/LayoutTests/platform/ios/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt -+++ b/LayoutTests/platform/ios/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt -@@ -1,6 +1,6 @@ - layer at (0,0) size 800x600 - RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -+layer at (0,0) size 800x600 isolatesBlending - RenderBlock {HTML} at (0,0) size 800x600 - RenderBody {BODY} at (8,8) size 784x584 - RenderBlock {P} at (0,0) size 784x20 -@@ -8,21 +8,21 @@ layer at (0,0) size 800x600 - text run at (0,0) width 503: "This tests that the AutoFill button renders. It can only be tested in the test tool." - RenderBlock {DIV} at (0,36) size 784x25 - RenderTextControl {INPUT} at (2,2) size 155x22 [bgcolor=#FFFFFF] [border: (1px solid #3C3C4399)] -- RenderFlexibleBox {DIV} at (6,3) size 143x15 -- RenderBlock {DIV} at (0,0) size 115x14 -- RenderText {#text} at (158,1) size 5x19 -- text run at (158,1) width 5: " " -+ RenderFlexibleBox {DIV} at (6,-1) size 143x22 -+ RenderBlock {DIV} at (0,3) size 115x15 -+ RenderText {#text} at (158,0) size 5x19 -+ text run at (158,0) width 5: " " - RenderTextControl {INPUT} at (164,2) size 156x22 [bgcolor=#FFFFFF] [border: (1px solid #3C3C4399)] -- RenderFlexibleBox {DIV} at (6,3) size 143x15 -- RenderBlock {DIV} at (0,0) size 115x14 -- RenderText {#text} at (321,1) size 5x19 -- text run at (321,1) width 5: " " -+ RenderFlexibleBox {DIV} at (6,-1) size 143x22 -+ RenderBlock {DIV} at (0,3) size 115x15 -+ RenderText {#text} at (321,0) size 5x19 -+ text run at (321,0) width 5: " " - RenderTextControl {INPUT} at (327,2) size 156x22 [bgcolor=#FFFFFF] [border: (1px solid #3C3C4399)] -- RenderFlexibleBox {DIV} at (6,3) size 143x15 -- RenderBlock {DIV} at (0,0) size 115x14 -+ RenderFlexibleBox {DIV} at (6,-1) size 143x22 -+ RenderBlock {DIV} at (0,3) size 115x15 - RenderTextControl {INPUT} at (486,2) size 156x22 [bgcolor=#FFFFFF] [border: (1px solid #3C3C4399)] -- RenderFlexibleBox {DIV} at (6,3) size 143x15 -- RenderBlock {DIV} at (0,0) size 115x14 -+ RenderFlexibleBox {DIV} at (6,-1) size 143x22 -+ RenderBlock {DIV} at (0,3) size 115x15 - layer at (17,49) size 115x14 backgroundClip at (17,49) size 114x14 clip at (17,49) size 114x14 - RenderBlock {DIV} at (0,0) size 115x14 - layer at (179,49) size 115x14 -@@ -31,11 +31,11 @@ layer at (342,49) size 115x14 - RenderBlock {DIV} at (0,0) size 115x14 - layer at (501,49) size 115x14 - RenderBlock {DIV} at (0,0) size 115x14 --layer at (134,50) size 22x12 -- RenderBlock {DIV} at (117,1) size 23x12 [bgcolor=#000000] --layer at (297,50) size 22x12 -- RenderBlock {DIV} at (117,1) size 23x12 [bgcolor=#000000] --layer at (460,50) size 22x12 -- RenderBlock {DIV} at (117,1) size 23x12 [bgcolor=#000000] --layer at (619,50) size 22x12 -- RenderBlock {DIV} at (117,1) size 23x12 [bgcolor=#000000] -+layer at (133,44) size 24x24 blendMode: luminosity -+ RenderBlock {DIV} at (116,-2) size 25x25 -+layer at (296,44) size 24x24 blendMode: luminosity -+ RenderBlock {DIV} at (116,-2) size 25x25 -+layer at (459,44) size 24x24 blendMode: luminosity -+ RenderBlock {DIV} at (116,-2) size 25x25 -+layer at (618,44) size 24x24 blendMode: luminosity -+ RenderBlock {DIV} at (116,-2) size 25x25 -diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt -index 4e2222745a0317185c7a075052a98621821f6d90..5046ae951de6ca87f31f320818ea3ef3b13be54e 100644 ---- a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt -+++ b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt -@@ -1,8 +1,8 @@ - - PASS getComputedStyle returns no style for detached element --FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 405 --FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 405 --FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 405 --FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 405 -+FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 402 -+FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 402 -+FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 402 -+FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 402 - PASS getComputedStyle returns no style for shadow tree outside of flattened tree - -diff --git a/LayoutTests/platform/mac-catalina-wk1/TestExpectations b/LayoutTests/platform/mac-catalina-wk1/TestExpectations -deleted file mode 100644 -index 741dbd39cc25f675d1b7545d5475420d2c4add50..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/TestExpectations -+++ /dev/null -@@ -1,5 +0,0 @@ --# This file should contain entries for expectations that are specific --# to the Apple Mac Catalina port running WebKit1 (DumpRenderTree) -- --imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html [ Skip ] --imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-pause-resume.tentative.html [ Skip ] -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/anchor-element-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/anchor-element-expected.txt -deleted file mode 100644 -index 2f87aeecb27cf8d26b8bd7fe164e7856e3ed74fe..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/anchor-element-expected.txt -+++ /dev/null -@@ -1,39 +0,0 @@ --Input: --webkit.org -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[webkit.org] -- NSColor: #0000ee (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSLink: https://webkit.org/ -- NSStrokeColor: #0000ee (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attrib-string-colors-with-color-filter-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attrib-string-colors-with-color-filter-expected.txt -deleted file mode 100644 -index 7cbb6cc2fa0b71f7b167fc7f6b51d64a1423395e..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attrib-string-colors-with-color-filter-expected.txt -+++ /dev/null -@@ -1,53 +0,0 @@ --Input: --
-- This text is blue -- This text is yellow --
-- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[This text is blue] -- NSBackgroundColor: #eeeeee (sRGB) -- NSColor: #0000ff (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #0000ff (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[This text is yellow] -- NSBackgroundColor: #800000 (sRGB) -- NSColor: #ffff00 (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #ffff00 (sRGB) -- NSStrokeWidth: 0 --[\n] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attribute-string-for-copy-with-color-filter-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attribute-string-for-copy-with-color-filter-expected.txt -deleted file mode 100644 -index 097d66ec14dd212ab954e6c244d5c8dd3aae7faa..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attribute-string-for-copy-with-color-filter-expected.txt -+++ /dev/null -@@ -1,32 +0,0 @@ --Test that an NSAttributedString for copy doesn't convert colors through -apple-color-filter. -- --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[is] -- NSBackgroundColor: #336699 (sRGB) -- NSColor: #cccccc (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #cccccc (sRGB) -- NSStrokeWidth: 0 -- -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-1-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-1-expected.txt -deleted file mode 100644 -index 2bc77aa545b342090fa5815d1690a7817cff17c5..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-1-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --Input: --hello <#shadow-start> WebKit<#shadow-end>world rocks -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello world WebKit rocks] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-2-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-2-expected.txt -deleted file mode 100644 -index d9defa7508f6162244e27ecebc7936068092d2d6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-2-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --Input: --hello <#shadow-start> WebKit<#shadow-end><#start>world rocks<#end> -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[world WebKit rocks] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-3-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-3-expected.txt -deleted file mode 100644 -index e777151915d22bc38675034009a2da545fd93c3f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-3-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --Input: --<#shadow-start>hello <#shadow-end><#start>world WebKit rocks<#end> -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[world WebKit rocks] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-4-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-4-expected.txt -deleted file mode 100644 -index 0ab7f8a6ab5fd18bbba8f8266b328477e0c37251..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-4-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --Input: --<#shadow-start><#start>hello <#shadow-end>world Web<#end>Kit rocks -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello world Web] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-5-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-5-expected.txt -deleted file mode 100644 -index 7308e5b3af09dc2c4f5b34b5bd772925f51b31e1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-5-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --Input: --<#start><#shadow-start>hello <#shadow-end>world WebKit<#end> -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello world WebKit] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-1-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-1-expected.txt -deleted file mode 100644 -index 89d42aed7ef8faa6b81138a6b5c080beb9482a14..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-1-expected.txt -+++ /dev/null -@@ -1,42 +0,0 @@ --Input: --<#start>hello <#shadow-start> Web<#end>Kit<#shadow-end>world rocks -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello ] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[world] -- NSColor: #0000ff (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #0000ff (sRGB) -- NSStrokeWidth: 0 --[ Web] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-2-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-2-expected.txt -deleted file mode 100644 -index b53e71fd7c6242f5e9b46fc473229c617554d1a6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-2-expected.txt -+++ /dev/null -@@ -1,43 +0,0 @@ --Input: --<#start>
<#shadow-start> world<#shadow-end>hello
<#shadow-start>WebKit <#end><#shadow-end>rocks
-- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello] -- NSColor: #0000ff (sRGB) -- NSFont: Times-BoldItalic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #0000ff (sRGB) -- NSStrokeWidth: 0 --[ world\n] -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[WebKit ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-expected.txt -deleted file mode 100644 -index 87fdc9ccc3afd3ba91ed8921e1b2be6b37a08dce..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-expected.txt -+++ /dev/null -@@ -1,42 +0,0 @@ --Some text here --Input: --
Some text here
-- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: ( 28L, -- 56L, -- 84L, -- 112L, -- 140L, -- 168L, -- 196L, -- 224L, -- 252L, -- 280L, -- 308L, -- 336L --) -- DefaultTabInterval: 0 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: -1 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[ ] -- NSColor: rgba(23, 45, 56, 0.4) (sRGB) -- NSFont: Times-Roman 16.00 pt. -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-with-color-filter-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-with-color-filter-expected.txt -deleted file mode 100644 -index f84bcd6a4ac07ae67500e3464535b186dcc265d2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/attributed-string-for-typing-with-color-filter-expected.txt -+++ /dev/null -@@ -1,43 +0,0 @@ --Some text here --Input: --
Some text here
-- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: ( 28L, -- 56L, -- 84L, -- 112L, -- 140L, -- 168L, -- 196L, -- 224L, -- 252L, -- 280L, -- 308L, -- 336L --) -- DefaultTabInterval: 0 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: -1 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[ ] -- NSBackgroundColor: #5c5c5c (sRGB) -- NSColor: rgba(239, 239, 239, 0.4) (sRGB) -- NSFont: Times-Roman 16.00 pt. -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/basic-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/basic-expected.txt -deleted file mode 100644 -index 92245154e47b41473f8d550363de6fc66ad9fafe..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/basic-expected.txt -+++ /dev/null -@@ -1,100 +0,0 @@ --Input: --hello world WebKit.
--this is a test of attributed string. -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[world] -- NSBackgroundColor: #0000ff (sRGB) -- NSColor: #ffffff (sRGB) -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #ffffff (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[WebKit] -- NSColor: #0000ee (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSLink: https://webkit.org/ -- NSStrokeColor: #0000ee (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true --[.\n] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[this is a ] -- NSBackgroundColor: #ffff00 (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[t] -- NSBackgroundColor: #ffff00 (sRGB) -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true --[est] -- NSBackgroundColor: #ffff00 (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true --[ of ] -- NSBackgroundColor: #ffff00 (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[attributed] -- NSBackgroundColor: #ffff00 (sRGB) -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ string.] -- NSBackgroundColor: #ffff00 (sRGB) -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/comment-cdata-section-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/comment-cdata-section-expected.txt -deleted file mode 100644 -index 64b44c5ca54a2219818cfa3de9908853c664020d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/comment-cdata-section-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --Input: --hello world. -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[hello world. ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-size-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-size-expected.txt -deleted file mode 100644 -index 07f391d2d6dff3372e9ce9a05be674fb371c73fb..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-size-expected.txt -+++ /dev/null -@@ -1,125 +0,0 @@ --Input: --small element --xx-small --x-small --small --normal --large --x-large --xx-large --5pt --15pt -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[small element] -- NSFont: Times-Roman 13.33 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[xx-small] -- NSFont: Times-Roman 9.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[x-small] -- NSFont: Times-Roman 10.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[small] -- NSFont: Times-Roman 13.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ normal ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[large] -- NSFont: Times-Roman 18.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[x-large] -- NSFont: Times-Roman 24.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[xx-large] -- NSFont: Times-Roman 32.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[5pt] -- NSFont: Times-Roman 6.67 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[15pt] -- NSFont: Times-Roman 20.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt -deleted file mode 100644 -index 374222699877ad1fec6fd5ce44dba7121d35557c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt -+++ /dev/null -@@ -1,50 +0,0 @@ --Input: --italic --oblique --small-caps --outline --emboss -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[italic] -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[oblique] -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ small-caps outline emboss ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-weight-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-weight-expected.txt -deleted file mode 100644 -index 8cea98017531e42d4e56b7f35390b48e5f080042..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/font-weight-expected.txt -+++ /dev/null -@@ -1,85 +0,0 @@ --Input: --bold --font weight 100 --font weight 200 --font weight 300 --font weight 400 --font weight 500 --font weight 600 --font weight 700 --font weight 800 --font weight 900 -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[bold] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ font weight 100 font weight 200 font weight 300 font weight 400 font weight 500 ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 600] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 700] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 800] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 900] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/letter-spacing-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/letter-spacing-expected.txt -deleted file mode 100644 -index 95328e1cb9bc02d4fd867c44fe6c26a45a82c311..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/letter-spacing-expected.txt -+++ /dev/null -@@ -1,36 +0,0 @@ --Input: --3pt -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[3pt] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/text-decorations-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/text-decorations-expected.txt -deleted file mode 100644 -index 8d728eb137162c33bc342d2cf54d48a93d7577b1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/text-decorations-expected.txt -+++ /dev/null -@@ -1,50 +0,0 @@ --Input: --underline --strike --underline and strike -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[underline] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[strike] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrikethrough: true -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ underline and strike ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/vertical-align-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/vertical-align-expected.txt -deleted file mode 100644 -index 3812c6c51fa62167d0399949969a51164dafb4a9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/mac/attributed-string/vertical-align-expected.txt -+++ /dev/null -@@ -1,74 +0,0 @@ --Input: --sup element --sub element --vertical align super --vertical align sub --vertical align 50% -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 LineBreakStrategy 0 --[sup element] -- NSFont: Times-Roman 13.33 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: 1 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[sub element] -- NSFont: Times-Roman 13.33 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: -1 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[vertical align super] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: 1 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[vertical align sub] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: -1 --[ vertical align 50% ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-4-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-4-expected.txt -deleted file mode 100644 -index c034e765b4784dea01f85fe0e861b91565bf93bc..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-4-expected.txt -+++ /dev/null -@@ -1,34 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 744x36 -- text run at (0,0) width 744: "This test ensures selection that crosses the shadow DOM boundary of a readonly input element cannot be made by a" -- text run at (0,18) width 79: "mouse drag." -- RenderBlock {P} at (0,52) size 784x36 -- RenderText {#text} at (0,0) size 773x36 -- text run at (0,0) width 773: "To manually test, select text by a mouse drag starting in \"hello\" and ending in \"WebKit\". Selection should extend only in" -- text run at (0,18) width 250: "the input element that contains \"hello\"." -- RenderBlock {DIV} at (0,104) size 784x28 -- RenderTextControl {INPUT} at (0,2) size 59x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (58,6) size 5x18 -- text run at (58,6) width 5: " " -- RenderInline {SPAN} at (0,0) size 39x18 -- RenderText {#text} at (62,6) size 39x18 -- text run at (62,6) width 39: "world" -- RenderText {#text} at (100,6) size 5x18 -- text run at (100,6) width 5: " " -- RenderTextControl {INPUT} at (104,2) size 59x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (11,117) size 53x18 -- RenderBlock {DIV} at (3,3) size 53x18 -- RenderText {#text} at (0,0) size 35x18 -- text run at (0,0) width 35: "hello" --layer at (115,117) size 53x18 -- RenderBlock {DIV} at (3,3) size 53x18 -- RenderText {#text} at (0,0) size 53x18 -- text run at (0,0) width 53: "WebKit" --selection start: position 4 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 5 {DIV} of body --selection end: position 5 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 5 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-5-expected.txt b/LayoutTests/platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-5-expected.txt -deleted file mode 100644 -index 8aaa5f95728091cda03c2c85a9d0f47d3e6ea839..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/editing/selection/select-across-readonly-input-5-expected.txt -+++ /dev/null -@@ -1,34 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 744x36 -- text run at (0,0) width 744: "This test ensures selection that crosses the shadow DOM boundary of a readonly input element cannot be made by a" -- text run at (0,18) width 79: "mouse drag." -- RenderBlock {P} at (0,52) size 784x36 -- RenderText {#text} at (0,0) size 773x36 -- text run at (0,0) width 773: "To manually test, select text by a mouse drag starting in \"WebKit\" and ending in \"hello\". Selection should extend only in" -- text run at (0,18) width 267: "the input element that contains \"WebKit\"." -- RenderBlock {DIV} at (0,104) size 784x28 -- RenderTextControl {INPUT} at (0,2) size 59x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (58,6) size 5x18 -- text run at (58,6) width 5: " " -- RenderInline {SPAN} at (0,0) size 39x18 -- RenderText {#text} at (62,6) size 39x18 -- text run at (62,6) width 39: "world" -- RenderText {#text} at (100,6) size 5x18 -- text run at (100,6) width 5: " " -- RenderTextControl {INPUT} at (104,2) size 59x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (11,117) size 53x18 -- RenderBlock {DIV} at (3,3) size 53x18 -- RenderText {#text} at (0,0) size 35x18 -- text run at (0,0) width 35: "hello" --layer at (115,117) size 53x18 -- RenderBlock {DIV} at (3,3) size 53x18 -- RenderText {#text} at (0,0) size 53x18 -- text run at (0,0) width 53: "WebKit" --selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 5 {INPUT} of child 5 {DIV} of body --selection end: position 2 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 5 {INPUT} of child 5 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina-wk1/http/tests/cookies/js-get-and-set-http-only-cookie-expected.txt b/LayoutTests/platform/mac-catalina-wk1/http/tests/cookies/js-get-and-set-http-only-cookie-expected.txt -deleted file mode 100644 -index da1159290efbbd5a306c31b86836e1e6baeae71d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/http/tests/cookies/js-get-and-set-http-only-cookie-expected.txt -+++ /dev/null -@@ -1,12 +0,0 @@ --Test for [BlackBerry] Possible to clobber httpOnly cookie. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --Check that we can't get or set httpOnly Cookies by JavaScript. --PASS We can't get httpOnly cookies by JavaScript. --FAIL We shouldn't set httpOnly cookies by JavaScript. --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-catalina-wk1/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001-expected.txt b/LayoutTests/platform/mac-catalina-wk1/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001-expected.txt -deleted file mode 100644 -index 3d74bce6020866a8a424b57f8bfff004125b7b90..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk1/imported/w3c/web-platform-tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001-expected.txt -+++ /dev/null -@@ -1,23 +0,0 @@ -- --FAIL minsize assert_approx_equals: attach expected 100 +/- 1 but got 25.015625 --FAIL maxsize assert_approx_equals: attach expected 100 +/- 1 but got 25.015625 --FAIL largeop assert_approx_equals: set true expected 50 +/- 1 but got 26 --FAIL symmetric assert_approx_equals: set true expected 150 +/- 1 but got 25.015625 --PASS stretchy --⥯ --⥯ --⥯ -- --⥯ --⥯ --⥯ -- --⥯ --⥯ -- --⥯ --⥯ -- --⥯ --⥯ -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/fast/events/contextmenu-lookup-action-for-image-expected.txt b/LayoutTests/platform/mac-catalina-wk2/fast/events/contextmenu-lookup-action-for-image-expected.txt -deleted file mode 100644 -index baa2c3a2cdef4394dddd578101f3926c8a4be8a3..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/fast/events/contextmenu-lookup-action-for-image-expected.txt -+++ /dev/null -@@ -1,2 +0,0 @@ -- --Found lookup item? false -diff --git a/LayoutTests/platform/mac-catalina-wk2/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt b/LayoutTests/platform/mac-catalina-wk2/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt -deleted file mode 100644 -index 6ef1c7332a43b3e70feac0a921768ca5a65a8d5f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --WebSocket: Object's toString method should be called only once. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- --PASS testObj.callCounter is 1 --PASS closeEvent.wasClean is true --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/http/tests/workers/service/serviceworker-websocket.https-expected.txt b/LayoutTests/platform/mac-catalina-wk2/http/tests/workers/service/serviceworker-websocket.https-expected.txt -deleted file mode 100644 -index 67498a5e42b4271a980d6c51e6c5764bbe106a17..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/http/tests/workers/service/serviceworker-websocket.https-expected.txt -+++ /dev/null -@@ -1,4 +0,0 @@ -- --PASS Setup worker --PASS Open a WebSocket in service worker -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/media-source/mediasource-invalid-codec-expected.txt b/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/media-source/mediasource-invalid-codec-expected.txt -deleted file mode 100644 -index 430aa981d4fe76223987b075732af58d466c4448..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/media-source/mediasource-invalid-codec-expected.txt -+++ /dev/null -@@ -1,4 +0,0 @@ -- --PASS Test an MP4 with an invalid codec results in an error. --FAIL Test a WebM with an invalid codec results in an error. assert_true: Media type not supported in this browser: isTypeSupported('video/webm; codecs="vp8"') expected true got false -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt b/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt -deleted file mode 100644 -index 46108d50e23865234137ed0cc48cea091a0970ec..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --PASS Verify WebSockets can be created in a Service Worker -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket.https-expected.txt b/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket.https-expected.txt -deleted file mode 100644 -index cd54602b11b93b1da76cf66aa031ca696c9f5a5f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/service-workers/service-worker/websocket.https-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --PASS Verify WebSocket handshake channel does not get intercepted -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt b/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt -deleted file mode 100644 -index 122214997512a11b045b2eaddde7c4185114fa10..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --FAIL HTTP basic authentication should work with WebSockets assert_unreached: open should succeed Reached unreachable code -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt b/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt -deleted file mode 100644 -index 122214997512a11b045b2eaddde7c4185114fa10..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --FAIL HTTP basic authentication should work with WebSockets assert_unreached: open should succeed Reached unreachable code -- -diff --git a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/remove-own-iframe-during-onerror.window-expected.txt b/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/remove-own-iframe-during-onerror.window-expected.txt -deleted file mode 100644 -index 9e2aaf25eb14d281f684a7b9edbe40954c642fe5..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina-wk2/imported/w3c/web-platform-tests/websockets/remove-own-iframe-during-onerror.window-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --PASS removing an iframe from within an onerror handler should work -- -diff --git a/LayoutTests/platform/mac-catalina/TestExpectations b/LayoutTests/platform/mac-catalina/TestExpectations -deleted file mode 100644 -index 2e1e5c79cdb3cc218c8cc6e79535df9c66f95148..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/TestExpectations -+++ /dev/null -@@ -1,9 +0,0 @@ --#////////////////////////////////////////////////////////////////////////////////////////// --# Platform-specific tests. Enabled globally, then skipped here. --#////////////////////////////////////////////////////////////////////////////////////////// -- --accessibility/mac/media-query-values-change.html [ Skip ] -- --# Skip some canvas tests due to some framework debugging output that interferes. --imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html [ Skip ] --imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html [ Skip ] -diff --git a/LayoutTests/platform/mac-catalina/editing/input/reveal-caret-of-multiline-input-expected.txt b/LayoutTests/platform/mac-catalina/editing/input/reveal-caret-of-multiline-input-expected.txt -deleted file mode 100644 -index 8371300933be24061b839fbf543bd99a77b21abb..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/input/reveal-caret-of-multiline-input-expected.txt -+++ /dev/null -@@ -1,79 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x178 -- RenderBlock {HTML} at (0,0) size 800x178 -- RenderBody {BODY} at (8,8) size 784x162 -- RenderBlock {DIV} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 610x18 -- text run at (0,0) width 610: "When the caret is scrolled out, on starting typing it must be brought to the center of the control." -- RenderBlock (anonymous) at (0,18) size 784x144 -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (10,28) size 91x136 clip at (11,29) size 74x134 scrollY 98 scrollHeight 420 -- RenderTextControl {TEXTAREA} at (2,2) size 91x136 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 70x416 -- RenderText {#text} at (0,0) size 20x403 -- text run at (0,0) width 14: "00" -- text run at (13,0) width 1: " " -- text run at (0,13) width 13: "01" -- text run at (12,13) width 1: " " -- text run at (0,26) width 14: "02" -- text run at (13,26) width 1: " " -- text run at (0,39) width 14: "03" -- text run at (13,39) width 1: " " -- text run at (0,52) width 15: "04" -- text run at (14,52) width 1: " " -- text run at (0,65) width 14: "05" -- text run at (13,65) width 1: " " -- text run at (0,78) width 15: "06" -- text run at (14,78) width 1: " " -- text run at (0,91) width 14: "07" -- text run at (13,91) width 1: " " -- text run at (0,104) width 15: "08" -- text run at (14,104) width 1: " " -- text run at (0,117) width 15: "09" -- text run at (14,117) width 1: " " -- text run at (0,130) width 13: "10" -- text run at (12,130) width 1: " " -- text run at (0,143) width 11: "11" -- text run at (10,143) width 1: " " -- text run at (0,156) width 20: ">12" -- text run at (19,156) width 1: " " -- text run at (0,169) width 13: "13" -- text run at (12,169) width 1: " " -- text run at (0,182) width 13: "14" -- text run at (12,182) width 1: " " -- text run at (0,195) width 13: "15" -- text run at (12,195) width 1: " " -- text run at (0,208) width 13: "16" -- text run at (12,208) width 1: " " -- text run at (0,221) width 12: "17" -- text run at (11,221) width 1: " " -- text run at (0,234) width 13: "18" -- text run at (12,234) width 1: " " -- text run at (0,247) width 13: "19" -- text run at (12,247) width 1: " " -- text run at (0,260) width 14: "20" -- text run at (13,260) width 1: " " -- text run at (0,273) width 12: "21" -- text run at (11,273) width 1: " " -- text run at (0,286) width 14: "22" -- text run at (13,286) width 1: " " -- text run at (0,299) width 14: "23" -- text run at (13,299) width 1: " " -- text run at (0,312) width 14: "24" -- text run at (13,312) width 1: " " -- text run at (0,325) width 14: "25" -- text run at (13,325) width 1: " " -- text run at (0,338) width 14: "26" -- text run at (13,338) width 1: " " -- text run at (0,351) width 14: "27" -- text run at (13,351) width 1: " " -- text run at (0,364) width 14: "28" -- text run at (13,364) width 1: " " -- text run at (0,377) width 14: "29" -- text run at (13,377) width 1: " " -- text run at (0,390) width 14: "30" -- text run at (13,390) width 1: " " -- RenderBR {BR} at (0,403) size 0x13 --caret: position 37 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 3 {TEXTAREA} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/pasteboard/pasting-tabs-expected.txt b/LayoutTests/platform/mac-catalina/editing/pasteboard/pasting-tabs-expected.txt -deleted file mode 100644 -index 37826da9662d74836aa1cdbc447fcaf458699ec6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/pasteboard/pasting-tabs-expected.txt -+++ /dev/null -@@ -1,36 +0,0 @@ --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > #document-fragment to 0 of DIV > #document-fragment toDOMRange:range from 0 of #text > DIV > #document-fragment to 11 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldInsertText:Tab-> <-Tab replacingDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 5 of #text > DIV > BODY > HTML > #document to 5 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 783x36 -- text run at (0,0) width 663: "This tests copying plain text with tabs and pasting it into an editable region using paste and match tyle. " -- text run at (662,0) width 121: "The tabs should be" -- text run at (0,18) width 67: "preserved." -- RenderBlock (anonymous) at (0,52) size 784x36 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,88) size 784x18 -- RenderText {#text} at (0,0) size 39x18 -- text run at (0,0) width 39: "Tab->" -- RenderInline {SPAN} at (0,0) size 26x18 -- RenderText {#text} at (38,0) size 26x18 -- text run at (38,0) width 26: "\x{9}" -- RenderText {#text} at (64,0) size 39x18 -- text run at (64,0) width 39: "<-Tab" --layer at (10,62) size 161x32 clip at (11,63) size 159x30 -- RenderTextControl {TEXTAREA} at (2,2) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderText {#text} at (0,0) size 83x13 -- text run at (0,0) width 83: "Tab->\x{9}<-Tab" --caret: position 5 of child 2 {#text} of child 4 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/3690703-2-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/3690703-2-expected.txt -deleted file mode 100644 -index 7a1ac25d5f9742f29ce9e4844fc8ca1f5d33c906..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/3690703-2-expected.txt -+++ /dev/null -@@ -1,152 +0,0 @@ --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > CENTER > BODY > HTML > #document to 6 of DIV > CENTER > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,3) size 784x581 [bgcolor=#FFFFFF] -- RenderBlock {CENTER} at (0,0) size 784x258 -- RenderTable {TABLE} at (0,0) size 784x19 -- RenderTableSection {TBODY} at (0,0) size 784x19 -- RenderTableRow {TR} at (0,0) size 784x15 -- RenderTableCell {TD} at (0,0) size 784x15 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 102x15 -- RenderInline {A} at (0,0) size 102x15 [color=#0000CC] -- RenderText {#text} at (682,0) size 102x15 -- text run at (682,0) width 102: "Personalized Home" -- RenderTableRow {TR} at (0,15) size 784x4 -- RenderTableCell {TD} at (0,16) size 784x2 [r=1 c=0 rs=1 cs=1] -- RenderImage {IMG} at (0,0) size 1x1 -- RenderBlock (anonymous) at (0,19) size 784x36 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBlock {DIV} at (0,55) size 784x105 [border: (2px solid #AAAAFF)] -- RenderTable {TABLE} at (214,2) size 355x23 -- RenderTableSection {TBODY} at (0,0) size 355x23 -- RenderTableRow {TR} at (0,0) size 355x23 -- RenderTableCell {TD} at (0,0) size 355x23 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 347x15 -- RenderInline {B} at (0,0) size 26x15 -- RenderText {#text} at (4,4) size 26x15 -- text run at (4,4) width 26: "Web" -- RenderText {#text} at (29,4) size 14x15 -- text run at (29,4) width 14: " " -- RenderInline {A} at (0,0) size 38x15 [color=#0000CC] -- RenderText {#text} at (42,4) size 38x15 -- text run at (42,4) width 38: "Images" -- RenderText {#text} at (79,4) size 14x15 -- text run at (79,4) width 14: " " -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (92,4) size 40x15 -- text run at (92,4) width 40: "Groups" -- RenderText {#text} at (131,4) size 14x15 -- text run at (131,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (144,4) size 30x15 -- text run at (144,4) width 30: "News" -- RenderText {#text} at (173,4) size 14x15 -- text run at (173,4) width 14: " " -- RenderInline {A} at (0,0) size 42x15 [color=#0000CC] -- RenderText {#text} at (186,4) size 42x15 -- text run at (186,4) width 42: "Froogle" -- RenderText {#text} at (227,4) size 14x15 -- text run at (227,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (240,4) size 30x15 -- text run at (240,4) width 30: "Local" -- RenderInline {SUP} at (0,0) size 1x13 -- RenderInline {A} at (0,0) size 30x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (269,4) size 30x15 -- text run at (269,4) width 30: "New!" -- RenderText {#text} at (298,4) size 14x15 -- text run at (298,4) width 14: " " -- RenderInline {B} at (0,0) size 40x15 -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (311,4) size 40x15 -- text run at (311,4) width 40: "more \x{BB}" -- RenderTable {TABLE} at (2,25) size 780x45 -- RenderTableSection {TBODY} at (0,0) size 780x45 -- RenderTableRow {TR} at (0,0) size 780x45 -- RenderTableCell {TD} at (0,13) size 192x19 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,-1) size 4x20 -- text run at (0,0) width 4: " " -- RenderTableCell {TD} at (191,0) size 397x45 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (2,2) size 392x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (395,2) size 1x18 -- RenderButton {INPUT} at (95,25) size 94x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 77x13 -- RenderText at (0,0) size 77x13 -- text run at (0,0) width 77: "Google Search" -- RenderButton {INPUT} at (192,25) size 108x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 91x13 -- RenderText at (0,0) size 91x13 -- text run at (0,0) width 91: "I'm Feeling Lucky" -- RenderTableCell {TD} at (587,0) size 194x39 [r=0 c=2 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 76x39 -- RenderText {#text} at (0,0) size 5x13 -- text run at (0,0) width 5: " " -- RenderInline {A} at (0,0) size 71x13 [color=#0000CC] -- RenderText {#text} at (5,0) size 71x13 -- text run at (5,0) width 71: "Advanced Search" -- RenderBR {BR} at (75,0) size 1x13 -- RenderText {#text} at (0,13) size 5x13 -- text run at (0,13) width 5: " " -- RenderInline {A} at (0,0) size 47x13 [color=#0000CC] -- RenderText {#text} at (5,13) size 47x13 -- text run at (5,13) width 47: "Preferences" -- RenderBR {BR} at (51,13) size 1x13 -- RenderText {#text} at (0,26) size 5x13 -- text run at (0,26) width 5: " " -- RenderInline {A} at (0,0) size 65x13 [color=#0000CC] -- RenderText {#text} at (5,26) size 65x13 -- text run at (5,26) width 65: "Language Tools" -- RenderBlock (anonymous) at (2,70) size 780x33 -- RenderBR {BR} at (390,0) size 0x18 -- RenderInline {FONT} at (0,0) size 146x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (317,18) size 30x15 -- text run at (317,18) width 30: "New!" -- RenderText {#text} at (346,18) size 4x15 -- text run at (346,18) width 4: " " -- RenderInline {A} at (0,0) size 111x15 [color=#0000CC] -- RenderText {#text} at (349,18) size 111x15 -- text run at (349,18) width 111: "Personalize this page" -- RenderText {#text} at (459,18) size 4x15 -- text run at (459,18) width 4: "." -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,160) size 784x69 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBR {BR} at (392,36) size 0x18 -- RenderInline {FONT} at (0,0) size 310x15 -- RenderInline {A} at (0,0) size 116x15 [color=#0000CC] -- RenderText {#text} at (237,54) size 116x15 -- text run at (237,54) width 116: "Advertising Programs" -- RenderText {#text} at (352,54) size 11x15 -- text run at (352,54) width 11: " - " -- RenderInline {A} at (0,0) size 100x15 [color=#0000CC] -- RenderText {#text} at (362,54) size 100x15 -- text run at (362,54) width 100: "Business Solutions" -- RenderText {#text} at (461,54) size 12x15 -- text run at (461,54) width 12: " - " -- RenderInline {A} at (0,0) size 75x15 [color=#0000CC] -- RenderText {#text} at (472,54) size 75x15 -- text run at (472,54) width 75: "About Google" -- RenderBlock {P} at (0,245) size 784x13 -- RenderInline {FONT} at (0,0) size 60x13 -- RenderText {#text} at (362,0) size 60x13 -- text run at (362,0) width 60: "\x{A9}2005 Google" --layer at (207,88) size 386x13 backgroundClip at (207,88) size 385x13 clip at (207,88) size 385x13 -- RenderBlock {DIV} at (3,3) size 386x13 --selection start: position 0 of child 3 {INPUT} of child 1 {TD} of child 0 {TR} of child 0 {TBODY} of child 2 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body --selection end: position 1 of child 2 {BR} of child 0 {FONT} of child 2 {TD} of child 0 {TR} of child 0 {TBODY} of child 2 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/3690703-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/3690703-expected.txt -deleted file mode 100644 -index 32dad22c5a1e23bde3007e6b09a4daa284dea854..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/3690703-expected.txt -+++ /dev/null -@@ -1,154 +0,0 @@ --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > CENTER > BODY > HTML > #document to 6 of DIV > CENTER > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,3) size 784x581 [bgcolor=#FFFFFF] -- RenderBlock {CENTER} at (0,0) size 784x258 -- RenderTable {TABLE} at (0,0) size 784x19 -- RenderTableSection {TBODY} at (0,0) size 784x19 -- RenderTableRow {TR} at (0,0) size 784x15 -- RenderTableCell {TD} at (0,0) size 784x15 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 102x15 -- RenderInline {A} at (0,0) size 102x15 [color=#0000CC] -- RenderText {#text} at (682,0) size 102x15 -- text run at (682,0) width 102: "Personalized Home" -- RenderTableRow {TR} at (0,15) size 784x4 -- RenderTableCell {TD} at (0,16) size 784x2 [r=1 c=0 rs=1 cs=1] -- RenderImage {IMG} at (0,0) size 1x1 -- RenderBlock (anonymous) at (0,19) size 784x36 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBlock {DIV} at (0,55) size 784x105 [border: (2px solid #AAAAFF)] -- RenderTable {TABLE} at (214,2) size 355x23 -- RenderTableSection {TBODY} at (0,0) size 355x23 -- RenderTableRow {TR} at (0,0) size 355x23 -- RenderTableCell {TD} at (0,0) size 355x23 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 347x15 -- RenderInline {B} at (0,0) size 26x15 -- RenderText {#text} at (4,4) size 26x15 -- text run at (4,4) width 26: "Web" -- RenderText {#text} at (29,4) size 14x15 -- text run at (29,4) width 14: " " -- RenderInline {A} at (0,0) size 38x15 [color=#0000CC] -- RenderText {#text} at (42,4) size 38x15 -- text run at (42,4) width 38: "Images" -- RenderText {#text} at (79,4) size 14x15 -- text run at (79,4) width 14: " " -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (92,4) size 40x15 -- text run at (92,4) width 40: "Groups" -- RenderText {#text} at (131,4) size 14x15 -- text run at (131,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (144,4) size 30x15 -- text run at (144,4) width 30: "News" -- RenderText {#text} at (173,4) size 14x15 -- text run at (173,4) width 14: " " -- RenderInline {A} at (0,0) size 42x15 [color=#0000CC] -- RenderText {#text} at (186,4) size 42x15 -- text run at (186,4) width 42: "Froogle" -- RenderText {#text} at (227,4) size 14x15 -- text run at (227,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (240,4) size 30x15 -- text run at (240,4) width 30: "Local" -- RenderInline {SUP} at (0,0) size 1x13 -- RenderInline {A} at (0,0) size 30x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (269,4) size 30x15 -- text run at (269,4) width 30: "New!" -- RenderText {#text} at (298,4) size 14x15 -- text run at (298,4) width 14: " " -- RenderInline {B} at (0,0) size 40x15 -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (311,4) size 40x15 -- text run at (311,4) width 40: "more \x{BB}" -- RenderTable {TABLE} at (2,25) size 780x45 -- RenderTableSection {TBODY} at (0,0) size 780x45 -- RenderTableRow {TR} at (0,0) size 780x45 -- RenderTableCell {TD} at (0,13) size 192x19 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,-1) size 4x20 -- text run at (0,0) width 4: " " -- RenderTableCell {TD} at (191,0) size 397x45 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (2,2) size 392x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (395,2) size 1x18 -- RenderButton {INPUT} at (95,25) size 94x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 77x13 -- RenderText at (0,0) size 77x13 -- text run at (0,0) width 77: "Google Search" -- RenderButton {INPUT} at (192,25) size 108x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 91x13 -- RenderText at (0,0) size 91x13 -- text run at (0,0) width 91: "I'm Feeling Lucky" -- RenderTableCell {TD} at (587,0) size 194x39 [r=0 c=2 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 76x39 -- RenderText {#text} at (0,0) size 5x13 -- text run at (0,0) width 5: " " -- RenderInline {A} at (0,0) size 71x13 [color=#0000CC] -- RenderText {#text} at (5,0) size 71x13 -- text run at (5,0) width 71: "Advanced Search" -- RenderBR {BR} at (75,0) size 1x13 -- RenderText {#text} at (0,13) size 5x13 -- text run at (0,13) width 5: " " -- RenderInline {A} at (0,0) size 47x13 [color=#0000CC] -- RenderText {#text} at (5,13) size 47x13 -- text run at (5,13) width 47: "Preferences" -- RenderBR {BR} at (51,13) size 1x13 -- RenderText {#text} at (0,26) size 5x13 -- text run at (0,26) width 5: " " -- RenderInline {A} at (0,0) size 65x13 [color=#0000CC] -- RenderText {#text} at (5,26) size 65x13 -- text run at (5,26) width 65: "Language Tools" -- RenderBlock (anonymous) at (2,70) size 780x33 -- RenderBR {BR} at (390,0) size 0x18 -- RenderInline {FONT} at (0,0) size 146x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (317,18) size 30x15 -- text run at (317,18) width 30: "New!" -- RenderText {#text} at (346,18) size 4x15 -- text run at (346,18) width 4: " " -- RenderInline {A} at (0,0) size 111x15 [color=#0000CC] -- RenderText {#text} at (349,18) size 111x15 -- text run at (349,18) width 111: "Personalize this page" -- RenderText {#text} at (459,18) size 4x15 -- text run at (459,18) width 4: "." -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,160) size 784x69 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBR {BR} at (392,36) size 0x18 -- RenderInline {FONT} at (0,0) size 310x15 -- RenderInline {A} at (0,0) size 116x15 [color=#0000CC] -- RenderText {#text} at (237,54) size 116x15 -- text run at (237,54) width 116: "Advertising Programs" -- RenderText {#text} at (352,54) size 11x15 -- text run at (352,54) width 11: " - " -- RenderInline {A} at (0,0) size 100x15 [color=#0000CC] -- RenderText {#text} at (362,54) size 100x15 -- text run at (362,54) width 100: "Business Solutions" -- RenderText {#text} at (461,54) size 12x15 -- text run at (461,54) width 12: " - " -- RenderInline {A} at (0,0) size 75x15 [color=#0000CC] -- RenderText {#text} at (472,54) size 75x15 -- text run at (472,54) width 75: "About Google" -- RenderBlock {P} at (0,245) size 784x13 -- RenderInline {FONT} at (0,0) size 60x13 -- RenderText {#text} at (362,0) size 60x13 -- text run at (362,0) width 60: "\x{A9}2005 Google" --layer at (207,88) size 386x13 backgroundClip at (207,88) size 385x13 clip at (207,88) size 385x13 -- RenderBlock {DIV} at (3,3) size 386x13 --selection start: position 0 of child 1 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body --selection end: position 1 of child 3 {#text} of child 4 {FONT} of child 4 {DIV} of child 0 {CENTER} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/3690719-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/3690719-expected.txt -deleted file mode 100644 -index 25e25b38d0bcb7fc7b9ead0faad05c62c539c9e7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/3690719-expected.txt -+++ /dev/null -@@ -1,146 +0,0 @@ --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > CENTER > BODY > HTML > #document to 6 of DIV > CENTER > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of DIV > CENTER > BODY > HTML > #document to 1 of DIV > CENTER > BODY > HTML > #document toDOMRange:range from 1 of DIV > CENTER > BODY > HTML > #document to 1 of #text > FONT > DIV > CENTER > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,3) size 784x581 [bgcolor=#FFFFFF] -- RenderBlock {CENTER} at (0,0) size 784x258 -- RenderTable {TABLE} at (0,0) size 784x19 -- RenderTableSection {TBODY} at (0,0) size 784x19 -- RenderTableRow {TR} at (0,0) size 784x15 -- RenderTableCell {TD} at (0,0) size 784x15 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 102x15 -- RenderInline {A} at (0,0) size 102x15 [color=#0000CC] -- RenderText {#text} at (682,0) size 102x15 -- text run at (682,0) width 102: "Personalized Home" -- RenderTableRow {TR} at (0,15) size 784x4 -- RenderTableCell {TD} at (0,16) size 784x2 [r=1 c=0 rs=1 cs=1] -- RenderImage {IMG} at (0,0) size 1x1 -- RenderBlock (anonymous) at (0,19) size 784x36 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBlock {DIV} at (0,55) size 784x105 [border: (2px solid #AAAAFF)] -- RenderTable {TABLE} at (214,2) size 355x23 -- RenderTableSection {TBODY} at (0,0) size 355x23 -- RenderTableRow {TR} at (0,0) size 355x23 -- RenderTableCell {TD} at (0,0) size 355x23 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 347x15 -- RenderInline {B} at (0,0) size 26x15 -- RenderText {#text} at (4,4) size 26x15 -- text run at (4,4) width 26: "Web" -- RenderText {#text} at (29,4) size 14x15 -- text run at (29,4) width 14: " " -- RenderInline {A} at (0,0) size 38x15 [color=#0000CC] -- RenderText {#text} at (42,4) size 38x15 -- text run at (42,4) width 38: "Images" -- RenderText {#text} at (79,4) size 14x15 -- text run at (79,4) width 14: " " -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (92,4) size 40x15 -- text run at (92,4) width 40: "Groups" -- RenderText {#text} at (131,4) size 14x15 -- text run at (131,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (144,4) size 30x15 -- text run at (144,4) width 30: "News" -- RenderText {#text} at (173,4) size 14x15 -- text run at (173,4) width 14: " " -- RenderInline {A} at (0,0) size 42x15 [color=#0000CC] -- RenderText {#text} at (186,4) size 42x15 -- text run at (186,4) width 42: "Froogle" -- RenderText {#text} at (227,4) size 14x15 -- text run at (227,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (240,4) size 30x15 -- text run at (240,4) width 30: "Local" -- RenderInline {SUP} at (0,0) size 1x13 -- RenderInline {A} at (0,0) size 30x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (269,4) size 30x15 -- text run at (269,4) width 30: "New!" -- RenderText {#text} at (298,4) size 14x15 -- text run at (298,4) width 14: " " -- RenderInline {B} at (0,0) size 40x15 -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (311,4) size 40x15 -- text run at (311,4) width 40: "more \x{BB}" -- RenderTable {TABLE} at (2,25) size 780x45 -- RenderTableSection {TBODY} at (0,0) size 780x45 -- RenderTableRow {TR} at (0,0) size 780x45 -- RenderTableCell {TD} at (0,13) size 192x19 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,-1) size 4x20 -- text run at (0,0) width 4: " " -- RenderTableCell {TD} at (191,0) size 397x45 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (2,2) size 392x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (395,2) size 1x18 -- RenderButton {INPUT} at (95,25) size 94x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 77x13 -- RenderText at (0,0) size 77x13 -- text run at (0,0) width 77: "Google Search" -- RenderButton {INPUT} at (192,25) size 108x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 91x13 -- RenderText at (0,0) size 91x13 -- text run at (0,0) width 91: "I'm Feeling Lucky" -- RenderTableCell {TD} at (587,0) size 194x39 [r=0 c=2 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 76x39 -- RenderText {#text} at (0,0) size 5x13 -- text run at (0,0) width 5: " " -- RenderInline {A} at (0,0) size 71x13 [color=#0000CC] -- RenderText {#text} at (5,0) size 71x13 -- text run at (5,0) width 71: "Advanced Search" -- RenderBR {BR} at (75,0) size 1x13 -- RenderText {#text} at (0,13) size 5x13 -- text run at (0,13) width 5: " " -- RenderInline {A} at (0,0) size 47x13 [color=#0000CC] -- RenderText {#text} at (5,13) size 47x13 -- text run at (5,13) width 47: "Preferences" -- RenderBR {BR} at (51,13) size 1x13 -- RenderText {#text} at (0,26) size 5x13 -- text run at (0,26) width 5: " " -- RenderInline {A} at (0,0) size 65x13 [color=#0000CC] -- RenderText {#text} at (5,26) size 65x13 -- text run at (5,26) width 65: "Language Tools" -- RenderBlock (anonymous) at (2,70) size 780x33 -- RenderBR {BR} at (390,0) size 0x18 -- RenderInline {FONT} at (0,0) size 146x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (317,18) size 30x15 -- text run at (317,18) width 30: "New!" -- RenderText {#text} at (346,18) size 4x15 -- text run at (346,18) width 4: " " -- RenderInline {A} at (0,0) size 111x15 [color=#0000CC] -- RenderText {#text} at (349,18) size 111x15 -- text run at (349,18) width 111: "Personalize this page" -- RenderText {#text} at (459,18) size 4x15 -- text run at (459,18) width 4: "." -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,160) size 784x69 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBR {BR} at (392,36) size 0x18 -- RenderInline {FONT} at (0,0) size 310x15 -- RenderInline {A} at (0,0) size 116x15 [color=#0000CC] -- RenderText {#text} at (237,54) size 116x15 -- text run at (237,54) width 116: "Advertising Programs" -- RenderText {#text} at (352,54) size 11x15 -- text run at (352,54) width 11: " - " -- RenderInline {A} at (0,0) size 100x15 [color=#0000CC] -- RenderText {#text} at (362,54) size 100x15 -- text run at (362,54) width 100: "Business Solutions" -- RenderText {#text} at (461,54) size 12x15 -- text run at (461,54) width 12: " - " -- RenderInline {A} at (0,0) size 75x15 [color=#0000CC] -- RenderText {#text} at (472,54) size 75x15 -- text run at (472,54) width 75: "About Google" -- RenderBlock {P} at (0,245) size 784x13 -- RenderInline {FONT} at (0,0) size 60x13 -- RenderText {#text} at (362,0) size 60x13 -- text run at (362,0) width 60: "\x{A9}2005 Google" --layer at (207,88) size 386x13 backgroundClip at (207,88) size 385x13 clip at (207,88) size 385x13 -- RenderBlock {DIV} at (3,3) size 386x13 --selection start: position 0 of child 1 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body --selection end: position 1 of child 3 {#text} of child 4 {FONT} of child 4 {DIV} of child 0 {CENTER} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/select-from-textfield-outwards-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/select-from-textfield-outwards-expected.txt -deleted file mode 100644 -index 80407d10f1cb03a6a1a57fe5cc4a6c5f9cd33b1f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/select-from-textfield-outwards-expected.txt -+++ /dev/null -@@ -1,51 +0,0 @@ --EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 13 of #text > DIV > #document-fragment to 13 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 13 of #text > DIV > #document-fragment to 13 of #text > DIV > #document-fragment toDOMRange:range from 12 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 12 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment toDOMRange:range from 0 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment toDOMRange:range from 12 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 12 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment toDOMRange:range from 0 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment toDOMRange:range from 12 of #text > DIV > #document-fragment to 17 of #text > DIV > #document-fragment affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 108x18 -- text run at (0,0) width 108: "This is a test for " -- RenderInline {I} at (0,0) size 766x36 -- RenderInline {A} at (0,0) size 353x18 [color=#0000EE] -- RenderText {#text} at (107,0) size 353x18 -- text run at (107,0) width 353: "http://bugzilla.opendarwin.org/show_bug.cgi?id=9312" -- RenderText {#text} at (459,0) size 766x36 -- text run at (459,0) width 5: " " -- text run at (463,0) width 303: "REGRESSION: Selection bug in new text fields" -- text run at (0,18) width 216: "when selecting past the first letter" -- RenderText {#text} at (215,18) size 5x18 -- text run at (215,18) width 5: "." -- RenderBlock {HR} at (0,52) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,70) size 784x54 -- RenderText {#text} at (0,0) size 771x54 -- text run at (0,0) width 761: "Curabitur pretium, quam quis semper malesuada, est libero feugiat libero, vel fringilla orci nibh sed neque. Quisque eu" -- text run at (0,18) width 771: "nulla non nisi molestie accumsan. Etiam tellus urna, laoreet ac, laoreet non, suscipit sed, sapien. Phasellus vehicula, sem" -- text run at (0,36) width 569: "at posuere vehicula, augue nibh molestie nisl, nec ullamcorper lacus ante vulputate pede." -- RenderBlock (anonymous) at (0,140) size 784x92 -- RenderTextControl {INPUT} at (20,20) size 324x52 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,248) size 784x72 -- RenderText {#text} at (0,0) size 772x72 -- text run at (0,0) width 772: "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris viverra augue vitae purus." -- text run at (0,18) width 728: "Morbi sed sem. Donec dui nisi, ultrices non, pretium quis, hendrerit non, est. Donec tellus. Donec eget dui id eros" -- text run at (0,36) width 767: "pharetra rutrum. Suspendisse sodales lectus sit amet nulla. Morbi tortor arcu, convallis blandit, elementum eu, aliquet a," -- text run at (0,54) width 39: "tellus." --layer at (40,180) size 299x28 -- RenderBlock {DIV} at (12,12) size 300x28 -- RenderText {#text} at (0,0) size 192x28 -- text run at (0,0) width 192: "Lorem ipsum dolor" --selection start: position 12 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body --selection end: position 17 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt -deleted file mode 100644 -index 4f97f5f52bc2d977bf0c81d8d17bf863a115c2b0..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 88x136 -- RenderBlock {P} at (20,0) size 48x136 -- RenderText {#text} at (1,38) size 23x98 -- text run at (1,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBR {BR} at (1,38) size 23x1 -- RenderText {#text} at (25,28) size 23x108 -- text run at (25,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 5 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-mixed-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-mixed-expected.txt -deleted file mode 100644 -index 22dfcfffebca0e2562dc6701d40d051bb5a17881..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-br-mixed-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 86x136 -- RenderBlock {P} at (20,0) size 46x136 -- RenderText {#text} at (0,38) size 23x98 -- text run at (0,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBR {BR} at (0,38) size 23x1 -- RenderText {#text} at (23,28) size 23x108 -- text run at (23,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 5 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt -deleted file mode 100644 -index e761f6b7ff9c6cc2cc61aab5ad88a74e4cceae14..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 108x136 -- RenderBlock {P} at (20,0) size 24x136 -- RenderText {#text} at (1,38) size 23x98 -- text run at (1,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBlock {P} at (64,0) size 24x136 -- RenderText {#text} at (1,28) size 23x108 -- text run at (1,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 5 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-mixed-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-mixed-expected.txt -deleted file mode 100644 -index 891c24d831f34ad8f185359425dd01a4221f74ae..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-backward-p-mixed-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 106x136 -- RenderBlock {P} at (20,0) size 23x136 -- RenderText {#text} at (0,38) size 23x98 -- text run at (0,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBlock {P} at (63,0) size 23x136 -- RenderText {#text} at (0,28) size 23x108 -- text run at (0,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 5 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt -deleted file mode 100644 -index 04a3504736fce6af14db733f990869f9d45f254b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 88x136 -- RenderBlock {P} at (20,0) size 48x136 -- RenderText {#text} at (1,38) size 23x98 -- text run at (1,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBR {BR} at (1,38) size 23x1 -- RenderText {#text} at (25,28) size 23x108 -- text run at (25,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 6 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-mixed-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-mixed-expected.txt -deleted file mode 100644 -index fde18a13956a5f6325ab94082555f98db438bd1d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-br-mixed-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 86x136 -- RenderBlock {P} at (20,0) size 46x136 -- RenderText {#text} at (0,38) size 23x98 -- text run at (0,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBR {BR} at (0,38) size 23x1 -- RenderText {#text} at (23,28) size 23x108 -- text run at (23,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 6 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt -deleted file mode 100644 -index a22c993a11e0be238e4cd3342f3f09cb99a32210..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 108x136 -- RenderBlock {P} at (20,0) size 24x136 -- RenderText {#text} at (1,38) size 23x98 -- text run at (1,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBlock {P} at (64,0) size 24x136 -- RenderText {#text} at (1,28) size 23x108 -- text run at (1,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 6 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-mixed-expected.txt b/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-mixed-expected.txt -deleted file mode 100644 -index cce89403acaf0917e53f81d700070e9866a82ded..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/editing/selection/vertical-rl-rtl-extend-line-forward-p-mixed-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x198 -- RenderBlock {HTML} at (0,0) size 800x199 -- RenderBody {BODY} at (8,16) size 784x170 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode." -- RenderBlock {DIV} at (0,34) size 106x136 -- RenderBlock {P} at (20,0) size 23x136 -- RenderText {#text} at (0,38) size 23x98 -- text run at (0,38) width 97 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}." -- RenderBlock {P} at (63,0) size 23x136 -- RenderText {#text} at (0,28) size 23x108 -- text run at (0,28) width 107 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}." -- RenderBlock {PRE} at (0,182) size 784x0 --selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body --selection end: position 6 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/block/basic/001-expected.txt b/LayoutTests/platform/mac-catalina/fast/block/basic/001-expected.txt -deleted file mode 100644 -index 343ee2caf411d381634cb7638ebceae9e121a52d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/block/basic/001-expected.txt -+++ /dev/null -@@ -1,33 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {DIV} at (0,0) size 784x185 [border: (2px solid #FF0000)] -- RenderBlock (anonymous) at (2,2) size 780x18 -- RenderInline {I} at (0,0) size 235x18 -- RenderText {#text} at (0,0) size 96x18 -- text run at (0,0) width 96: "Start of a line. " -- RenderInline {FONT} at (0,0) size 140x18 [color=#FF0000] -- RenderText {#text} at (95,0) size 140x18 -- text run at (95,0) width 140: "More red on this line:" -- RenderBlock (anonymous) at (2,38) size 780x71 [color=#FF0000] -- RenderBlock {H3} at (0,0) size 780x22 -- RenderText {#text} at (0,0) size 208x22 -- text run at (0,0) width 208: "Suddenly a block appears!" -- RenderBlock {H2} at (0,41) size 780x29 -- RenderText {#text} at (0,0) size 194x28 -- text run at (0,0) width 194: "And another block!" -- RenderBlock (anonymous) at (2,128) size 780x55 -- RenderInline {I} at (0,0) size 299x36 -- RenderInline {FONT} at (0,0) size 97x36 [color=#FF0000] -- RenderText {#text} at (0,0) size 97x18 -- text run at (0,0) width 97: "Now more text." -- RenderBR {BR} at (96,0) size 1x18 -- RenderText {#text} at (0,18) size 67x18 -- text run at (0,18) width 67: "This is red" -- RenderText {#text} at (66,18) size 233x18 -- text run at (66,18) width 233: " but now only italic on the same line" -- RenderBR {BR} at (298,18) size 1x18 -- RenderText {#text} at (0,36) size 132x18 -- text run at (0,36) width 132: "Plain line at the end." -diff --git a/LayoutTests/platform/mac-catalina/fast/block/float/float-avoidance-expected.txt b/LayoutTests/platform/mac-catalina/fast/block/float/float-avoidance-expected.txt -deleted file mode 100644 -index e248c17ebc279d743eb12a8414367921d29e8f00..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/block/float/float-avoidance-expected.txt -+++ /dev/null -@@ -1,337 +0,0 @@ --layer at (0,0) size 785x2386 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x2386 -- RenderBlock {HTML} at (0,0) size 785x2386 -- RenderBody {BODY} at (8,8) size 769x2370 -- RenderBlock (anonymous) at (0,0) size 769x36 -- RenderText {#text} at (0,0) size 753x36 -- text run at (0,0) width 546: "Test of objects that avoid floats to see what they do with percentage and auto widths. " -- text run at (545,0) width 208: "This test is designed to illustrate" -- text run at (0,18) width 482: "that we have removed the WinIE quirk and are behaving more like Firefox." -- RenderBlock {HR} at (0,44) size 769x2 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (0,54) size 769x18 -- RenderText {#text} at (0,0) size 517x18 -- text run at (0,0) width 517: "The inline-level button should be below the select and fill the width of the block." -- RenderBlock {P} at (0,88) size 220x82 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (10,52) size 200x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 184x13 -- RenderText at (86,0) size 12x13 -- text run at (86,0) width 12: "Hi" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,186) size 769x18 -- RenderText {#text} at (0,0) size 481x18 -- text run at (0,0) width 481: "The floating button with a percentage width should be even with the select." -- RenderBlock {P} at (0,220) size 220x60 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (110,30) size 100x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 84x13 -- RenderText at (36,0) size 12x13 -- text run at (36,0) width 12: "Hi" -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (210,28) size 0x18 -- RenderBlock (anonymous) at (0,296) size 769x18 -- RenderText {#text} at (0,0) size 470x18 -- text run at (0,0) width 470: "The block-level button with an auto width should be even with the select." -- RenderBlock {P} at (0,330) size 220x78 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (110,30) size 27x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 11x13 -- RenderText at (0,0) size 11x13 -- text run at (0,0) width 11: "Hi" -- RenderBlock (anonymous) at (10,50) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,424) size 769x18 -- RenderText {#text} at (0,0) size 504x18 -- text run at (0,0) width 504: "The block-level button with a percentage width should be even with the select." -- RenderBlock {P} at (0,458) size 220x78 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (110,30) size 100x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 84x13 -- RenderText at (36,0) size 12x13 -- text run at (36,0) width 12: "Hi" -- RenderBlock (anonymous) at (10,50) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,552) size 769x18 -- RenderText {#text} at (0,0) size 471x18 -- text run at (0,0) width 471: "The floating table with a percentage width should be even with the select." -- RenderBlock {P} at (0,586) size 220x68 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (110,28) size 100x30 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 96x26 -- RenderTableRow {TR} at (0,2) size 96x22 -- RenderTableCell {TD} at (2,2) size 92x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 36x18 -- text run at (2,2) width 36: "Table" -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (210,28) size 0x18 -- RenderBlock (anonymous) at (0,670) size 769x36 -- RenderText {#text} at (0,0) size 768x36 -- text run at (0,0) width 768: "The floating table with an auto width should be even with the select and shrinks to use the available line width. THIS IS" -- text run at (0,18) width 157: "CURRENTLY BUGGY." -- RenderBlock {P} at (0,722) size 220x126 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (10,50) size 200x66 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 196x62 -- RenderTableRow {TR} at (0,2) size 196x58 -- RenderTableCell {TD} at (2,2) size 192x58 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 165x54 -- text run at (2,2) width 164: "Floating table that should" -- text run at (2,20) width 165: "shrink so it can be next to" -- text run at (2,38) width 92: "previous float." -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (110,28) size 0x18 -- RenderBlock (anonymous) at (0,864) size 769x18 -- RenderText {#text} at (0,0) size 746x18 -- text run at (0,0) width 589: "The block-level table below has a percentage width and should still be even with the select. " -- text run at (588,0) width 158: "It spills out of the block." -- RenderBlock {P} at (0,898) size 220x144 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (10,50) size 200x66 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 196x62 -- RenderTableRow {TR} at (0,2) size 196x58 -- RenderTableCell {TD} at (2,2) size 192x58 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 165x54 -- text run at (2,2) width 164: "Floating table that should" -- text run at (2,20) width 165: "shrink so it can be next to" -- text run at (2,38) width 92: "previous float." -- RenderBlock (anonymous) at (10,116) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1058) size 769x18 -- RenderText {#text} at (0,0) size 759x18 -- text run at (0,0) width 555: "The block-level table below has an auto width and should still be even with the select. " -- text run at (554,0) width 205: "It shrinks to fit inside the block." -- RenderBlock {P} at (0,1092) size 220x194 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (110,28) size 100x138 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 96x134 -- RenderTableRow {TR} at (0,2) size 96x130 -- RenderTableCell {TD} at (2,2) size 92x130 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 87x126 -- text run at (2,2) width 54: "Floating" -- text run at (2,20) width 60: "table that" -- text run at (2,38) width 87: "should shrink" -- text run at (2,56) width 73: "so it can be" -- text run at (2,74) width 44: "next to" -- text run at (2,92) width 56: "previous" -- text run at (2,110) width 33: "float." -- RenderBlock (anonymous) at (10,166) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1302) size 769x18 -- RenderText {#text} at (0,0) size 546x18 -- text run at (0,0) width 546: "The floating overflow section with a percentage width should be even with the select." -- RenderBlock {DIV} at (0,1320) size 220x146 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (210,28) size 0x18 -- RenderBlock (anonymous) at (0,1466) size 769x36 -- RenderText {#text} at (0,0) size 741x36 -- text run at (0,0) width 741: "The floating overflow section with an auto width should be even with the select and shrinks to use the available line" -- text run at (0,18) width 259: "width. THIS IS CURRENTLY BUGGY." -- RenderBlock {DIV} at (0,1502) size 220x114 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (110,28) size 0x18 -- RenderBlock (anonymous) at (0,1616) size 769x18 -- RenderText {#text} at (0,0) size 660x18 -- text run at (0,0) width 660: "The block-level overflow section below has a percentage width and should still be even with the select." -- RenderBlock {DIV} at (0,1634) size 220x164 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (10,136) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1798) size 769x36 -- RenderText {#text} at (0,0) size 767x36 -- text run at (0,0) width 631: "The block-level overflow section below has an auto width and should still be even with the select. " -- text run at (630,0) width 137: "It shrinks to fit inside" -- text run at (0,18) width 64: "the block." -- RenderBlock {DIV} at (0,1834) size 220x164 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (10,136) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1998) size 769x18 -- RenderText {#text} at (0,0) size 453x18 -- text run at (0,0) width 453: "The floating hr with a percentage width should be even with the select." -- RenderBlock {DIV} at (0,2016) size 220x60 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (floating) {HR} at (112,30) size 82x2 [border: (1px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (196,28) size 0x18 -- RenderBlock (anonymous) at (0,2076) size 769x36 -- RenderText {#text} at (0,0) size 767x36 -- text run at (0,0) width 767: "The floating hr below should still be even with the select and shrinks to use its intrinsic width (which is basically like 1-" -- text run at (0,18) width 34: "2px)." -- RenderBlock {DIV} at (0,2112) size 220x60 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (floating) {HR} at (112,30) size 2x2 [border: (1px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (116,28) size 0x18 -- RenderBlock (anonymous) at (0,2172) size 769x18 -- RenderText {#text} at (0,0) size 567x18 -- text run at (0,0) width 567: "The block-level hr below has a percentage width and should still be even with the select." -- RenderBlock {DIV} at (0,2190) size 220x88 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (10,50) size 202x2 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (10,60) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,2278) size 769x18 -- RenderText {#text} at (0,0) size 635x18 -- text run at (0,0) width 538: "The block-level hr below has an auto width and should still be even with the select. " -- text run at (537,0) width 98: "It shrinks to fit." -- RenderBlock {DIV} at (0,2296) size 220x74 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (110,36) size 100x2 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (10,46) size 200x18 -- RenderBR {BR} at (100,0) size 0x18 --layer at (118,1356) size 100x108 -- RenderBlock (floating) {DIV} at (110,28) size 100x108 -- RenderText {#text} at (0,0) size 100x108 -- text run at (0,0) width 63: "This is an" -- text run at (0,18) width 57: "overflow" -- text run at (0,36) width 78: "section with" -- text run at (0,54) width 92: "enough text to" -- text run at (0,72) width 100: "have to wrap to" -- text run at (0,90) width 92: "multiple lines." --layer at (18,1560) size 200x54 -- RenderBlock (floating) {DIV} at (10,50) size 200x54 -- RenderText {#text} at (0,0) size 175x54 -- text run at (0,0) width 173: "This is an overflow section" -- text run at (0,18) width 175: "with enough text to have to" -- text run at (0,36) width 144: "wrap to multiple lines." --layer at (118,1670) size 100x108 -- RenderBlock {DIV} at (110,28) size 100x108 -- RenderText {#text} at (0,0) size 100x108 -- text run at (0,0) width 63: "This is an" -- text run at (0,18) width 57: "overflow" -- text run at (0,36) width 78: "section with" -- text run at (0,54) width 92: "enough text to" -- text run at (0,72) width 100: "have to wrap to" -- text run at (0,90) width 92: "multiple lines." --layer at (118,1870) size 100x108 -- RenderBlock {DIV} at (110,28) size 100x108 -- RenderText {#text} at (0,0) size 100x108 -- text run at (0,0) width 63: "This is an" -- text run at (0,18) width 57: "overflow" -- text run at (0,36) width 78: "section with" -- text run at (0,54) width 92: "enough text to" -- text run at (0,72) width 100: "have to wrap to" -- text run at (0,90) width 92: "multiple lines." -diff --git a/LayoutTests/platform/mac-catalina/fast/css/apple-system-control-colors-expected.txt b/LayoutTests/platform/mac-catalina/fast/css/apple-system-control-colors-expected.txt -deleted file mode 100644 -index 69a0b968ab1a8c641572faa940886c090571727a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/css/apple-system-control-colors-expected.txt -+++ /dev/null -@@ -1,23 +0,0 @@ ---apple-system-header-text : rgba(0, 0, 0, 0.847) ---apple-system-text-background : rgb(255, 255, 255) ---apple-system-control-background : rgb(255, 255, 255) ---apple-system-alternate-selected-text : rgb(255, 255, 255) ---apple-system-control-accent : rgb(0, 122, 255) ---apple-system-even-alternating-content-background : rgb(255, 255, 255) ---apple-system-odd-alternating-content-background : rgb(244, 245, 245) ---apple-system-selected-content-background : rgb(0, 99, 225) ---apple-system-unemphasized-selected-content-background : rgb(220, 220, 220) ---apple-system-selected-text : rgb(0, 0, 0) ---apple-system-unemphasized-selected-text : rgb(0, 0, 0) ---apple-system-selected-text-background : rgba(128, 188, 254, 0.6) ---apple-system-unemphasized-selected-text-background : rgb(220, 220, 220) ---apple-system-placeholder-text : rgba(0, 0, 0, 0.247) ---apple-system-find-highlight-background : rgb(255, 255, 0) ---apple-system-label : rgba(0, 0, 0, 0.847) ---apple-system-secondary-label : rgba(0, 0, 0, 0.498) ---apple-system-tertiary-label : rgba(0, 0, 0, 0.247) ---apple-system-quaternary-label : rgba(0, 0, 0, 0.098) ---apple-system-grid : rgb(204, 204, 204) ---apple-system-separator : rgba(0, 0, 0, 0.098) ---apple-system-container-border : rgba(0, 0, 0, 0.247) --current-color with inherited -apple-system-label : rgba(0, 0, 0, 0.847) -diff --git a/LayoutTests/platform/mac-catalina/fast/css/continuationCrash-expected.txt b/LayoutTests/platform/mac-catalina/fast/css/continuationCrash-expected.txt -deleted file mode 100644 -index 4e70dac2052e32287cc4e3312b2fd81db2c5ed11..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/css/continuationCrash-expected.txt -+++ /dev/null -@@ -1,66 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock (anonymous) at (0,0) size 784x0 -- RenderInline {SPAN} at (0,0) size 0x0 -- RenderInline {SPAN} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {H4} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 83x18 -- text run at (0,0) width 83: "Instructions" -- RenderBlock {P} at (0,39) size 784x19 -- RenderText {#text} at (0,0) size 180x18 -- text run at (0,0) width 180: "Click the following buttons." -- RenderBlock {OL} at (0,73) size 784x167 -- RenderListItem {LI} at (40,0) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "1" -- RenderText {#text} at (0,0) size 199x18 -- text run at (0,0) width 199: "Start with the outmost left one." -- RenderListItem {LI} at (40,18) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "2" -- RenderText {#text} at (0,0) size 138x18 -- text run at (0,0) width 138: "Click the middle one." -- RenderListItem {LI} at (40,36) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "3" -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "(The ouline will not be updated correctly.)" -- RenderListItem {LI} at (40,54) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "4" -- RenderText {#text} at (0,0) size 142x18 -- text run at (0,0) width 142: "Click the right button." -- RenderListItem {LI} at (40,72) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "5" -- RenderText {#text} at (0,0) size 473x18 -- text run at (0,0) width 473: "This will crash Safari 1.3 (v176 and v170, no other configurations tested)." -- RenderListItem {LI} at (40,90) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "6" -- RenderText {#text} at (0,0) size 300x18 -- text run at (0,0) width 300: "The combination 2. 1. 3. will also crash Safari." -- RenderListItem {LI} at (40,108) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "7" -- RenderText {#text} at (0,0) size 457x18 -- text run at (0,0) width 457: "1. 3. will not crash Safari. (But the outline should vanish. Shouldn't it?)" -- RenderListItem {LI} at (40,126) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "8" -- RenderText {#text} at (0,0) size 205x18 -- text run at (0,0) width 205: "2. 3. will not crash Safari either." -- RenderBlock (anonymous) at (40,144) size 744x22 -- RenderButton {INPUT} at (2,2) size 133x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 117x13 -- RenderText at (0,0) size 117x13 -- text run at (0,0) width 117: "1. Set outline property" -- RenderText {#text} at (136,1) size 5x18 -- text run at (136,1) width 5: " " -- RenderButton {INPUT} at (142,2) size 136x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 120x13 -- RenderText at (0,0) size 120x13 -- text run at (0,0) width 120: "2. Set display property" -- RenderText {#text} at (279,1) size 5x18 -- text run at (279,1) width 5: " " -- RenderButton {INPUT} at (285,2) size 147x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 131x13 -- RenderText at (0,0) size 131x13 -- text run at (0,0) width 131: "3. Replace span-element" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/css/rtl-ordering-expected.txt b/LayoutTests/platform/mac-catalina/fast/css/rtl-ordering-expected.txt -deleted file mode 100644 -index d53f257a106dd45442276aecf0dd491ddc585781..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/css/rtl-ordering-expected.txt -+++ /dev/null -@@ -1,45 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 218x18 -- text run at (0,0) width 218: "This tests for a regression against " -- RenderInline {I} at (0,0) size 722x36 -- RenderInline {A} at (0,0) size 354x18 [color=#0000EE] -- RenderText {#text} at (217,0) size 354x18 -- text run at (217,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=6334" -- RenderText {#text} at (570,0) size 722x36 -- text run at (570,0) width 152: " REGRESSION: text is reversed on \"visual Hebrew\" pages" -- RenderText {#text} at (373,18) size 5x18 -- text run at (373,18) width 5: "." -- RenderBlock {HR} at (0,52) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,70) size 784x19 -- RenderText {#text} at (0,1) size 310x18 -- text run at (0,1) width 310: "The text on both buttons should like this: \x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}" -- RenderBlock (anonymous) at (0,105) size 784x44 -- RenderButton {BUTTON} at (2,2) size 46x18 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 30x13 -- RenderText {#text} at (0,0) size 30x13 -- text run at (0,0) width 30: "\x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}" -- RenderText {#text} at (49,1) size 5x18 -- text run at (49,1) width 5: " " -- RenderBR {BR} at (53,1) size 1x18 -- RenderButton {INPUT} at (2,24) size 46x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 30x13 -- RenderText at (0,0) size 30x13 -- text run at (0,0) width 30 RTL: "\x{5DB}\x{5E4}\x{5EA}\x{5D5}\x{5E8}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,157) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,175) size 784x18 -- RenderText {#text} at (0,0) size 255x18 -- text run at (0,0) width 255: "The following lines should be identical:" -- RenderBlock {P} at (0,209) size 784x19 -- RenderText {#text} at (0,1) size 81x18 -- text run at (0,1) width 16: "21" -- text run at (16,1) width 65 RTL: "\x{5D4}\x{5DE}\x{5D0}\x{5D4} \x{5D4}-" -- RenderBlock {P} at (0,244) size 784x19 -- RenderText {#text} at (0,1) size 81x18 -- text run at (0,1) width 81: "21-\x{5D4} \x{5D4}\x{5D0}\x{5DE}\x{5D4}" -diff --git a/LayoutTests/platform/mac-catalina/fast/css/text-overflow-input-expected.txt b/LayoutTests/platform/mac-catalina/fast/css/text-overflow-input-expected.txt -deleted file mode 100644 -index ffb1e1501c35fe968678dba2f15a53d795350b42..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/css/text-overflow-input-expected.txt -+++ /dev/null -@@ -1,246 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x382 -- RenderBlock {HTML} at (0,0) size 800x382 -- RenderBody {BODY} at (8,16) size 784x350 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "This test is a basic check for using text-overflow." -- RenderBlock {P} at (0,34) size 784x110 -- RenderText {#text} at (0,0) size 489x18 -- text run at (0,0) width 489: "Apply \"text-overflow:clip\" to inputs. The following input should be clipped:" -- RenderBR {BR} at (488,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (150,20) size 5x18 -- text run at (150,20) width 5: " " -- RenderTextControl {INPUT} at (156,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (332,20) size 5x18 -- text run at (332,20) width 5: " " -- RenderTextControl {INPUT} at (338,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (487,20) size 5x18 -- text run at (487,20) width 5: " " -- RenderTextControl {INPUT} at (493,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,43) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderBR {BR} at (150,43) size 1x18 -- RenderTextControl {INPUT} at (2,66) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (149,66) size 5x18 -- text run at (149,66) width 5: " " -- RenderTextControl {INPUT} at (155,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (330,66) size 5x18 -- text run at (330,66) width 5: " " -- RenderTextControl {INPUT} at (336,66) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (484,66) size 5x18 -- text run at (484,66) width 5: " " -- RenderTextControl {INPUT} at (490,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,89) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,160) size 784x110 -- RenderText {#text} at (0,0) size 546x18 -- text run at (0,0) width 546: "Apply \"text-overflow:ellipsis\" to inputs. The following input should show an ellipsis:" -- RenderBR {BR} at (545,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (150,20) size 5x18 -- text run at (150,20) width 5: " " -- RenderTextControl {INPUT} at (156,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (332,20) size 5x18 -- text run at (332,20) width 5: " " -- RenderTextControl {INPUT} at (338,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (487,20) size 5x18 -- text run at (487,20) width 5: " " -- RenderTextControl {INPUT} at (493,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,43) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderBR {BR} at (150,43) size 1x18 -- RenderTextControl {INPUT} at (2,66) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (149,66) size 5x18 -- text run at (149,66) width 5: " " -- RenderTextControl {INPUT} at (155,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (330,66) size 5x18 -- text run at (330,66) width 5: " " -- RenderTextControl {INPUT} at (336,66) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (484,66) size 5x18 -- text run at (484,66) width 5: " " -- RenderTextControl {INPUT} at (490,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,89) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,286) size 784x64 -- RenderText {#text} at (0,0) size 237x18 -- text run at (0,0) width 237: "Dynamic style change text-overflow:" -- RenderBR {BR} at (236,0) size 1x18 -- RenderText {#text} at (0,20) size 247x18 -- text run at (0,20) width 247: "Clip to ellipsis (should show ellipsis): " -- RenderTextControl {INPUT} at (248,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (397,20) size 5x18 -- text run at (397,20) width 5: " " -- RenderTextControl {INPUT} at (403,20) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (551,20) size 5x18 -- text run at (551,20) width 5: " " -- RenderBR {BR} at (555,20) size 1x18 -- RenderText {#text} at (0,43) size 270x18 -- text run at (0,43) width 270: "Ellipsis to clip (should not show ellipsis): " -- RenderTextControl {INPUT} at (271,43) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (420,43) size 5x18 -- text run at (420,43) width 5: " " -- RenderTextControl {INPUT} at (426,43) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (575,43) size 5x18 -- text run at (575,43) width 5: " " -- RenderBR {BR} at (579,43) size 1x18 --layer at (13,73) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,73) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (176,73) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (11,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (176,73) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (350,73) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (513,73) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,96) size 141x13 scrollWidth 282 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 282x13 -- text run at (0,0) width 282: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (13,119) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,119) size 140x13 -- RenderBlock {DIV} at (3,3) size 140x13 --layer at (186,119) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (22,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (186,119) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 --layer at (348,119) size 140x13 scrollX 149 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (521,119) size 140x13 scrollX 149 scrollWidth 289 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,142) size 140x13 scrollX 142 scrollWidth 282 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-141,0) size 282x13 -- text run at (-141,0) width 281 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (13,199) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,199) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (176,199) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (11,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (176,199) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (350,199) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (513,199) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,222) size 141x13 scrollWidth 282 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 282x13 -- text run at (0,0) width 282: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (13,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,245) size 140x13 -- RenderBlock {DIV} at (3,3) size 140x13 --layer at (186,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (22,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (186,245) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 --layer at (348,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (521,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,268) size 140x13 scrollX 141 scrollWidth 281 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-141,0) size 282x13 -- text run at (-141,0) width 281 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (259,325) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (259,325) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (414,325) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (283,348) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (283,348) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (438,348) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" -diff --git a/LayoutTests/platform/mac-catalina/fast/dom/HTMLInputElement/input-slider-update-expected.txt b/LayoutTests/platform/mac-catalina/fast/dom/HTMLInputElement/input-slider-update-expected.txt -deleted file mode 100644 -index bfbe4c2682c20a5144eaa6070e5b8855edaa42d2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/dom/HTMLInputElement/input-slider-update-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderSlider {INPUT} at (2,2) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (114,0) size 15x15 -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset-expected.txt -deleted file mode 100644 -index 3cea5a5175685a21760181ba4fae8016a3d32b3c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x99 -- RenderBlock {HTML} at (0,0) size 800x99 -- RenderBody {BODY} at (8,16) size 784x75 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 780x36 -- text run at (0,0) width 780: "This tests that that an autofilled and viewable Strong Password decorated text field reverts to its original appearance when" -- text run at (0,18) width 340: "the form is reset. It can only be tested in the test tool." -- RenderBlock {FORM} at (0,52) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 0x0 --layer at (13,73) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 47x13 -- text run at (0,0) width 47: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/basic-inputs-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/basic-inputs-expected.txt -deleted file mode 100644 -index 427e6961011dbe702944e712b4570e302ec846fc..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/basic-inputs-expected.txt -+++ /dev/null -@@ -1,88 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 470x582 -- RenderBlock (anonymous) at (0,0) size 470x306 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "This tests basic inputs. Here's what you should see:" -- RenderBR {BR} at (327,0) size 1x18 -- RenderBR {BR} at (0,18) size 0x18 -- RenderText {#text} at (0,36) size 461x54 -- text run at (0,36) width 442: "first line: the letter \"a\" and then a text input field filled with repeating" -- text run at (0,54) width 86: "\"foobarbaz\", " -- text run at (85,54) width 376: "then the word \"text\" followed by a disabled text input field" -- text run at (0,72) width 331: "filled with \"foo\" and then the letter \"b\" and then \"a\"" -- RenderBR {BR} at (330,72) size 1x18 -- RenderBR {BR} at (0,90) size 0x18 -- RenderText {#text} at (0,108) size 467x54 -- text run at (0,108) width 437: "second line: and then a password input field that's filled and then the" -- text run at (0,126) width 467: "word \"password\" and then a disabled password field that's filled and then" -- text run at (0,144) width 82: "the letter \"b\"" -- RenderBR {BR} at (81,144) size 1x18 -- RenderBR {BR} at (0,162) size 0x18 -- RenderText {#text} at (0,180) size 459x36 -- text run at (0,180) width 459: "third line: the letter \"a\" and then a checkbox (unchecked) with the word" -- text run at (0,198) width 356: "\"checkbox\" and then a disabled checkbox and letter \"b\"" -- RenderBR {BR} at (355,198) size 1x18 -- RenderBR {BR} at (0,216) size 0x18 -- RenderText {#text} at (0,234) size 457x54 -- text run at (0,234) width 411: "fourth line: the last line has the letter \"a\" and then a redio button" -- text run at (0,252) width 457: "(unselected) and then the word \"radio\" and then a disabled radio button" -- text run at (0,270) width 109: "and the letter \"b\"" -- RenderBR {BR} at (108,270) size 1x18 -- RenderBR {BR} at (0,288) size 0x18 -- RenderBlock {DIV} at (10,316) size 450x48 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,3) size 8x18 -- text run at (1,3) width 8: "a" -- RenderTextControl {INPUT} at (10,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (158,3) size 29x18 -- text run at (158,3) width 29: "text " -- RenderTextControl {INPUT} at (188,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (336,3) size 20x18 -- text run at (336,3) width 13: "b " -- text run at (348,3) width 8: "a" -- RenderTextControl {INPUT} at (3,26) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (151,26) size 66x18 -- text run at (151,26) width 66: "password " -- RenderTextControl {INPUT} at (218,26) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (366,26) size 9x18 -- text run at (366,26) width 9: "b" -- RenderBlock {DIV} at (10,374) size 450x21 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,1) size 8x18 -- text run at (1,1) width 8: "a" -- RenderBlock {INPUT} at (10,5) size 13x12 -- RenderText {#text} at (24,1) size 66x18 -- text run at (24,1) width 66: "checkbox " -- RenderBlock {INPUT} at (91,5) size 13x12 -- RenderText {#text} at (105,1) size 9x18 -- text run at (105,1) width 9: "b" -- RenderBlock {DIV} at (10,405) size 450x21 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,1) size 8x18 -- text run at (1,1) width 8: "a" -- RenderBlock {INPUT} at (10,5) size 13x12 -- RenderText {#text} at (24,1) size 37x18 -- text run at (24,1) width 37: "radio " -- RenderBlock {INPUT} at (62,5) size 13x12 -- RenderText {#text} at (76,1) size 9x18 -- text run at (76,1) width 9: "b" --layer at (31,330) size 141x13 scrollWidth 160 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 160x13 -- text run at (0,0) width 160: "foobarbazfoobarbazfoobarbaz" --layer at (210,330) size 140x13 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 17x13 -- text run at (0,0) width 17: "foo" --layer at (24,353) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 16x13 -- text run at (0,0) width 16: "\x{2022}\x{2022}\x{2022}" --layer at (239,353) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 16x13 -- text run at (0,0) width 16: "\x{2022}\x{2022}\x{2022}" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/basic-textareas-quirks-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/basic-textareas-quirks-expected.txt -deleted file mode 100644 -index 06fff546856c204b9b1c17382c5ddc23e8263f50..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/basic-textareas-quirks-expected.txt -+++ /dev/null -@@ -1,829 +0,0 @@ --layer at (0,0) size 785x1065 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x1065 -- RenderBlock {HTML} at (0,0) size 785x1065 -- RenderBody {BODY} at (8,8) size 769x584 -- RenderBlock (floating) {DIV} at (0,0) size 352x829 [border: (1px solid #FF0000)] -- RenderBlock (anonymous) at (1,1) size 350x14 -- RenderText {#text} at (0,-2) size 179x17 -- text run at (0,-2) width 179: "Plain textarea with little content" -- RenderBlock {DIV} at (1,15) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (179,24) size 14x17 -- text run at (179,24) width 14: " B" -- RenderBlock (anonymous) at (1,56) size 350x14 -- RenderText {#text} at (0,-2) size 77x17 -- text run at (0,-2) width 77: "Plain textarea" -- RenderBlock {DIV} at (1,70) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (179,24) size 14x17 -- text run at (179,24) width 14: " B" -- RenderBlock (anonymous) at (1,111) size 350x14 -- RenderText {#text} at (0,-2) size 98x17 -- text run at (0,-2) width 98: "Disabled textarea" -- RenderBlock {DIV} at (1,125) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (179,24) size 14x17 -- text run at (179,24) width 14: " B" -- RenderBlock (anonymous) at (1,166) size 350x14 -- RenderText {#text} at (0,-2) size 123x17 -- text run at (0,-2) width 123: "style=\"padding:10px\"" -- RenderBlock {DIV} at (1,180) size 352x57 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,40) size 14x17 -- text run at (1,40) width 14: "A " -- RenderText {#text} at (195,40) size 14x17 -- text run at (195,40) width 14: " B" -- RenderBlock (anonymous) at (1,237) size 350x14 -- RenderText {#text} at (0,-2) size 116x17 -- text run at (0,-2) width 116: "style=\"padding:0px\"" -- RenderBlock {DIV} at (1,251) size 352x37 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,20) size 14x17 -- text run at (1,20) width 14: "A " -- RenderText {#text} at (175,20) size 14x17 -- text run at (175,20) width 14: " B" -- RenderBlock (anonymous) at (1,288) size 350x14 -- RenderText {#text} at (0,-2) size 118x17 -- text run at (0,-2) width 118: "style=\"margin:10px\"" -- RenderBlock {DIV} at (1,302) size 352x57 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,40) size 14x17 -- text run at (1,40) width 14: "A " -- RenderText {#text} at (195,40) size 14x17 -- text run at (195,40) width 14: " B" -- RenderBlock (anonymous) at (1,359) size 350x14 -- RenderText {#text} at (0,-2) size 111x17 -- text run at (0,-2) width 111: "style=\"margin:0px\"" -- RenderBlock {DIV} at (1,373) size 352x37 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,20) size 14x17 -- text run at (1,20) width 14: "A " -- RenderText {#text} at (175,20) size 14x17 -- text run at (175,20) width 14: " B" -- RenderBlock (anonymous) at (1,410) size 350x14 -- RenderText {#text} at (0,-2) size 38x17 -- text run at (0,-2) width 38: "cols=3" -- RenderBlock {DIV} at (1,424) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (60,24) size 14x17 -- text run at (60,24) width 14: " B" -- RenderBlock (anonymous) at (1,465) size 350x14 -- RenderText {#text} at (0,-2) size 43x17 -- text run at (0,-2) width 43: "rows=3" -- RenderBlock {DIV} at (1,479) size 352x54 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,37) size 14x17 -- text run at (1,37) width 14: "A " -- RenderText {#text} at (179,37) size 14x17 -- text run at (179,37) width 14: " B" -- RenderBlock (anonymous) at (1,533) size 350x14 -- RenderText {#text} at (0,-2) size 45x17 -- text run at (0,-2) width 45: "cols=10" -- RenderBlock {DIV} at (1,547) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (109,24) size 14x17 -- text run at (109,24) width 14: " B" -- RenderBlock (anonymous) at (1,588) size 350x14 -- RenderText {#text} at (0,-2) size 50x17 -- text run at (0,-2) width 50: "rows=10" -- RenderBlock {DIV} at (1,602) size 352x145 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,128) size 14x17 -- text run at (1,128) width 14: "A " -- RenderText {#text} at (179,128) size 14x17 -- text run at (179,128) width 14: " B" -- RenderBlock (anonymous) at (1,747) size 350x14 -- RenderText {#text} at (0,-2) size 84x17 -- text run at (0,-2) width 84: "cols=5 rows=4" -- RenderBlock {DIV} at (1,761) size 352x67 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,50) size 14x17 -- text run at (1,50) width 14: "A " -- RenderText {#text} at (74,50) size 14x17 -- text run at (74,50) width 14: " B" -- RenderBlock (floating) {DIV} at (352,0) size 352x1057 [border: (1px solid #FF0000)] -- RenderBlock (anonymous) at (1,1) size 350x14 -- RenderText {#text} at (0,-2) size 110x17 -- text run at (0,-2) width 110: "style=\"width:60px\"" -- RenderBlock {DIV} at (1,15) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (74,24) size 14x17 -- text run at (74,24) width 14: " B" -- RenderBlock (anonymous) at (1,56) size 350x14 -- RenderText {#text} at (0,-2) size 191x17 -- text run at (0,-2) width 191: "style=\"width:60px;padding:20px\"" -- RenderBlock {DIV} at (1,70) size 352x77 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,60) size 14x17 -- text run at (1,60) width 14: "A " -- RenderText {#text} at (74,60) size 14x17 -- text run at (74,60) width 14: " B" -- RenderBlock (anonymous) at (1,147) size 350x14 -- RenderText {#text} at (0,-2) size 170x17 -- text run at (0,-2) width 170: "style=\"width:60px;padding:0\"" -- RenderBlock {DIV} at (1,161) size 352x37 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,20) size 14x17 -- text run at (1,20) width 14: "A " -- RenderText {#text} at (74,20) size 14x17 -- text run at (74,20) width 14: " B" -- RenderBlock (anonymous) at (1,198) size 350x14 -- RenderText {#text} at (0,-2) size 113x17 -- text run at (0,-2) width 113: "style=\"height:60px\"" -- RenderBlock {DIV} at (1,212) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (179,48) size 14x17 -- text run at (179,48) width 14: " B" -- RenderBlock (anonymous) at (1,277) size 350x14 -- RenderText {#text} at (0,-2) size 181x17 -- text run at (0,-2) width 181: "style=\"width:60px;height:60px\"" -- RenderBlock {DIV} at (1,291) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (74,48) size 14x17 -- text run at (74,48) width 14: " B" -- RenderBlock (anonymous) at (1,356) size 350x14 -- RenderText {#text} at (0,-2) size 138x17 -- text run at (0,-2) width 138: "style=\"overflow:hidden\"" -- RenderBlock {DIV} at (1,370) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (179,24) size 14x17 -- text run at (179,24) width 14: " B" -- RenderBlock (anonymous) at (1,411) size 350x14 -- RenderText {#text} at (0,-2) size 131x17 -- text run at (0,-2) width 131: "style=\"overflow:scroll\"" -- RenderBlock {DIV} at (1,425) size 352x56 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,39) size 14x17 -- text run at (1,39) width 14: "A " -- RenderText {#text} at (179,39) size 14x17 -- text run at (179,39) width 14: " B" -- RenderBlock (anonymous) at (1,481) size 350x14 -- RenderText {#text} at (0,-2) size 276x17 -- text run at (0,-2) width 276: "style=\"overflow:hidden;width:60px;height:60px\"" -- RenderBlock {DIV} at (1,495) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (74,48) size 14x17 -- text run at (74,48) width 14: " B" -- RenderBlock (anonymous) at (1,560) size 350x14 -- RenderText {#text} at (0,-2) size 269x17 -- text run at (0,-2) width 269: "style=\"overflow:scroll;width:60px;height:60px\"" -- RenderBlock {DIV} at (1,574) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (74,48) size 14x17 -- text run at (74,48) width 14: " B" -- RenderBlock (anonymous) at (1,639) size 350x14 -- RenderText {#text} at (0,-2) size 222x17 -- text run at (0,-2) width 222: "cols=5 style=\"width:60px;height:60px\"" -- RenderBlock {DIV} at (1,653) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (74,48) size 14x17 -- text run at (74,48) width 14: " B" -- RenderBlock (anonymous) at (1,718) size 350x14 -- RenderText {#text} at (0,-2) size 226x17 -- text run at (0,-2) width 226: "rows=4 style=\"width:60px;height:60px\"" -- RenderBlock {DIV} at (1,732) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (74,48) size 14x17 -- text run at (74,48) width 14: " B" -- RenderBlock (anonymous) at (1,797) size 350x14 -- RenderText {#text} at (0,-2) size 267x17 -- text run at (0,-2) width 267: "cols=5 rows=4 style=\"width:60px;height:60px\"" -- RenderBlock {DIV} at (1,811) size 352x65 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,48) size 14x17 -- text run at (1,48) width 14: "A " -- RenderText {#text} at (74,48) size 14x17 -- text run at (74,48) width 14: " B" -- RenderBlock (anonymous) at (1,876) size 350x14 -- RenderText {#text} at (0,-2) size 64x17 -- text run at (0,-2) width 64: "wrap=\"off\"" -- RenderBlock {DIV} at (1,890) size 352x56 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,39) size 14x17 -- text run at (1,39) width 14: "A " -- RenderText {#text} at (179,39) size 14x17 -- text run at (179,39) width 5: " " -- text run at (183,39) width 10: "B" -- RenderBlock (anonymous) at (1,946) size 350x14 -- RenderText {#text} at (0,-2) size 73x17 -- text run at (0,-2) width 73: "wrap=\"hard\"" -- RenderBlock {DIV} at (1,960) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (179,24) size 14x17 -- text run at (179,24) width 5: " " -- text run at (183,24) width 10: "B" -- RenderBlock (anonymous) at (1,1001) size 350x14 -- RenderText {#text} at (0,-2) size 69x17 -- text run at (0,-2) width 69: "wrap=\"soft\"" -- RenderBlock {DIV} at (1,1015) size 352x41 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,24) size 14x17 -- text run at (1,24) width 14: "A " -- RenderText {#text} at (179,24) size 14x17 -- text run at (179,24) width 5: " " -- text run at (183,24) width 10: "B" --layer at (26,26) size 161x32 clip at (27,27) size 159x30 -- RenderTextControl {TEXTAREA} at (16,3) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderText {#text} at (0,0) size 98x13 -- text run at (0,0) width 98: "Lorem ipsum dolor" --layer at (26,81) size 161x32 clip at (27,82) size 144x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (16,3) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (26,136) size 161x32 clip at (27,137) size 144x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (16,3) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 [color=#545454] -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (26,191) size 177x48 clip at (27,192) size 160x46 scrollHeight 72 -- RenderTextControl {TEXTAREA} at (16,3) size 178x48 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (11,11) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (26,262) size 157x28 clip at (27,263) size 140x26 scrollHeight 52 -- RenderTextControl {TEXTAREA} at (16,3) size 158x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (1,1) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (34,321) size 161x32 clip at (35,322) size 144x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (24,11) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (24,382) size 161x32 clip at (25,383) size 144x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (14,1) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (26,435) size 42x32 clip at (27,436) size 25x30 scrollHeight 329 -- RenderTextControl {TEXTAREA} at (16,3) size 43x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 21x325 -- RenderText {#text} at (0,0) size 21x325 -- text run at (0,0) width 17: "Lor" -- text run at (0,13) width 16: "em" -- text run at (15,13) width 5: " " -- text run at (0,26) width 16: "ips" -- text run at (0,39) width 17: "um" -- text run at (16,39) width 4: " " -- text run at (0,52) width 17: "dol" -- text run at (0,65) width 11: "or" -- text run at (10,65) width 4: " " -- text run at (0,78) width 15: "AB" -- text run at (0,91) width 16: "CD" -- text run at (0,104) width 13: "EF" -- text run at (0,117) width 20: "GHI" -- text run at (0,130) width 20: "JKL" -- text run at (0,143) width 18: "MN" -- text run at (0,156) width 16: "OP" -- text run at (0,169) width 16: "QR" -- text run at (0,182) width 15: "ST" -- text run at (0,195) width 16: "UV" -- text run at (0,208) width 19: "WX" -- text run at (0,221) width 15: "YZ" -- text run at (14,221) width 4: " " -- text run at (0,234) width 20: "abc" -- text run at (0,247) width 18: "def" -- text run at (0,260) width 19: "ghij" -- text run at (0,273) width 19: "klm" -- text run at (0,286) width 20: "nop" -- text run at (0,299) width 21: "qrst" -- text run at (0,312) width 13: "uv" -- text run at (12,312) width 4: " " --layer at (26,490) size 161x45 clip at (27,491) size 144x43 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (16,3) size 162x45 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (26,558) size 91x32 clip at (27,559) size 74x30 scrollHeight 95 -- RenderTextControl {TEXTAREA} at (16,3) size 92x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 70x91 -- RenderText {#text} at (0,0) size 70x91 -- text run at (0,0) width 68: "Lorem ipsum" -- text run at (67,0) width 3: " " -- text run at (0,13) width 28: "dolor" -- text run at (27,13) width 4: " " -- text run at (0,26) width 70: "ABCDEFGHIJ" -- text run at (0,39) width 63: "KLMNOPQR" -- text run at (0,52) width 63: "STUVWXYZ" -- text run at (62,52) width 4: " " -- text run at (0,65) width 64: "abcdefghijkl" -- text run at (0,78) width 63: "mnopqrstuv" -- text run at (62,78) width 4: " " --layer at (26,613) size 161x136 clip at (27,614) size 159x134 -- RenderTextControl {TEXTAREA} at (16,3) size 162x136 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x52 -- RenderText {#text} at (0,0) size 155x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 155: "ABCDEFGHIJKLMNOPQRSTU" -- text run at (0,26) width 41: "VWXYZ" -- text run at (40,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (26,772) size 56x58 clip at (27,773) size 39x56 scrollHeight 186 -- RenderTextControl {TEXTAREA} at (16,3) size 57x58 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 35x182 -- RenderText {#text} at (0,0) size 35x182 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 3: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 31: "ABCD" -- text run at (0,52) width 33: "EFGHI" -- text run at (0,65) width 30: "JKLM" -- text run at (0,78) width 33: "NOPQ" -- text run at (0,91) width 30: "RSTU" -- text run at (0,104) width 33: "VWXY" -- text run at (0,117) width 8: "Z" -- text run at (7,117) width 4: " " -- text run at (0,130) width 33: "abcde" -- text run at (0,143) width 32: "fghijkl" -- text run at (0,156) width 30: "mnop" -- text run at (0,169) width 34: "qrstuv" -- text run at (33,169) width 2: " " --layer at (376,26) size 60x32 clip at (377,27) size 43x30 scrollHeight 173 -- RenderTextControl {TEXTAREA} at (14,3) size 61x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 39x169 -- RenderText {#text} at (0,0) size 39x169 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 32: "FGHIJ" -- text run at (0,65) width 32: "KLMN" -- text run at (0,78) width 39: "OPQRS" -- text run at (0,91) width 34: "TUVW" -- text run at (0,104) width 23: "XYZ" -- text run at (22,104) width 4: " " -- text run at (0,117) width 37: "abcdef" -- text run at (0,130) width 38: "ghijklm" -- text run at (0,143) width 37: "nopqrs" -- text run at (0,156) width 17: "tuv" -- text run at (16,156) width 4: " " --layer at (376,81) size 60x68 clip at (377,82) size 43x66 scrollHeight 924 -- RenderTextControl {TEXTAREA} at (14,3) size 61x68 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (21,21) size 3x884 -- RenderText {#text} at (0,0) size 11x884 -- text run at (0,0) width 7: "L" -- text run at (0,13) width 7: "o" -- text run at (0,26) width 5: "r" -- text run at (0,39) width 7: "e" -- text run at (0,52) width 10: "m" -- text run at (0,65) width 3: " " -- text run at (0,78) width 3: "i" -- text run at (0,91) width 7: "p" -- text run at (0,104) width 6: "s" -- text run at (0,117) width 7: "u" -- text run at (0,130) width 10: "m" -- text run at (0,143) width 3: " " -- text run at (0,156) width 7: "d" -- text run at (0,169) width 7: "o" -- text run at (0,182) width 3: "l" -- text run at (0,195) width 7: "o" -- text run at (0,208) width 5: "r" -- text run at (0,221) width 3: " " -- text run at (0,234) width 8: "A" -- text run at (0,247) width 8: "B" -- text run at (0,260) width 8: "C" -- text run at (0,273) width 9: "D" -- text run at (0,286) width 7: "E" -- text run at (0,299) width 7: "F" -- text run at (0,312) width 9: "G" -- text run at (0,325) width 9: "H" -- text run at (0,338) width 4: "I" -- text run at (0,351) width 6: "J" -- text run at (0,364) width 8: "K" -- text run at (0,377) width 7: "L" -- text run at (0,390) width 10: "M" -- text run at (0,403) width 9: "N" -- text run at (0,416) width 9: "O" -- text run at (0,429) width 8: "P" -- text run at (0,442) width 9: "Q" -- text run at (0,455) width 8: "R" -- text run at (0,468) width 8: "S" -- text run at (0,481) width 8: "T" -- text run at (0,494) width 9: "U" -- text run at (0,507) width 8: "V" -- text run at (0,520) width 11: "W" -- text run at (0,533) width 8: "X" -- text run at (0,546) width 8: "Y" -- text run at (0,559) width 8: "Z" -- text run at (0,572) width 3: " " -- text run at (0,585) width 7: "a" -- text run at (0,598) width 7: "b" -- text run at (0,611) width 7: "c" -- text run at (0,624) width 7: "d" -- text run at (0,637) width 7: "e" -- text run at (0,650) width 5: "f" -- text run at (0,663) width 7: "g" -- text run at (0,676) width 7: "h" -- text run at (0,689) width 3: "i" -- text run at (0,702) width 3: "j" -- text run at (0,715) width 7: "k" -- text run at (0,728) width 3: "l" -- text run at (0,741) width 10: "m" -- text run at (0,754) width 7: "n" -- text run at (0,767) width 7: "o" -- text run at (0,780) width 7: "p" -- text run at (0,793) width 7: "q" -- text run at (0,806) width 5: "r" -- text run at (0,819) width 6: "s" -- text run at (0,832) width 5: "t" -- text run at (0,845) width 7: "u" -- text run at (0,858) width 7: "v" -- text run at (0,871) width 3: " " --layer at (376,172) size 60x28 clip at (377,173) size 43x26 scrollHeight 156 -- RenderTextControl {TEXTAREA} at (14,3) size 61x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (1,1) size 43x156 -- RenderText {#text} at (0,0) size 43x156 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 40: "FGHIJK" -- text run at (0,65) width 40: "LMNOP" -- text run at (0,78) width 39: "QRSTU" -- text run at (0,91) width 41: "VWXYZ" -- text run at (40,91) width 3: " " -- text run at (0,104) width 43: "abcdefg" -- text run at (0,117) width 38: "hijklmn" -- text run at (0,130) width 41: "opqrstu" -- text run at (0,143) width 7: "v" -- text run at (6,143) width 4: " " --layer at (378,221) size 161x60 clip at (379,222) size 159x58 -- RenderTextControl {TEXTAREA} at (16,1) size 162x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x52 -- RenderText {#text} at (0,0) size 155x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 155: "ABCDEFGHIJKLMNOPQRSTU" -- text run at (0,26) width 41: "VWXYZ" -- text run at (40,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (376,300) size 60x60 clip at (377,301) size 43x58 scrollHeight 173 -- RenderTextControl {TEXTAREA} at (14,1) size 61x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 39x169 -- RenderText {#text} at (0,0) size 39x169 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 32: "FGHIJ" -- text run at (0,65) width 32: "KLMN" -- text run at (0,78) width 39: "OPQRS" -- text run at (0,91) width 34: "TUVW" -- text run at (0,104) width 23: "XYZ" -- text run at (22,104) width 4: " " -- text run at (0,117) width 37: "abcdef" -- text run at (0,130) width 38: "ghijklm" -- text run at (0,143) width 37: "nopqrs" -- text run at (0,156) width 17: "tuv" -- text run at (16,156) width 4: " " --layer at (378,381) size 161x32 clip at (379,382) size 159x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (16,3) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x52 -- RenderText {#text} at (0,0) size 155x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 155: "ABCDEFGHIJKLMNOPQRSTU" -- text run at (0,26) width 41: "VWXYZ" -- text run at (40,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (378,436) size 161x47 clip at (379,437) size 144x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (16,3) size 162x47 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 98: "Lorem ipsum dolor" -- text run at (97,0) width 4: " " -- text run at (0,13) width 140: "ABCDEFGHIJKLMNOPQRS" -- text run at (0,26) width 56: "TUVWXYZ" -- text run at (55,26) width 4: " " -- text run at (0,39) width 127: "abcdefghijklmnopqrstuv" -- text run at (126,39) width 4: " " --layer at (376,504) size 60x60 clip at (377,505) size 58x58 scrollHeight 134 -- RenderTextControl {TEXTAREA} at (14,1) size 61x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 54x130 -- RenderText {#text} at (0,0) size 54x130 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 53: "ABCDEFG" -- text run at (0,52) width 49: "HIJKLMN" -- text run at (0,65) width 54: "OPQRSTU" -- text run at (0,78) width 41: "VWXYZ" -- text run at (40,78) width 4: " " -- text run at (0,91) width 53: "abcdefghi" -- text run at (0,104) width 53: "jklmnopqr" -- text run at (0,117) width 23: "stuv" -- text run at (22,117) width 4: " " --layer at (376,583) size 60x60 clip at (377,584) size 43x43 scrollHeight 173 -- RenderTextControl {TEXTAREA} at (14,1) size 61x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 39x169 -- RenderText {#text} at (0,0) size 39x169 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 32: "FGHIJ" -- text run at (0,65) width 32: "KLMN" -- text run at (0,78) width 39: "OPQRS" -- text run at (0,91) width 34: "TUVW" -- text run at (0,104) width 23: "XYZ" -- text run at (22,104) width 4: " " -- text run at (0,117) width 37: "abcdef" -- text run at (0,130) width 38: "ghijklm" -- text run at (0,143) width 37: "nopqrs" -- text run at (0,156) width 17: "tuv" -- text run at (16,156) width 4: " " --layer at (376,662) size 60x60 clip at (377,663) size 43x58 scrollHeight 173 -- RenderTextControl {TEXTAREA} at (14,1) size 61x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 39x169 -- RenderText {#text} at (0,0) size 39x169 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 32: "FGHIJ" -- text run at (0,65) width 32: "KLMN" -- text run at (0,78) width 39: "OPQRS" -- text run at (0,91) width 34: "TUVW" -- text run at (0,104) width 23: "XYZ" -- text run at (22,104) width 4: " " -- text run at (0,117) width 37: "abcdef" -- text run at (0,130) width 38: "ghijklm" -- text run at (0,143) width 37: "nopqrs" -- text run at (0,156) width 17: "tuv" -- text run at (16,156) width 4: " " --layer at (376,741) size 60x60 clip at (377,742) size 43x58 scrollHeight 173 -- RenderTextControl {TEXTAREA} at (14,1) size 61x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 39x169 -- RenderText {#text} at (0,0) size 39x169 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 32: "FGHIJ" -- text run at (0,65) width 32: "KLMN" -- text run at (0,78) width 39: "OPQRS" -- text run at (0,91) width 34: "TUVW" -- text run at (0,104) width 23: "XYZ" -- text run at (22,104) width 4: " " -- text run at (0,117) width 37: "abcdef" -- text run at (0,130) width 38: "ghijklm" -- text run at (0,143) width 37: "nopqrs" -- text run at (0,156) width 17: "tuv" -- text run at (16,156) width 4: " " --layer at (376,820) size 60x60 clip at (377,821) size 43x58 scrollHeight 173 -- RenderTextControl {TEXTAREA} at (14,1) size 61x60 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 39x169 -- RenderText {#text} at (0,0) size 39x169 -- text run at (0,0) width 33: "Lorem" -- text run at (32,0) width 4: " " -- text run at (0,13) width 32: "ipsum" -- text run at (31,13) width 4: " " -- text run at (0,26) width 28: "dolor" -- text run at (27,26) width 4: " " -- text run at (0,39) width 38: "ABCDE" -- text run at (0,52) width 32: "FGHIJ" -- text run at (0,65) width 32: "KLMN" -- text run at (0,78) width 39: "OPQRS" -- text run at (0,91) width 34: "TUVW" -- text run at (0,104) width 23: "XYZ" -- text run at (22,104) width 4: " " -- text run at (0,117) width 37: "abcdef" -- text run at (0,130) width 38: "ghijklm" -- text run at (0,143) width 37: "nopqrs" -- text run at (0,156) width 17: "tuv" -- text run at (16,156) width 4: " " --layer at (378,901) size 161x47 clip at (379,902) size 144x30 scrollWidth 186 scrollHeight 212 -- RenderTextControl {TEXTAREA} at (16,3) size 162x47 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x208 -- RenderText {#text} at (0,0) size 184x195 -- text run at (0,0) width 4: " " -- text run at (3,0) width 1: " " -- text run at (0,13) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,13) width 1: " " -- text run at (0,26) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,26) width 1: " " -- text run at (0,39) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,39) width 1: " " -- text run at (0,52) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,52) width 1: " " -- text run at (0,65) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,65) width 1: " " -- text run at (0,78) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,78) width 1: " " -- text run at (0,91) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,91) width 1: " " -- text run at (0,104) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,104) width 1: " " -- text run at (0,117) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,117) width 1: " " -- text run at (0,130) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,130) width 1: " " -- text run at (0,143) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,143) width 1: " " -- text run at (0,156) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,156) width 1: " " -- text run at (0,169) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,169) width 1: " " -- text run at (0,182) width 184: "This is a text area with wrap=\"soft\"" -- text run at (183,182) width 1: " " -- RenderBR {BR} at (0,195) size 0x13 --layer at (378,971) size 161x32 clip at (379,972) size 144x30 scrollHeight 394 -- RenderTextControl {TEXTAREA} at (16,3) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x390 -- RenderText {#text} at (0,0) size 121x377 -- text run at (0,0) width 4: " " -- text run at (3,0) width 1: " " -- text run at (0,13) width 118: "This is a text area with" -- text run at (117,13) width 4: " " -- text run at (0,26) width 64: "wrap=\"soft\"" -- text run at (63,26) width 1: " " -- text run at (0,39) width 118: "This is a text area with" -- text run at (117,39) width 4: " " -- text run at (0,52) width 64: "wrap=\"soft\"" -- text run at (63,52) width 1: " " -- text run at (0,65) width 118: "This is a text area with" -- text run at (117,65) width 4: " " -- text run at (0,78) width 64: "wrap=\"soft\"" -- text run at (63,78) width 1: " " -- text run at (0,91) width 118: "This is a text area with" -- text run at (117,91) width 4: " " -- text run at (0,104) width 64: "wrap=\"soft\"" -- text run at (63,104) width 1: " " -- text run at (0,117) width 118: "This is a text area with" -- text run at (117,117) width 4: " " -- text run at (0,130) width 64: "wrap=\"soft\"" -- text run at (63,130) width 1: " " -- text run at (0,143) width 118: "This is a text area with" -- text run at (117,143) width 4: " " -- text run at (0,156) width 64: "wrap=\"soft\"" -- text run at (63,156) width 1: " " -- text run at (0,169) width 118: "This is a text area with" -- text run at (117,169) width 4: " " -- text run at (0,182) width 64: "wrap=\"soft\"" -- text run at (63,182) width 1: " " -- text run at (0,195) width 118: "This is a text area with" -- text run at (117,195) width 4: " " -- text run at (0,208) width 64: "wrap=\"soft\"" -- text run at (63,208) width 1: " " -- text run at (0,221) width 118: "This is a text area with" -- text run at (117,221) width 4: " " -- text run at (0,234) width 64: "wrap=\"soft\"" -- text run at (63,234) width 1: " " -- text run at (0,247) width 118: "This is a text area with" -- text run at (117,247) width 4: " " -- text run at (0,260) width 64: "wrap=\"soft\"" -- text run at (63,260) width 1: " " -- text run at (0,273) width 118: "This is a text area with" -- text run at (117,273) width 4: " " -- text run at (0,286) width 64: "wrap=\"soft\"" -- text run at (63,286) width 1: " " -- text run at (0,299) width 118: "This is a text area with" -- text run at (117,299) width 4: " " -- text run at (0,312) width 64: "wrap=\"soft\"" -- text run at (63,312) width 1: " " -- text run at (0,325) width 118: "This is a text area with" -- text run at (117,325) width 4: " " -- text run at (0,338) width 64: "wrap=\"soft\"" -- text run at (63,338) width 1: " " -- text run at (0,351) width 118: "This is a text area with" -- text run at (117,351) width 4: " " -- text run at (0,364) width 64: "wrap=\"soft\"" -- text run at (63,364) width 1: " " -- RenderBR {BR} at (0,377) size 0x13 --layer at (378,1026) size 161x32 clip at (379,1027) size 144x30 scrollHeight 394 -- RenderTextControl {TEXTAREA} at (16,3) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x390 -- RenderText {#text} at (0,0) size 121x377 -- text run at (0,0) width 4: " " -- text run at (3,0) width 1: " " -- text run at (0,13) width 118: "This is a text area with" -- text run at (117,13) width 4: " " -- text run at (0,26) width 64: "wrap=\"soft\"" -- text run at (63,26) width 1: " " -- text run at (0,39) width 118: "This is a text area with" -- text run at (117,39) width 4: " " -- text run at (0,52) width 64: "wrap=\"soft\"" -- text run at (63,52) width 1: " " -- text run at (0,65) width 118: "This is a text area with" -- text run at (117,65) width 4: " " -- text run at (0,78) width 64: "wrap=\"soft\"" -- text run at (63,78) width 1: " " -- text run at (0,91) width 118: "This is a text area with" -- text run at (117,91) width 4: " " -- text run at (0,104) width 64: "wrap=\"soft\"" -- text run at (63,104) width 1: " " -- text run at (0,117) width 118: "This is a text area with" -- text run at (117,117) width 4: " " -- text run at (0,130) width 64: "wrap=\"soft\"" -- text run at (63,130) width 1: " " -- text run at (0,143) width 118: "This is a text area with" -- text run at (117,143) width 4: " " -- text run at (0,156) width 64: "wrap=\"soft\"" -- text run at (63,156) width 1: " " -- text run at (0,169) width 118: "This is a text area with" -- text run at (117,169) width 4: " " -- text run at (0,182) width 64: "wrap=\"soft\"" -- text run at (63,182) width 1: " " -- text run at (0,195) width 118: "This is a text area with" -- text run at (117,195) width 4: " " -- text run at (0,208) width 64: "wrap=\"soft\"" -- text run at (63,208) width 1: " " -- text run at (0,221) width 118: "This is a text area with" -- text run at (117,221) width 4: " " -- text run at (0,234) width 64: "wrap=\"soft\"" -- text run at (63,234) width 1: " " -- text run at (0,247) width 118: "This is a text area with" -- text run at (117,247) width 4: " " -- text run at (0,260) width 64: "wrap=\"soft\"" -- text run at (63,260) width 1: " " -- text run at (0,273) width 118: "This is a text area with" -- text run at (117,273) width 4: " " -- text run at (0,286) width 64: "wrap=\"soft\"" -- text run at (63,286) width 1: " " -- text run at (0,299) width 118: "This is a text area with" -- text run at (117,299) width 4: " " -- text run at (0,312) width 64: "wrap=\"soft\"" -- text run at (63,312) width 1: " " -- text run at (0,325) width 118: "This is a text area with" -- text run at (117,325) width 4: " " -- text run at (0,338) width 64: "wrap=\"soft\"" -- text run at (63,338) width 1: " " -- text run at (0,351) width 118: "This is a text area with" -- text run at (117,351) width 4: " " -- text run at (0,364) width 64: "wrap=\"soft\"" -- text run at (63,364) width 1: " " -- RenderBR {BR} at (0,377) size 0x13 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/box-shadow-override-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/box-shadow-override-expected.txt -deleted file mode 100644 -index 644fdff2f3386af632fe4f85736bbe0475180f17..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/box-shadow-override-expected.txt -+++ /dev/null -@@ -1,83 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Tests that box shadow is not applied to Aqua-themed controls." -- RenderBlock {P} at (0,34) size 784x18 -- RenderText {#text} at (0,0) size 259x18 -- text run at (0,0) width 259: "You should not see any red on this page." -- RenderBlock {DIV} at (0,68) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,91) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 183x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 177x19 -- RenderBlock {DIV} at (0,0) size 17x19 -- RenderBlock {DIV} at (17,3) size 141x13 -- RenderBlock {DIV} at (157,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,114) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 188x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 182x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 141x13 -- RenderBlock {DIV} at (162,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,137) size 784x32 -- RenderBlock {INPUT} at (2,13) size 12x12 -- RenderText {#text} at (16,9) size 4x18 -- text run at (16,9) width 4: " " -- RenderBlock {INPUT} at (22,13) size 12x12 -- RenderText {#text} at (36,9) size 4x18 -- text run at (36,9) width 4: " " -- RenderSlider {INPUT} at (42,8) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (57,0) size 15x15 -- RenderText {#text} at (173,9) size 4x18 -- text run at (173,9) width 4: " " -- RenderFileUploadControl {INPUT} at (179,10) size 238x18 "no file selected" -- RenderButton {INPUT} at (0,0) size 78x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 62x13 -- RenderText at (0,0) size 62x13 -- text run at (0,0) width 62: "Choose File" -- RenderText {#text} at (419,9) size 4x18 -- text run at (419,9) width 4: " " -- RenderButton {INPUT} at (425,8) size 57x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 41x16 -- RenderText at (0,0) size 41x16 -- text run at (0,0) width 41: "Button" -- RenderText {#text} at (483,9) size 5x18 -- text run at (483,9) width 5: " " -- RenderButton {INPUT} at (489,10) size 52x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "Button" -- RenderText {#text} at (542,9) size 5x18 -- text run at (542,9) width 5: " " -- RenderButton {INPUT} at (546,12) size 46x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 30x11 -- RenderText at (0,0) size 30x11 -- text run at (0,0) width 30: "Button" -- RenderText {#text} at (591,9) size 5x18 -- text run at (591,9) width 5: " " -- RenderButton {BUTTON} at (597,2) size 75x28 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 58x23 -- RenderText {#text} at (0,0) size 58x23 -- text run at (0,0) width 58: "Button" -- RenderText {#text} at (0,0) size 0x0 --layer at (21,81) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 37x13 -- text run at (0,0) width 37: "Search" --layer at (30,104) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (35,127) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/button-positioned-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/button-positioned-expected.txt -deleted file mode 100644 -index 4053905ac0f0716ddbbc500b2e7153355f28fb92..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/button-positioned-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 --layer at (10,10) size 149x18 -- RenderButton {BUTTON} at (10,10) size 150x18 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 134x13 -- RenderText {#text} at (0,0) size 134x13 -- text run at (0,0) width 134: "This button is positioned." --layer at (10,10) size 170x18 -- RenderButton {INPUT} at (10,10) size 171x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 155x13 -- RenderText at (0,0) size 155x13 -- text run at (0,0) width 155: "This button is also positioned" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/button-sizes-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/button-sizes-expected.txt -deleted file mode 100644 -index 4141bbfb7f1e39c556613b4659d08789f2b9afeb..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/button-sizes-expected.txt -+++ /dev/null -@@ -1,112 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderButton {BUTTON} at (0,8) size 46x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,4) size 30x6 -- RenderText {#text} at (0,0) size 30x6 -- text run at (0,0) width 30: "Test Button" -- RenderText {#text} at (45,3) size 5x18 -- text run at (45,3) width 5: " " -- RenderButton {BUTTON} at (49,8) size 52x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,3) size 36x8 -- RenderText {#text} at (0,0) size 36x7 -- text run at (0,0) width 36: "Test Button" -- RenderText {#text} at (100,3) size 5x18 -- text run at (100,3) width 5: " " -- RenderButton {BUTTON} at (104,7) size 57x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,3) size 41x8 -- RenderText {#text} at (0,0) size 41x8 -- text run at (0,0) width 41: "Test Button" -- RenderText {#text} at (160,3) size 5x18 -- text run at (160,3) width 5: " " -- RenderButton {BUTTON} at (164,7) size 63x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 46x10 -- RenderText {#text} at (0,0) size 46x10 -- text run at (0,0) width 46: "Test Button" -- RenderText {#text} at (226,3) size 5x18 -- text run at (226,3) width 5: " " -- RenderButton {BUTTON} at (230,6) size 67x16 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText {#text} at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (296,3) size 5x18 -- text run at (296,3) width 5: " " -- RenderButton {BUTTON} at (300,5) size 73x17 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 56x12 -- RenderText {#text} at (0,0) size 56x12 -- text run at (0,0) width 56: "Test Button" -- RenderText {#text} at (372,3) size 5x18 -- text run at (372,3) width 5: " " -- RenderButton {BUTTON} at (378,4) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText {#text} at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (456,3) size 5x18 -- text run at (456,3) width 5: " " -- RenderButton {INPUT} at (462,4) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (540,3) size 5x18 -- text run at (540,3) width 5: " " -- RenderButton {BUTTON} at (546,3) size 82x20 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 65x15 -- RenderText {#text} at (0,0) size 65x15 -- text run at (0,0) width 65: "Test Button" -- RenderText {#text} at (629,3) size 5x18 -- text run at (629,3) width 5: " " -- RenderButton {BUTTON} at (635,2) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText {#text} at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (722,3) size 5x18 -- text run at (722,3) width 5: " " -- RenderButton {BUTTON} at (2,32) size 91x22 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 75x17 -- RenderText {#text} at (0,0) size 75x17 -- text run at (0,0) width 75: "Test Button" -- RenderText {#text} at (94,34) size 5x18 -- text run at (94,34) width 5: " " -- RenderButton {BUTTON} at (100,31) size 95x23 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 79x18 -- RenderText {#text} at (0,0) size 79x18 -- text run at (0,0) width 79: "Test Button" -- RenderText {#text} at (196,34) size 5x18 -- text run at (196,34) width 5: " " -- RenderButton {BUTTON} at (202,31) size 100x23 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 84x18 -- RenderText {#text} at (0,0) size 84x18 -- text run at (0,0) width 84: "Test Button" -- RenderText {#text} at (303,34) size 5x18 -- text run at (303,34) width 5: " " -- RenderButton {BUTTON} at (309,30) size 105x25 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 88x20 -- RenderText {#text} at (0,0) size 88x20 -- text run at (0,0) width 88: "Test Button" -- RenderText {#text} at (415,34) size 5x18 -- text run at (415,34) width 5: " " -- RenderButton {BUTTON} at (421,29) size 109x26 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 93x21 -- RenderText {#text} at (0,0) size 93x21 -- text run at (0,0) width 93: "Test Button" -- RenderText {#text} at (531,34) size 5x18 -- text run at (531,34) width 5: " " -- RenderButton {BUTTON} at (537,28) size 115x27 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 98x22 -- RenderText {#text} at (0,0) size 98x22 -- text run at (0,0) width 98: "Test Button" -- RenderText {#text} at (653,34) size 5x18 -- text run at (653,34) width 5: " " -- RenderButton {BUTTON} at (659,27) size 115x28 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 99x23 -- RenderText {#text} at (0,0) size 99x23 -- text run at (0,0) width 99: "Test Button" -- RenderText {#text} at (775,34) size 5x18 -- text run at (775,34) width 5: " " -- RenderButton {BUTTON} at (2,59) size 119x29 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 103x24 -- RenderText {#text} at (0,0) size 103x24 -- text run at (0,0) width 103: "Test Button" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/date/date-input-rendering-basic-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/date/date-input-rendering-basic-expected.txt -deleted file mode 100644 -index 281158451a5bb6b90319605a4471a8067589591b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/date/date-input-rendering-basic-expected.txt -+++ /dev/null -@@ -1,48 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (83,4) size 5x18 -- text run at (83,4) width 5: " " -- RenderText {#text} at (0,0) size 0x0 --layer at (10,10) size 79x23 clip at (12,12) size 75x19 -- RenderFlexibleBox {INPUT} at (2,2) size 80x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (13,13) size 73x17 -- RenderBlock {DIV} at (3,3) size 74x17 -- RenderBlock {DIV} at (1,1) size 72x15 -- RenderBlock {DIV} at (0,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "04" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (16,1) size 5x13 -- text run at (16,1) width 5: "/" -- RenderBlock {DIV} at (20,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "01" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (36,1) size 5x13 -- text run at (36,1) width 5: "/" -- RenderBlock {DIV} at (40,0) size 32x15 -- RenderText {#text} at (1,1) size 29x13 -- text run at (1,1) width 29: "1976" --layer at (97,10) size 79x23 clip at (99,12) size 75x19 -- RenderFlexibleBox {INPUT} at (89,2) size 80x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (100,13) size 73x17 -- RenderBlock {DIV} at (3,3) size 74x17 -- RenderBlock {DIV} at (1,1) size 72x15 -- RenderBlock {DIV} at (54,0) size 18x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "04" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (50,1) size 5x13 -- text run at (50,1) width 5 RTL: "/" -- RenderBlock {DIV} at (34,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "01" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (30,1) size 5x13 -- text run at (30,1) width 5 RTL: "/" -- RenderBlock {DIV} at (0,0) size 31x15 -- RenderText {#text} at (1,1) size 29x13 -- text run at (1,1) width 29: "1976" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/form-element-geometry-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/form-element-geometry-expected.txt -deleted file mode 100644 -index 7a08a9fdf5d499b4f1fa99d0f9396424401766e5..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/form-element-geometry-expected.txt -+++ /dev/null -@@ -1,261 +0,0 @@ --layer at (0,0) size 785x636 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x636 -- RenderBlock {HTML} at (0,0) size 785x636 -- RenderBody {BODY} at (8,8) size 769x620 -- RenderBlock {H1} at (0,0) size 769x37 -- RenderText {#text} at (0,0) size 420x37 -- text run at (0,0) width 420: "Form Element Geometry Tests" -- RenderBlock {P} at (0,58) size 769x19 -- RenderText {#text} at (0,0) size 551x18 -- text run at (0,0) width 551: "These tests help us tune the widget classes in KWQ to have all the right fudge factors." -- RenderBlock {H2} at (0,96) size 769x29 -- RenderText {#text} at (0,0) size 167x28 -- text run at (0,0) width 167: "Bounding Boxes" -- RenderTable {TABLE} at (0,144) size 169x29 -- RenderTableSection {TBODY} at (0,0) size 169x28 -- RenderTableRow {TR} at (0,2) size 169x24 -- RenderTableCell {TD} at (2,2) size 57x24 [r=0 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 55x22 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 51x28 -- RenderButton {INPUT} at (2,2) size 51x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "button" -- RenderTableCell {TD} at (60,2) size 67x24 [r=0 c=1 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 64x22 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 60x28 -- RenderMenuList {SELECT} at (2,2) size 60x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 60x18 -- RenderText at (8,2) size 29x13 -- text run at (8,2) width 29: "menu" -- RenderTableCell {TD} at (128,5) size 19x18 [r=0 c=2 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 12x28 -- RenderBlock {INPUT} at (2,2) size 12x12 -- RenderTableCell {TD} at (148,5) size 19x18 [r=0 c=3 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 12x28 -- RenderBlock {INPUT} at (2,2) size 12x12 -- RenderTable {TABLE} at (0,172) size 169x29 -- RenderTableSection {TBODY} at (0,0) size 169x28 -- RenderTableRow {TR} at (0,2) size 169x24 -- RenderTableCell {TD} at (2,2) size 57x24 [r=0 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 55x22 [border: (2px solid #0000FF)] -- RenderButton {INPUT} at (2,2) size 51x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "button" -- RenderTableCell {TD} at (60,2) size 67x24 [r=0 c=1 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 64x22 [border: (2px solid #0000FF)] -- RenderMenuList {SELECT} at (2,2) size 60x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 60x18 -- RenderText at (8,2) size 29x13 -- text run at (8,2) width 29: "menu" -- RenderTableCell {TD} at (128,5) size 19x18 [r=0 c=2 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] -- RenderBlock {INPUT} at (2,2) size 12x12 -- RenderTableCell {TD} at (148,5) size 19x18 [r=0 c=3 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] -- RenderBlock {INPUT} at (2,2) size 12x12 -- RenderTable {TABLE} at (0,200) size 169x29 -- RenderTableSection {TBODY} at (0,0) size 169x28 -- RenderTableRow {TR} at (0,2) size 169x24 -- RenderTableCell {TD} at (2,2) size 57x24 [r=0 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 55x22 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 51x13 -- RenderButton {INPUT} at (2,2) size 51x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "button" -- RenderTableCell {TD} at (60,2) size 67x24 [r=0 c=1 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 64x22 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 60x13 -- RenderMenuList {SELECT} at (2,2) size 60x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 60x18 -- RenderText at (8,2) size 29x13 -- text run at (8,2) width 29: "menu" -- RenderTableCell {TD} at (128,5) size 19x18 [r=0 c=2 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 12x13 -- RenderBlock {INPUT} at (2,2) size 12x12 -- RenderTableCell {TD} at (148,5) size 19x18 [r=0 c=3 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] -- RenderInline {FONT} at (0,0) size 12x13 -- RenderBlock {INPUT} at (2,2) size 12x12 -- RenderTable {TABLE} at (0,228) size 547x68 -- RenderTableSection {TBODY} at (0,0) size 547x67 -- RenderTableRow {TR} at (0,2) size 547x63 -- RenderTableCell {TD} at (2,2) size 83x25 [r=0 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 81x23 [border: (2px solid #0000FF)] -- RenderTextControl {INPUT} at (2,2) size 77x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableCell {TD} at (86,2) size 40x63 [r=0 c=1 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 37x61 [border: (2px solid #0000FF)] -- RenderListBox {SELECT} at (2,2) size 33x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (127,2) size 245x24 [r=0 c=2 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 242x22 [border: (2px solid #0000FF)] -- RenderFileUploadControl {INPUT} at (2,2) size 238x18 "no file selected" -- RenderButton {INPUT} at (0,0) size 78x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 62x13 -- RenderText at (0,0) size 62x13 -- text run at (0,0) width 62: "Choose File" -- RenderTableCell {TD} at (373,2) size 172x42 [r=0 c=3 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 169x40 [border: (2px solid #0000FF)] -- RenderBlock {H2} at (0,315) size 769x29 -- RenderText {#text} at (0,0) size 200x28 -- text run at (0,0) width 200: "Baseline Alignment" -- RenderBlock {DIV} at (0,363) size 769x30 -- RenderInline {FONT} at (0,0) size 211x28 -- RenderText {#text} at (0,0) size 42x28 -- text run at (0,0) width 42: "text " -- RenderButton {INPUT} at (43,9) size 52x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "button" -- RenderText {#text} at (96,0) size 7x28 -- text run at (96,0) width 7: " " -- RenderMenuList {SELECT} at (104,9) size 61x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 60x18 -- RenderText at (8,2) size 29x13 -- text run at (8,2) width 29: "menu" -- RenderText {#text} at (166,0) size 7x28 -- text run at (166,0) width 7: " " -- RenderBlock {INPUT} at (174,12) size 13x12 -- RenderText {#text} at (188,0) size 7x28 -- text run at (188,0) width 7: " " -- RenderBlock {INPUT} at (196,12) size 13x12 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,392) size 769x23 -- RenderText {#text} at (0,1) size 28x18 -- text run at (0,1) width 28: "text " -- RenderButton {INPUT} at (29,2) size 52x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "button" -- RenderText {#text} at (82,1) size 5x18 -- text run at (82,1) width 5: " " -- RenderMenuList {SELECT} at (88,2) size 61x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 60x18 -- RenderText at (8,2) size 29x13 -- text run at (8,2) width 29: "menu" -- RenderText {#text} at (150,1) size 5x18 -- text run at (150,1) width 5: " " -- RenderBlock {INPUT} at (156,5) size 13x12 -- RenderText {#text} at (170,1) size 5x18 -- text run at (170,1) width 5: " " -- RenderBlock {INPUT} at (176,5) size 13x12 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,414) size 769x23 -- RenderInline {FONT} at (0,0) size 176x13 -- RenderText {#text} at (0,5) size 18x13 -- text run at (0,5) width 18: "text " -- RenderButton {INPUT} at (19,2) size 51x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 35x13 -- RenderText at (0,0) size 35x13 -- text run at (0,0) width 35: "button" -- RenderText {#text} at (71,5) size 4x13 -- text run at (71,5) width 4: " " -- RenderMenuList {SELECT} at (76,2) size 61x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 60x18 -- RenderText at (8,2) size 29x13 -- text run at (8,2) width 29: "menu" -- RenderText {#text} at (138,5) size 3x13 -- text run at (138,5) width 3: " " -- RenderBlock {INPUT} at (142,5) size 13x12 -- RenderText {#text} at (156,5) size 4x13 -- text run at (156,5) width 4: " " -- RenderBlock {INPUT} at (161,5) size 13x12 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,436) size 769x44 -- RenderText {#text} at (0,22) size 28x18 -- text run at (0,22) width 28: "text " -- RenderTextControl {INPUT} at (29,22) size 78x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (108,22) size 5x18 -- text run at (108,22) width 5: " " -- RenderFileUploadControl {INPUT} at (114,23) size 239x18 "no file selected" -- RenderButton {INPUT} at (0,0) size 78x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 62x13 -- RenderText at (0,0) size 62x13 -- text run at (0,0) width 62: "Choose File" -- RenderText {#text} at (354,22) size 5x18 -- text run at (354,22) width 5: " " -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {H2} at (0,498) size 769x29 -- RenderText {#text} at (0,0) size 198x28 -- text run at (0,0) width 198: "Pop-up Menu Sizes" -- RenderBlock {DIV} at (0,546) size 769x30 -- RenderInline {FONT} at (0,0) size 174x28 -- RenderText {#text} at (0,0) size 0x0 -- RenderMenuList {SELECT} at (2,9) size 36x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 36x18 -- RenderText at (8,2) size 0x13 -- text run at (8,2) width 0: " " -- RenderText {#text} at (40,0) size 6x28 -- text run at (40,0) width 6: " " -- RenderMenuList {SELECT} at (48,9) size 36x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 36x18 -- RenderText at (8,2) size 4x13 -- text run at (8,2) width 4: "|" -- RenderText {#text} at (86,0) size 6x28 -- text run at (86,0) width 6: " " -- RenderMenuList {SELECT} at (94,9) size 78x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 78x18 -- RenderText at (8,2) size 47x13 -- text run at (8,2) width 47: "xxxxxxxx" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,575) size 769x23 -- RenderMenuList {SELECT} at (2,2) size 36x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 36x18 -- RenderText at (8,2) size 0x13 -- text run at (8,2) width 0: " " -- RenderText {#text} at (40,1) size 4x18 -- text run at (40,1) width 4: " " -- RenderMenuList {SELECT} at (46,2) size 36x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 36x18 -- RenderText at (8,2) size 4x13 -- text run at (8,2) width 4: "|" -- RenderText {#text} at (84,1) size 4x18 -- text run at (84,1) width 4: " " -- RenderMenuList {SELECT} at (90,2) size 78x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 78x18 -- RenderText at (8,2) size 47x13 -- text run at (8,2) width 47: "xxxxxxxx" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,597) size 769x23 -- RenderInline {FONT} at (0,0) size 167x13 -- RenderText {#text} at (0,0) size 0x0 -- RenderMenuList {SELECT} at (2,2) size 36x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 36x18 -- RenderText at (8,2) size 0x13 -- text run at (8,2) width 0: " " -- RenderText {#text} at (40,5) size 3x13 -- text run at (40,5) width 3: " " -- RenderMenuList {SELECT} at (44,2) size 37x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 36x18 -- RenderText at (8,2) size 4x13 -- text run at (8,2) width 4: "|" -- RenderText {#text} at (82,5) size 3x13 -- text run at (82,5) width 3: " " -- RenderMenuList {SELECT} at (87,2) size 78x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 78x18 -- RenderText at (8,2) size 47x13 -- text run at (8,2) width 47: "xxxxxxxx" -- RenderText {#text} at (0,0) size 0x0 --layer at (16,244) size 71x13 -- RenderBlock {DIV} at (3,3) size 71x13 -- RenderText {#text} at (0,0) size 46x13 -- text run at (0,0) width 46: "text field" --layer at (387,243) size 161x32 clip at (388,244) size 159x30 -- RenderTextControl {TEXTAREA} at (4,4) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderText {#text} at (0,0) size 43x13 -- text run at (0,0) width 43: "textarea" --layer at (41,469) size 71x13 -- RenderBlock {DIV} at (3,3) size 71x13 -- RenderText {#text} at (0,0) size 46x13 -- text run at (0,0) width 46: "text field" --layer at (369,446) size 161x32 clip at (370,447) size 159x30 -- RenderTextControl {TEXTAREA} at (360,2) size 162x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderText {#text} at (0,0) size 43x13 -- text run at (0,0) width 43: "textarea" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/hidpi-textfield-background-bleeding-expected.html b/LayoutTests/platform/mac-catalina/fast/forms/hidpi-textfield-background-bleeding-expected.html -deleted file mode 100644 -index 335c2076ebda248acce27ce7ad69545a087a78f2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/hidpi-textfield-background-bleeding-expected.html -+++ /dev/null -@@ -1,24 +0,0 @@ -- -- -- -- -- -- --
-- -- -- -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-height-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-height-expected.txt -deleted file mode 100644 -index 736b0118a9791eb5e4cd38541321657fb88676c7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-height-expected.txt -+++ /dev/null -@@ -1,108 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock (anonymous) at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 781x18 -- text run at (0,0) width 781: "This tests the height attribute of form elements. The only element that should honour this value is the Image type of input." -- RenderBlock {FORM} at (0,18) size 784x258 -- RenderText {#text} at (0,2) size 37x18 -- text run at (0,2) width 37: "input " -- RenderTextControl {INPUT} at (38,2) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (187,2) size 5x18 -- text run at (187,2) width 5: " " -- RenderBR {BR} at (191,2) size 1x18 -- RenderText {#text} at (0,25) size 28x18 -- text run at (0,25) width 28: "text " -- RenderTextControl {INPUT} at (29,25) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (178,25) size 5x18 -- text run at (178,25) width 5: " " -- RenderBR {BR} at (182,25) size 1x18 -- RenderText {#text} at (0,46) size 66x18 -- text run at (0,46) width 66: "checkbox " -- RenderBlock {INPUT} at (67,50) size 13x12 -- RenderText {#text} at (81,46) size 5x18 -- text run at (81,46) width 5: " " -- RenderBR {BR} at (85,46) size 1x18 -- RenderText {#text} at (0,66) size 25x18 -- text run at (0,66) width 25: "file " -- RenderFileUploadControl {INPUT} at (26,67) size 239x18 "no file selected" -- RenderButton {INPUT} at (0,0) size 78x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 62x13 -- RenderText at (0,0) size 62x13 -- text run at (0,0) width 62: "Choose File" -- RenderText {#text} at (266,66) size 5x18 -- text run at (266,66) width 5: " " -- RenderBR {BR} at (270,66) size 1x18 -- RenderText {#text} at (0,87) size 44x18 -- text run at (0,87) width 44: "image " -- RenderImage {INPUT} at (43,100) size 11x1 -- RenderText {#text} at (53,87) size 5x18 -- text run at (53,87) width 5: " " -- RenderBR {BR} at (57,87) size 1x18 -- RenderText {#text} at (0,105) size 37x18 -- text run at (0,105) width 37: "radio " -- RenderBlock {INPUT} at (38,109) size 13x12 -- RenderText {#text} at (52,105) size 5x18 -- text run at (52,105) width 5: " " -- RenderBR {BR} at (56,105) size 1x18 -- RenderText {#text} at (0,127) size 40x18 -- text run at (0,127) width 40: "range " -- RenderSlider {INPUT} at (41,126) size 130x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (57,0) size 15x15 -- RenderText {#text} at (172,127) size 5x18 -- text run at (172,127) width 5: " " -- RenderBR {BR} at (176,127) size 1x18 -- RenderText {#text} at (0,146) size 35x18 -- text run at (0,146) width 35: "reset " -- RenderButton {INPUT} at (36,147) size 46x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 30x13 -- RenderText at (0,0) size 30x13 -- text run at (0,0) width 30: "Reset" -- RenderText {#text} at (83,146) size 5x18 -- text run at (83,146) width 5: " " -- RenderBR {BR} at (87,146) size 1x18 -- RenderText {#text} at (0,168) size 48x18 -- text run at (0,168) width 48: "submit " -- RenderButton {INPUT} at (49,169) size 54x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 37x13 -- RenderText at (0,0) size 37x13 -- text run at (0,0) width 37: "Submit" -- RenderText {#text} at (104,168) size 5x18 -- text run at (104,168) width 5: " " -- RenderBR {BR} at (108,168) size 1x18 -- RenderText {#text} at (0,191) size 51x18 -- text run at (0,191) width 51: "isindex " -- RenderTextControl {INPUT} at (52,191) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (201,191) size 5x18 -- text run at (201,191) width 5: " " -- RenderBR {BR} at (205,191) size 1x18 -- RenderText {#text} at (0,214) size 65x18 -- text run at (0,214) width 65: "password " -- RenderTextControl {INPUT} at (66,214) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (215,214) size 5x18 -- text run at (215,214) width 5: " " -- RenderBR {BR} at (219,214) size 1x18 -- RenderText {#text} at (0,237) size 45x18 -- text run at (0,237) width 45: "search " -- RenderTextControl {INPUT} at (46,237) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 --layer at (50,31) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (41,54) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (63,220) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (77,243) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (66,266) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-preventDefault-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-preventDefault-expected.txt -deleted file mode 100644 -index b77f5e5b91609c7c11ff6c93fe1cc8a9bc94cfe9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-preventDefault-expected.txt -+++ /dev/null -@@ -1,21 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBR {BR} at (0,0) size 0x18 -- RenderText {#text} at (0,18) size 681x18 -- text run at (0,18) width 681: "This tests that preventDefault called onmousedown will prevent a caret from being placed in the text field." -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (12,52) size 147x19 -- RenderTextControl {INPUT} at (12,52) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (15,55) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 127x13 -- text run at (0,0) width 127: "No caret should be here" --layer at (10,70) size 328x36 -- RenderBlock (positioned) {DIV} at (10,70) size 328x36 -- RenderBR {BR} at (0,0) size 0x18 -- RenderText {#text} at (0,18) size 328x18 -- text run at (0,18) width 328: "mousedown on target [object HTMLInputElement]" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-spinbutton-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-spinbutton-expected.txt -deleted file mode 100644 -index b6d4350e69c0faf3de8a4837e55d50d5f3e3cc1c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-spinbutton-expected.txt -+++ /dev/null -@@ -1,207 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 245x18 -- text run at (0,0) width 245: "Test appearances of outer-spin-button." -- RenderBlock {DIV} at (0,34) size 784x0 -- RenderBlock {DIV} at (0,34) size 784x528 -- RenderTable {TABLE} at (0,0) size 503x528 -- RenderTableSection {TBODY} at (0,0) size 503x528 -- RenderTableRow {TR} at (0,2) size 503x524 -- RenderTableCell {TD} at (2,83) size 198x362 [r=0 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 196x32 -- RenderTextControl {INPUT} at (0,0) size 112x16 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (111,-3) size 1x18 -- RenderTextControl {INPUT} at (0,16) size 112x16 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 106x16 -- RenderBlock {DIV} at (0,2) size 93x11 -- RenderBlock {DIV} at (1,33) size 196x34 -- RenderTextControl {INPUT} at (0,0) size 124x17 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (123,-2) size 1x18 -- RenderTextControl {INPUT} at (0,17) size 124x17 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 118x15 -- RenderBlock {DIV} at (0,2) size 105x11 -- RenderBlock {DIV} at (1,67) size 196x36 -- RenderTextControl {INPUT} at (0,0) size 136x18 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (135,-1) size 1x18 -- RenderTextControl {INPUT} at (0,18) size 136x18 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 130x16 -- RenderBlock {DIV} at (0,1) size 117x13 -- RenderBlock {DIV} at (1,103) size 196x46 -- RenderTextControl {INPUT} at (2,2) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (150,2) size 1x18 -- RenderTextControl {INPUT} at (2,25) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 141x17 -- RenderBlock {DIV} at (0,1) size 128x14 -- RenderBlock {DIV} at (1,149) size 196x50 -- RenderTextControl {INPUT} at (2,2) size 159x21 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (162,3) size 1x18 -- RenderTextControl {INPUT} at (2,27) size 159x21 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 153x19 -- RenderBlock {DIV} at (0,1) size 140x16 -- RenderBlock {DIV} at (1,199) size 196x52 -- RenderTextControl {INPUT} at (2,2) size 170x22 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (173,4) size 1x18 -- RenderTextControl {INPUT} at (2,28) size 170x22 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 164x20 -- RenderBlock {DIV} at (0,1) size 149x17 -- RenderBlock {DIV} at (1,251) size 196x54 -- RenderTextControl {INPUT} at (2,2) size 181x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (184,5) size 1x18 -- RenderTextControl {INPUT} at (2,29) size 181x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 175x21 -- RenderBlock {DIV} at (0,2) size 160x17 -- RenderBlock {DIV} at (1,305) size 196x56 -- RenderTextControl {INPUT} at (2,2) size 192x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (195,6) size 1x18 -- RenderTextControl {INPUT} at (2,30) size 192x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 186x24 -- RenderBlock {DIV} at (0,2) size 171x19 -- RenderTableCell {TD} at (201,2) size 300x524 [r=0 c=1 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 297x56 -- RenderTextControl {INPUT} at (2,2) size 203x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (206,6) size 1x18 -- RenderTextControl {INPUT} at (2,30) size 203x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 197x24 -- RenderBlock {DIV} at (0,3) size 182x18 -- RenderBlock {DIV} at (1,57) size 297x60 -- RenderTextControl {INPUT} at (2,2) size 214x26 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (217,7) size 1x18 -- RenderTextControl {INPUT} at (2,32) size 214x26 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 208x26 -- RenderBlock {DIV} at (0,2) size 193x21 -- RenderBlock {DIV} at (1,117) size 297x62 -- RenderTextControl {INPUT} at (2,2) size 226x27 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (229,8) size 1x18 -- RenderTextControl {INPUT} at (2,33) size 226x27 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 220x27 -- RenderBlock {DIV} at (0,3) size 201x21 -- RenderBlock {DIV} at (1,179) size 297x64 -- RenderTextControl {INPUT} at (2,2) size 237x28 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (240,9) size 1x18 -- RenderTextControl {INPUT} at (2,34) size 237x28 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 231x28 -- RenderBlock {DIV} at (0,3) size 212x22 -- RenderBlock {DIV} at (1,243) size 297x66 -- RenderTextControl {INPUT} at (2,2) size 257x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (260,10) size 1x18 -- RenderTextControl {INPUT} at (2,35) size 257x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 251x29 -- RenderBlock {DIV} at (0,3) size 232x23 -- RenderBlock {DIV} at (1,309) size 297x68 -- RenderTextControl {INPUT} at (2,2) size 269x30 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (272,11) size 1x18 -- RenderTextControl {INPUT} at (2,36) size 269x30 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 263x30 -- RenderBlock {DIV} at (0,3) size 244x24 -- RenderBlock {DIV} at (1,377) size 297x72 -- RenderTextControl {INPUT} at (2,2) size 281x32 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (284,12) size 1x18 -- RenderTextControl {INPUT} at (2,38) size 281x32 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 275x32 -- RenderBlock {DIV} at (0,3) size 256x26 -- RenderBlock {DIV} at (1,449) size 297x74 -- RenderTextControl {INPUT} at (2,2) size 293x33 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (296,13) size 1x18 -- RenderTextControl {INPUT} at (2,39) size 293x33 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 287x33 -- RenderBlock {DIV} at (0,3) size 268x27 --layer at (14,129) size 106x10 -- RenderBlock {DIV} at (3,3) size 106x10 --layer at (14,145) size 93x10 -- RenderBlock {DIV} at (0,0) size 93x10 --layer at (14,161) size 118x11 -- RenderBlock {DIV} at (3,3) size 118x11 --layer at (14,178) size 105x11 -- RenderBlock {DIV} at (0,0) size 105x11 --layer at (14,195) size 129x12 -- RenderBlock {DIV} at (3,3) size 130x12 --layer at (14,213) size 116x12 -- RenderBlock {DIV} at (0,0) size 117x12 --layer at (16,233) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (16,256) size 128x13 -- RenderBlock {DIV} at (0,0) size 128x13 --layer at (16,279) size 152x15 -- RenderBlock {DIV} at (3,3) size 153x15 --layer at (16,304) size 139x15 -- RenderBlock {DIV} at (0,0) size 140x15 --layer at (16,329) size 163x16 -- RenderBlock {DIV} at (3,3) size 164x16 --layer at (16,355) size 148x16 -- RenderBlock {DIV} at (0,0) size 149x16 --layer at (16,381) size 174x17 -- RenderBlock {DIV} at (3,3) size 175x17 --layer at (16,408) size 159x17 -- RenderBlock {DIV} at (0,0) size 160x17 --layer at (16,435) size 185x18 -- RenderBlock {DIV} at (3,3) size 186x18 --layer at (16,463) size 170x18 -- RenderBlock {DIV} at (0,0) size 171x18 --layer at (215,50) size 196x18 -- RenderBlock {DIV} at (3,3) size 197x18 --layer at (215,78) size 181x18 -- RenderBlock {DIV} at (0,0) size 182x18 --layer at (215,106) size 207x20 -- RenderBlock {DIV} at (3,3) size 208x20 --layer at (215,136) size 192x20 -- RenderBlock {DIV} at (0,0) size 193x20 --layer at (215,166) size 219x21 -- RenderBlock {DIV} at (3,3) size 220x21 --layer at (215,197) size 200x21 -- RenderBlock {DIV} at (0,0) size 201x21 --layer at (215,228) size 231x22 -- RenderBlock {DIV} at (3,3) size 231x22 --layer at (215,260) size 212x22 -- RenderBlock {DIV} at (0,0) size 212x22 --layer at (215,292) size 251x23 -- RenderBlock {DIV} at (3,3) size 251x23 --layer at (215,325) size 232x23 -- RenderBlock {DIV} at (0,0) size 232x23 --layer at (215,358) size 263x24 -- RenderBlock {DIV} at (3,3) size 263x24 --layer at (215,392) size 244x24 -- RenderBlock {DIV} at (0,0) size 244x24 --layer at (215,426) size 275x26 -- RenderBlock {DIV} at (3,3) size 275x26 --layer at (215,462) size 256x26 -- RenderBlock {DIV} at (0,0) size 256x26 --layer at (215,498) size 287x27 -- RenderBlock {DIV} at (3,3) size 287x27 --layer at (215,535) size 268x27 -- RenderBlock {DIV} at (0,0) size 268x27 --layer at (107,143) size 13x15 -- RenderBlock (relative positioned) {DIV} at (92,0) size 14x15 --layer at (119,176) size 13x15 -- RenderBlock (relative positioned) {DIV} at (104,0) size 14x15 --layer at (130,212) size 13x15 -- RenderBlock (relative positioned) {DIV} at (116,0) size 14x15 --layer at (144,254) size 13x17 -- RenderBlock (relative positioned) {DIV} at (127,0) size 14x17 --layer at (155,303) size 13x18 -- RenderBlock (relative positioned) {DIV} at (139,0) size 14x18 --layer at (164,353) size 15x20 -- RenderBlock (relative positioned) {DIV} at (148,0) size 16x20 --layer at (175,406) size 15x21 -- RenderBlock (relative positioned) {DIV} at (159,0) size 16x21 --layer at (186,461) size 15x23 -- RenderBlock (relative positioned) {DIV} at (170,0) size 16x23 --layer at (397,75) size 15x24 -- RenderBlock (relative positioned) {DIV} at (181,0) size 16x24 --layer at (408,133) size 15x26 -- RenderBlock (relative positioned) {DIV} at (192,0) size 16x26 --layer at (415,194) size 19x27 -- RenderBlock (relative positioned) {DIV} at (200,0) size 20x27 --layer at (427,257) size 19x28 -- RenderBlock (relative positioned) {DIV} at (211,-1) size 20x30 --layer at (447,322) size 19x30 -- RenderBlock (relative positioned) {DIV} at (231,-1) size 20x31 --layer at (459,388) size 19x32 -- RenderBlock (relative positioned) {DIV} at (243,-1) size 20x32 --layer at (471,459) size 19x33 -- RenderBlock (relative positioned) {DIV} at (255,-1) size 20x34 --layer at (483,531) size 19x35 -- RenderBlock (relative positioned) {DIV} at (267,-1) size 20x35 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-spinbutton-up-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-spinbutton-up-expected.txt -deleted file mode 100644 -index 26f2ca33711d9aea4b8a2e6bcb0af3d18d54544a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-appearance-spinbutton-up-expected.txt -+++ /dev/null -@@ -1,22 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 439x18 -- text run at (0,0) width 439: "Test appearances of outer-spin-button with its up button highlighted." -- RenderBlock {DIV} at (0,34) size 784x0 -- RenderBlock (anonymous) at (0,34) size 784x31 -- RenderTextControl {INPUT} at (2,2) size 226x27 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 220x27 -- RenderBlock {DIV} at (0,3) size 201x21 -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (13,47) size 200x21 -- RenderBlock {DIV} at (0,0) size 201x21 -- RenderText {#text} at (0,0) size 8x21 -- text run at (0,0) width 8: "1" --layer at (213,44) size 19x27 -- RenderBlock (relative positioned) {DIV} at (200,0) size 20x27 --caret: position 1 of child 0 {#text} of child 0 {DIV} of child 0 {DIV} of child 0 {DIV} of {#document-fragment} of child 5 {INPUT} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-button-sizes-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-button-sizes-expected.txt -deleted file mode 100644 -index 482f95eb0fe315eb4a955f1a9eb088a616c5f9d9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-button-sizes-expected.txt -+++ /dev/null -@@ -1,106 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderButton {INPUT} at (0,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (66,1) size 5x18 -- text run at (66,1) width 5: " " -- RenderButton {INPUT} at (70,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (137,1) size 4x18 -- text run at (137,1) width 4: " " -- RenderButton {INPUT} at (141,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (207,1) size 5x18 -- text run at (207,1) width 5: " " -- RenderButton {INPUT} at (211,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (278,1) size 4x18 -- text run at (278,1) width 4: " " -- RenderButton {INPUT} at (282,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (348,1) size 5x18 -- text run at (348,1) width 5: " " -- RenderButton {INPUT} at (352,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (419,1) size 4x18 -- text run at (419,1) width 4: " " -- RenderButton {INPUT} at (425,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (503,1) size 5x18 -- text run at (503,1) width 5: " " -- RenderButton {INPUT} at (509,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (587,1) size 5x18 -- text run at (587,1) width 5: " " -- RenderButton {INPUT} at (593,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (671,1) size 5x18 -- text run at (671,1) width 5: " " -- RenderButton {INPUT} at (677,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (755,1) size 5x18 -- text run at (755,1) width 5: " " -- RenderButton {INPUT} at (2,26) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (80,25) size 5x18 -- text run at (80,25) width 5: " " -- RenderButton {INPUT} at (86,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (173,25) size 5x18 -- text run at (173,25) width 5: " " -- RenderButton {INPUT} at (179,24) size 87x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (267,25) size 5x18 -- text run at (267,25) width 5: " " -- RenderButton {INPUT} at (273,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (360,25) size 5x18 -- text run at (360,25) width 5: " " -- RenderButton {INPUT} at (366,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (454,25) size 4x18 -- text run at (454,25) width 4: " " -- RenderButton {INPUT} at (460,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (547,25) size 5x18 -- text run at (547,25) width 5: " " -- RenderButton {INPUT} at (553,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-disabled-color-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-disabled-color-expected.txt -deleted file mode 100644 -index d4e5ebbbf4d98464726a706eaf8b330f2aa90a79..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-disabled-color-expected.txt -+++ /dev/null -@@ -1,190 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 521x18 -- text run at (0,0) width 521: "This tests that the text color changes appropriately when the text field is disabled." -- RenderBR {BR} at (520,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (149,20) size 5x18 -- text run at (149,20) width 5: " " -- RenderTextControl {INPUT} at (155,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (304,20) size 1x18 -- RenderTextControl {INPUT} at (2,43) size 146x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,43) size 5x18 -- text run at (149,43) width 5: " " -- RenderTextControl {INPUT} at (155,43) size 148x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,43) size 1x18 -- RenderTextControl {INPUT} at (2,66) size 146x19 [bgcolor=#0000FF] [border: (2px inset #000000)] -- RenderText {#text} at (149,66) size 5x18 -- text run at (149,66) width 5: " " -- RenderTextControl {INPUT} at (155,66) size 148x19 [bgcolor=#0000FF] [border: (2px inset #000000)] -- RenderBR {BR} at (304,66) size 1x18 -- RenderTextControl {INPUT} at (2,89) size 146x19 [color=#FF0000] [bgcolor=#0000FF] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,89) size 5x18 -- text run at (149,89) width 5: " " -- RenderTextControl {INPUT} at (155,89) size 148x19 [color=#FF0000] [bgcolor=#0000FF] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,89) size 1x18 -- RenderTextControl {INPUT} at (2,112) size 146x19 [bgcolor=#000000] [border: (2px inset #000000)] -- RenderText {#text} at (149,112) size 5x18 -- text run at (149,112) width 5: " " -- RenderTextControl {INPUT} at (155,112) size 148x19 [bgcolor=#000000] [border: (2px inset #000000)] -- RenderBR {BR} at (304,112) size 1x18 -- RenderTextControl {INPUT} at (2,135) size 146x19 [color=#FFFFFF] [bgcolor=#000000] [border: (2px inset #FFFFFF)] -- RenderText {#text} at (149,135) size 5x18 -- text run at (149,135) width 5: " " -- RenderTextControl {INPUT} at (155,135) size 148x19 [color=#FFFFFF] [bgcolor=#000000] [border: (2px inset #FFFFFF)] -- RenderBR {BR} at (304,135) size 1x18 -- RenderTextControl {INPUT} at (2,158) size 146x19 [bgcolor=#808080] [border: (2px inset #000000)] -- RenderText {#text} at (149,158) size 5x18 -- text run at (149,158) width 5: " " -- RenderTextControl {INPUT} at (155,158) size 148x19 [bgcolor=#808080] [border: (2px inset #000000)] -- RenderBR {BR} at (304,158) size 1x18 -- RenderTextControl {INPUT} at (2,181) size 146x19 [color=#FFFFFF] [bgcolor=#A9A9A9] [border: (2px inset #FFFFFF)] -- RenderText {#text} at (149,181) size 5x18 -- text run at (149,181) width 5: " " -- RenderTextControl {INPUT} at (155,181) size 148x19 [color=#FFFFFF] [bgcolor=#A9A9A9] [border: (2px inset #FFFFFF)] -- RenderBR {BR} at (304,181) size 1x18 -- RenderTextControl {INPUT} at (2,204) size 146x19 [color=#808080] [bgcolor=#000000] [border: (2px inset #808080)] -- RenderText {#text} at (149,204) size 5x18 -- text run at (149,204) width 5: " " -- RenderTextControl {INPUT} at (155,204) size 148x19 [color=#808080] [bgcolor=#000000] [border: (2px inset #808080)] -- RenderBR {BR} at (304,204) size 1x18 -- RenderTextControl {INPUT} at (2,227) size 146x19 [color=#FF0000] [bgcolor=#808080] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,227) size 5x18 -- text run at (149,227) width 5: " " -- RenderTextControl {INPUT} at (155,227) size 148x19 [color=#FF0000] [bgcolor=#808080] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,227) size 1x18 -- RenderTextControl {INPUT} at (2,250) size 146x19 [color=#808080] [bgcolor=#FF0000] [border: (2px inset #808080)] -- RenderText {#text} at (149,250) size 5x18 -- text run at (149,250) width 5: " " -- RenderTextControl {INPUT} at (155,250) size 148x19 [color=#808080] [bgcolor=#FF0000] [border: (2px inset #808080)] -- RenderBR {BR} at (304,250) size 1x18 -- RenderTextControl {INPUT} at (2,273) size 146x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,273) size 5x18 -- text run at (149,273) width 5: " " -- RenderTextControl {INPUT} at (155,273) size 148x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,273) size 1x18 -- RenderTextControl {INPUT} at (2,296) size 146x19 [color=#FF0000] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,296) size 5x18 -- text run at (149,296) width 5: " " -- RenderTextControl {INPUT} at (155,296) size 148x19 [color=#FF0000] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,296) size 1x18 -- RenderTextControl {INPUT} at (2,319) size 146x19 [color=#ACACAC] [bgcolor=#F2F2F2] [border: (2px inset #ACACAC)] -- RenderText {#text} at (149,319) size 5x18 -- text run at (149,319) width 5: " " -- RenderTextControl {INPUT} at (155,319) size 148x19 [color=#ACACAC] [bgcolor=#F2F2F2] [border: (2px inset #ACACAC)] -- RenderBR {BR} at (304,319) size 1x18 --layer at (13,31) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,31) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,54) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,54) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,77) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,77) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,100) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,100) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,123) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,123) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,146) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#ABABAB] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,146) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,169) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,169) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,192) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,192) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,215) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#2C2C2C] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,215) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,238) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,238) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,261) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#2C2C2C] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,261) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,284) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,284) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,307) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,307) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,330) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,330) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-placeholder-visibility-1-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-placeholder-visibility-1-expected.txt -deleted file mode 100644 -index 98d2d89c92946e3600f153d073e19fa2f379f36b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-placeholder-visibility-1-expected.txt -+++ /dev/null -@@ -1,19 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 347x18 -- text run at (0,0) width 347: "Focus the field, focus away, then focus the field again." -- RenderBlock {DIV} at (0,34) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (13,47) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 63x13 -- text run at (0,0) width 63: "Placeholder" --layer at (13,47) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --caret: position 0 of child 1 {DIV} of {#document-fragment} of child 1 {INPUT} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-placeholder-visibility-3-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-placeholder-visibility-3-expected.txt -deleted file mode 100644 -index 2063b09912369e179afbfd0b9c4d04ee7072bb19..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-placeholder-visibility-3-expected.txt -+++ /dev/null -@@ -1,20 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 390x18 -- text run at (0,0) width 390: "Focus field with a placeholder, then type, then delete all text." -- RenderBlock {DIV} at (0,34) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (13,47) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 63x13 -- text run at (0,0) width 63: "Placeholder" --layer at (13,47) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderBR {BR} at (0,0) size 0x13 --caret: position 0 of child 0 {BR} of child 1 {DIV} of {#document-fragment} of child 1 {INPUT} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-readonly-dimmed-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-readonly-dimmed-expected.txt -deleted file mode 100644 -index 66ecf7c1b280d608c4ea043b9ee50f9b0696ce50..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-readonly-dimmed-expected.txt -+++ /dev/null -@@ -1,14 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 461x18 -- text run at (0,0) width 461: "This tests that the border of a readonly text field should appear dimmed." -- RenderBR {BR} at (460,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (13,31) size 140x13 scrollWidth 160 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 161x13 -- text run at (0,0) width 161: "This border should be dimmed" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-table-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-table-expected.txt -deleted file mode 100644 -index e32b1dbc1607281f57acc2a6adae063db9e1617d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-table-expected.txt -+++ /dev/null -@@ -1,98 +0,0 @@ --layer at (0,0) size 785x705 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x705 -- RenderBlock {HTML} at (0,0) size 785x705 -- RenderBody {BODY} at (8,8) size 769x689 -- RenderBlock (anonymous) at (0,0) size 769x18 -- RenderText {#text} at (0,0) size 252x18 -- text run at (0,0) width 252: "This tests minMaxWidth for text fields." -- RenderBlock {P} at (0,34) size 769x18 -- RenderText {#text} at (0,0) size 70x18 -- text run at (0,0) width 70: "Test case 1" -- RenderTable {TABLE} at (0,68) size 118x41 [border: (3px solid #0000FF)] -- RenderTableSection {TBODY} at (3,3) size 112x35 -- RenderTableRow {TR} at (0,2) size 112x31 -- RenderTableCell {TD} at (2,2) size 108x31 [border: (3px solid #FF0000)] [r=0 c=0 rs=1 cs=1] -- RenderTextControl {INPUT} at (4,6) size 100x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBlock {P} at (0,125) size 769x18 -- RenderText {#text} at (0,0) size 70x18 -- text run at (0,0) width 70: "Test case 2" -- RenderTable {TABLE} at (0,159) size 167x74 [border: (3px solid #0000FF)] -- RenderTableSection {TBODY} at (3,3) size 161x68 -- RenderTableRow {TR} at (0,2) size 161x31 -- RenderTableCell {TD} at (2,7) size 47x21 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 25x20 -- text run at (1,1) width 25: "first" -- RenderTableCell {TD} at (50,2) size 109x31 [border: (3px solid #FF0000)] [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (4,6) size 100x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableRow {TR} at (0,35) size 161x31 -- RenderTableCell {TD} at (2,40) size 47x21 [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 45x20 -- text run at (1,1) width 45: "second" -- RenderTableCell {TD} at (50,35) size 109x31 [border: (3px solid #FF0000)] [r=1 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (4,6) size 100x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBlock {P} at (0,249) size 769x18 -- RenderText {#text} at (0,0) size 70x18 -- text run at (0,0) width 70: "Test case 3" -- RenderTable {TABLE} at (0,283) size 55x77 [border: (3px solid #0000FF)] -- RenderTableSection {TBODY} at (3,3) size 49x71 -- RenderTableRow {TR} at (0,2) size 49x67 -- RenderTableCell {TD} at (2,2) size 45x67 [border: (3px solid #FF0000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (4,4) size 37x36 -- text run at (4,4) width 37: "width" -- text run at (4,22) width 32: "30px" -- RenderTextControl {INPUT} at (4,42) size 30x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBlock {P} at (0,376) size 769x18 -- RenderText {#text} at (0,0) size 70x18 -- text run at (0,0) width 70: "Test case 4" -- RenderTable {TABLE} at (0,410) size 218x69 [border: (3px solid #0000FF)] -- RenderTableSection {TBODY} at (3,3) size 212x63 -- RenderTableRow {TR} at (0,2) size 212x31 -- RenderTableCell {TD} at (2,2) size 208x31 [border: (3px solid #FF0000)] [r=0 c=0 rs=1 cs=1] -- RenderTextControl {INPUT} at (4,6) size 200x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableRow {TR} at (0,35) size 212x26 -- RenderTableCell {TD} at (2,35) size 208x26 [border: (3px solid #FF0000)] [r=1 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (4,4) size 200x18 -- RenderText {#text} at (0,0) size 40x18 -- text run at (0,0) width 40: "200px" -- RenderBlock {P} at (0,495) size 769x18 -- RenderText {#text} at (0,0) size 70x18 -- text run at (0,0) width 70: "Test case 5" -- RenderTable {TABLE} at (0,529) size 92x41 [border: (3px solid #0000FF)] -- RenderTableSection {TBODY} at (3,3) size 86x35 -- RenderTableRow {TR} at (0,2) size 86x31 -- RenderTableCell {TD} at (2,2) size 82x31 [border: (3px solid #FF0000)] [r=0 c=0 rs=1 cs=1] -- RenderTextControl {INPUT} at (6,6) size 70x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBlock {P} at (0,586) size 769x18 -- RenderText {#text} at (0,0) size 70x18 -- text run at (0,0) width 70: "Test case 6" -- RenderTable {TABLE} at (0,620) size 169x69 [border: (3px solid #0000FF)] -- RenderTableSection {TBODY} at (3,3) size 163x63 -- RenderTableRow {TR} at (0,2) size 163x31 -- RenderTableCell {TD} at (2,2) size 159x31 [border: (3px solid #FF0000)] [r=0 c=0 rs=1 cs=1] -- RenderTextControl {INPUT} at (6,6) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableRow {TR} at (0,35) size 163x26 -- RenderTableCell {TD} at (2,35) size 159x26 [border: (3px solid #FF0000)] [r=1 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (4,4) size 70x18 -- RenderText {#text} at (0,0) size 32x18 -- text run at (0,0) width 32: "70px" --layer at (20,90) size 94x13 -- RenderBlock {DIV} at (3,3) size 94x13 --layer at (68,181) size 94x13 -- RenderBlock {DIV} at (3,3) size 94x13 --layer at (68,214) size 94x13 -- RenderBlock {DIV} at (3,3) size 94x13 --layer at (20,341) size 24x13 -- RenderBlock {DIV} at (3,3) size 24x13 --layer at (20,432) size 194x13 -- RenderBlock {DIV} at (3,3) size 194x13 -- RenderText {#text} at (0,0) size 61x13 -- text run at (0,0) width 61: "width 100%" --layer at (22,551) size 64x13 -- RenderBlock {DIV} at (3,3) size 64x13 -- RenderText {#text} at (0,0) size 51x13 -- text run at (0,0) width 51: "max 70px" --layer at (22,642) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 88x13 -- text run at (0,0) width 88: "min-width 100px" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-text-word-wrap-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-text-word-wrap-expected.txt -deleted file mode 100644 -index 4d077ac7b01c9ff9e2ecbf0cc9093ea2f3332df2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-text-word-wrap-expected.txt -+++ /dev/null -@@ -1,20 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 117x18 -- text run at (0,0) width 117: "This tests that the " -- RenderInline {CODE} at (0,0) size 71x15 -- RenderText {#text} at (116,2) size 71x15 -- text run at (116,2) width 71: "word-wrap" -- RenderText {#text} at (186,0) size 309x18 -- text run at (186,0) width 309: " property is ignored for single-line text controls." -- RenderBlock (anonymous) at (0,34) size 784x33 -- RenderTextControl {INPUT} at (2,0) size 147x33 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (13,52) size 141x13 scrollWidth 256 -- RenderBlock {DIV} at (3,10) size 141x13 -- RenderText {#text} at (0,0) size 255x13 -- text run at (0,0) width 255: "This sentence should not wrap into the next line." -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/input-value-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/input-value-expected.txt -deleted file mode 100644 -index 74e137058ac4377312e79b3cab6f0e5ca8929048..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/input-value-expected.txt -+++ /dev/null -@@ -1,224 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 765x36 -- text run at (0,0) width 765: "Results that match WinIE are two columns on the right that say \"after\" every time, except for the last row which should" -- text run at (0,18) width 196: "have nothing in either column." -- RenderBlock {P} at (0,52) size 784x18 -- RenderText {#text} at (0,0) size 725x18 -- text run at (0,0) width 725: "Results that match Gecko are like WinIE, but with \"before\" for the attribute in the first two rows and the last row." -- RenderBlock {HR} at (0,86) size 784x2 [border: (1px inset #000000)] -- RenderBlock {FORM} at (0,96) size 784x365 -- RenderTable {TABLE} at (0,0) size 770x365 -- RenderTableSection {THEAD} at (0,0) size 770x24 -- RenderTableRow {TR} at (0,2) size 770x20 -- RenderTableCell {TH} at (2,2) size 392x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 57x18 -- text run at (1,1) width 57: "test case" -- RenderTableCell {TH} at (395,2) size 245x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 92x18 -- text run at (1,1) width 92: "form element" -- RenderTableCell {TH} at (641,2) size 63x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 61x18 -- text run at (1,1) width 61: "property" -- RenderTableCell {TH} at (705,2) size 63x20 [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 61x18 -- text run at (1,1) width 61: "attribute" -- RenderTableSection {TBODY} at (0,24) size 770x341 -- RenderTableRow {TR} at (0,0) size 770x25 -- RenderTableCell {TD} at (2,2) size 392x21 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 211x20 -- text run at (1,1) width 211: "text with value property changed" -- RenderTableCell {TD} at (395,0) size 245x25 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (3,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableCell {TD} at (641,2) size 63x21 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,2) size 63x21 [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (1,0) size 41x20 -- text run at (1,1) width 41: "before" -- RenderTableRow {TR} at (0,27) size 770x25 -- RenderTableCell {TD} at (2,29) size 392x21 [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 248x20 -- text run at (1,1) width 248: "password with value property changed" -- RenderTableCell {TD} at (395,27) size 245x25 [r=1 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (3,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderTableCell {TD} at (641,29) size 63x21 [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,29) size 63x21 [r=1 c=3 rs=1 cs=1] -- RenderText {#text} at (1,0) size 41x20 -- text run at (1,1) width 41: "before" -- RenderTableRow {TR} at (0,54) size 770x20 -- RenderTableCell {TD} at (2,54) size 392x20 [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 252x18 -- text run at (1,1) width 252: "check box with value property changed" -- RenderTableCell {TD} at (395,54) size 245x20 [r=2 c=1 rs=1 cs=1] -- RenderBlock {INPUT} at (3,4) size 12x12 -- RenderTableCell {TD} at (641,54) size 63x20 [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,54) size 63x20 [r=2 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,76) size 770x20 -- RenderTableCell {TD} at (2,76) size 392x20 [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 231x18 -- text run at (1,1) width 231: "hidden with value property changed" -- RenderTableCell {TD} at (395,85) size 245x2 [r=3 c=1 rs=1 cs=1] -- RenderTableCell {TD} at (641,76) size 63x20 [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,76) size 63x20 [r=3 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,98) size 770x24 -- RenderTableCell {TD} at (2,100) size 392x20 [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 228x18 -- text run at (1,1) width 228: "button with value property changed" -- RenderTableCell {TD} at (395,98) size 245x24 [r=4 c=1 rs=1 cs=1] -- RenderButton {INPUT} at (3,3) size 41x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 25x13 -- RenderText at (0,0) size 25x13 -- text run at (0,0) width 25: "after" -- RenderTableCell {TD} at (641,100) size 63x20 [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,100) size 63x20 [r=4 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,124) size 770x20 -- RenderTableCell {TD} at (2,124) size 392x20 [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 226x18 -- text run at (1,1) width 226: "image with value property changed" -- RenderTableCell {TD} at (395,124) size 245x20 [r=5 c=1 rs=1 cs=1] -- RenderImage {INPUT} at (1,1) size 38x17 -- RenderTableCell {TD} at (641,124) size 63x20 [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,124) size 63x20 [r=5 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,146) size 770x20 -- RenderTableCell {TD} at (2,146) size 392x20 [r=6 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 220x18 -- text run at (1,1) width 220: "radio with value property changed" -- RenderTableCell {TD} at (395,146) size 245x20 [r=6 c=1 rs=1 cs=1] -- RenderBlock {INPUT} at (3,4) size 12x12 -- RenderTableCell {TD} at (641,146) size 63x20 [r=6 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,146) size 63x20 [r=6 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,168) size 770x25 -- RenderTableCell {TD} at (2,170) size 392x21 [r=7 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 210x20 -- text run at (1,1) width 210: "text with value attribute changed" -- RenderTableCell {TD} at (395,168) size 245x25 [r=7 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (3,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableCell {TD} at (641,170) size 63x21 [r=7 c=2 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,170) size 63x21 [r=7 c=3 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,195) size 770x20 -- RenderTableCell {TD} at (2,195) size 392x20 [r=8 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 252x18 -- text run at (1,1) width 252: "check box with value attribute changed" -- RenderTableCell {TD} at (395,195) size 245x20 [r=8 c=1 rs=1 cs=1] -- RenderBlock {INPUT} at (3,4) size 12x12 -- RenderTableCell {TD} at (641,195) size 63x20 [r=8 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,195) size 63x20 [r=8 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,217) size 770x20 -- RenderTableCell {TD} at (2,217) size 392x20 [r=9 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 390x18 -- text run at (1,1) width 390: "text with value property changed, then turned into check box" -- RenderTableCell {TD} at (395,217) size 245x20 [r=9 c=1 rs=1 cs=1] -- RenderBlock {INPUT} at (3,4) size 12x12 -- RenderTableCell {TD} at (641,217) size 63x20 [r=9 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,217) size 63x20 [r=9 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,239) size 770x25 -- RenderTableCell {TD} at (2,241) size 392x21 [r=10 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 390x20 -- text run at (1,1) width 390: "check box with value property changed, then turned into text" -- RenderTableCell {TD} at (395,239) size 245x25 [r=10 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (3,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableCell {TD} at (641,241) size 63x21 [r=10 c=2 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,241) size 63x21 [r=10 c=3 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,266) size 770x20 -- RenderTableCell {TD} at (2,266) size 392x20 [r=11 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 389x18 -- text run at (1,1) width 389: "text with value attribute changed, then turned into check box" -- RenderTableCell {TD} at (395,266) size 245x20 [r=11 c=1 rs=1 cs=1] -- RenderBlock {INPUT} at (3,4) size 12x12 -- RenderTableCell {TD} at (641,266) size 63x20 [r=11 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,266) size 63x20 [r=11 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 30x18 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,288) size 770x25 -- RenderTableCell {TD} at (2,290) size 392x21 [r=12 c=0 rs=1 cs=1] -- RenderText {#text} at (1,0) size 389x20 -- text run at (1,1) width 389: "check box with value attribute changed, then turned into text" -- RenderTableCell {TD} at (395,288) size 245x25 [r=12 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (3,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderTableCell {TD} at (641,290) size 63x21 [r=12 c=2 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableCell {TD} at (705,290) size 63x21 [r=12 c=3 rs=1 cs=1] -- RenderText {#text} at (1,0) size 30x20 -- text run at (1,1) width 30: "after" -- RenderTableRow {TR} at (0,315) size 770x24 -- RenderTableCell {TD} at (2,317) size 392x20 [r=13 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 208x18 -- text run at (1,1) width 208: "file with value property changed" -- RenderTableCell {TD} at (395,315) size 245x24 [r=13 c=1 rs=1 cs=1] -- RenderFileUploadControl {INPUT} at (3,3) size 238x18 "no file selected" -- RenderButton {INPUT} at (0,0) size 78x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 62x13 -- RenderText at (0,0) size 62x13 -- text run at (0,0) width 62: "Choose File" -- RenderTableCell {TD} at (641,326) size 63x2 [r=13 c=2 rs=1 cs=1] -- RenderTableCell {TD} at (705,317) size 63x20 [r=13 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 41x18 -- text run at (1,1) width 41: "before" --layer at (409,134) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 34x13 -- text run at (0,0) width 34: "before" --layer at (409,161) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 31x13 -- text run at (0,0) width 31: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (409,302) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 25x13 -- text run at (0,0) width 25: "after" --layer at (409,373) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 25x13 -- text run at (0,0) width 25: "after" --layer at (409,422) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 25x13 -- text run at (0,0) width 25: "after" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/listbox-bidi-align-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/listbox-bidi-align-expected.txt -deleted file mode 100644 -index a8ecac1461a2efde62ba523174b6493f5bf7eba7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/listbox-bidi-align-expected.txt -+++ /dev/null -@@ -1,74 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x504 -- RenderBlock {HTML} at (0,0) size 800x504 -- RenderBody {BODY} at (8,8) size 784x488 -- RenderBlock (anonymous) at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 614x18 -- text run at (0,0) width 614: "This test verifies the visual alignment of items in a select element while changing text direction." -- RenderBR {BR} at (613,0) size 1x18 -- RenderText {#text} at (0,18) size 438x18 -- text run at (0,18) width 438: "All the items in the following select elements should be left-aligned." -- RenderTable {TABLE} at (0,36) size 658x132 -- RenderTableSection {TBODY} at (0,0) size 658x132 -- RenderTableRow {TR} at (0,2) size 658x63 -- RenderTableCell {TD} at (2,2) size 157x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 151x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (161,2) size 167x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 161x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (330,2) size 157x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 151x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (489,2) size 167x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 161x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableRow {TR} at (0,67) size 658x63 -- RenderTableCell {TD} at (2,67) size 157x63 [r=1 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 151x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (161,67) size 167x63 [r=1 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 161x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderBlock (anonymous) at (0,168) size 784x18 -- RenderText {#text} at (0,0) size 447x18 -- text run at (0,0) width 447: "All the items in the following select elements should be right-aligned." -- RenderTable {TABLE} at (0,186) size 652x132 -- RenderTableSection {TBODY} at (0,0) size 652x132 -- RenderTableRow {TR} at (0,2) size 652x63 -- RenderTableCell {TD} at (2,2) size 165x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 159x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (169,2) size 156x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 150x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (327,2) size 165x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 159x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (494,2) size 156x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 150x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableRow {TR} at (0,67) size 652x63 -- RenderTableCell {TD} at (2,67) size 165x63 [r=1 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 159x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (169,67) size 156x63 [r=1 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 150x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderBlock (anonymous) at (0,318) size 784x18 -- RenderText {#text} at (0,0) size 456x18 -- text run at (0,0) width 456: "All the items in the following select elements should be center-aligned." -- RenderTable {TABLE} at (0,336) size 690x67 -- RenderTableSection {TBODY} at (0,0) size 690x67 -- RenderTableRow {TR} at (0,2) size 690x63 -- RenderTableCell {TD} at (2,2) size 174x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 168x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (178,2) size 166x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 160x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (346,2) size 174x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 168x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (522,2) size 166x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 160x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderBlock (anonymous) at (0,403) size 784x18 -- RenderText {#text} at (0,0) size 296x18 -- text run at (0,0) width 296: "The following tables check mixed alignments." -- RenderTable {TABLE} at (0,421) size 732x67 -- RenderTableSection {TBODY} at (0,0) size 732x67 -- RenderTableRow {TR} at (0,2) size 732x63 -- RenderTableCell {TD} at (2,2) size 169x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 163x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (173,2) size 169x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 163x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (344,2) size 192x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 186x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (538,2) size 192x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 186x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/listbox-width-change-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/listbox-width-change-expected.txt -deleted file mode 100644 -index c762ed433c8cd8d70f8e7ff0301badd869ad3ac9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/listbox-width-change-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 661x18 -- text run at (0,0) width 661: "This tests that when a list box's options get updated, the list box will recalculate its width, and relayout." -- RenderBR {BR} at (660,0) size 1x18 -- RenderListBox {SELECT} at (2,20) size 189x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.txt -deleted file mode 100644 -index c2adde1d4ac8a40af04818fe5e89927ddc607f0a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.txt -+++ /dev/null -@@ -1,48 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 762x36 -- text run at (0,0) width 762: "Test appearances of spin buttons. Disabled state and read-only state should have appearances different from the normal" -- text run at (0,18) width 34: "state." -- RenderBlock {DIV} at (0,52) size 784x33 -- RenderInline {LABEL} at (0,0) size 348x18 -- RenderTextControl {INPUT} at (2,2) size 257x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 251x29 -- RenderBlock {DIV} at (0,3) size 232x23 -- RenderText {#text} at (260,10) size 88x18 -- text run at (260,10) width 88: " Normal state" -- RenderBlock {DIV} at (0,85) size 784x33 -- RenderInline {LABEL} at (0,0) size 355x18 -- RenderTextControl {INPUT} at (2,2) size 256x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 250x29 -- RenderBlock {DIV} at (0,3) size 231x23 -- RenderText {#text} at (259,10) size 96x18 -- text run at (259,10) width 96: " Disabled state" -- RenderBlock {DIV} at (0,118) size 784x33 -- RenderInline {LABEL} at (0,0) size 364x18 -- RenderTextControl {INPUT} at (2,2) size 256x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 250x29 -- RenderBlock {DIV} at (0,3) size 231x23 -- RenderText {#text} at (259,10) size 105x18 -- text run at (259,10) width 105: " Read-only state" --layer at (13,65) size 232x23 -- RenderBlock {DIV} at (0,0) size 232x23 -- RenderText {#text} at (0,0) size 13x23 -- text run at (0,0) width 13: "0" --layer at (13,98) size 231x23 -- RenderBlock {DIV} at (0,0) size 231x23 [color=#545454] -- RenderText {#text} at (0,0) size 13x23 -- text run at (0,0) width 13: "0" --layer at (13,131) size 231x23 -- RenderBlock {DIV} at (0,0) size 231x23 -- RenderText {#text} at (0,0) size 13x23 -- text run at (0,0) width 13: "0" --layer at (245,62) size 19x30 -- RenderBlock (relative positioned) {DIV} at (231,-1) size 20x31 --layer at (244,95) size 19x30 -- RenderBlock (relative positioned) {DIV} at (230,-1) size 20x31 --layer at (244,128) size 19x30 -- RenderBlock (relative positioned) {DIV} at (230,-1) size 20x31 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/option-text-clip-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/option-text-clip-expected.txt -deleted file mode 100644 -index f3d99b81ebde07d5772f2be7a8425961dcec9b86..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/option-text-clip-expected.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 713x18 -- text run at (0,0) width 713: "This tests that the option text is clipped properly, and doesn't spill over into the arrow part of the popup control." -- RenderBR {BR} at (712,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 150x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 150x18 -- RenderText at (8,2) size 131x13 -- text run at (8,2) width 131: "12345 6789 ABCD EFGH" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/plaintext-mode-2-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/plaintext-mode-2-expected.txt -deleted file mode 100644 -index a316f4b575195290cb38989e3cbac9e561480b00..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/plaintext-mode-2-expected.txt -+++ /dev/null -@@ -1,41 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock (anonymous) at (0,0) size 784x23 -- RenderTextControl {INPUT} at (0,2) size 600x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (600,2) size 4x18 -- text run at (600,2) width 4: " " -- RenderBR {BR} at (604,2) size 0x18 -- RenderBlock {DIV} at (0,23) size 784x18 -- RenderText {#text} at (0,0) size 33x18 -- text run at (0,0) width 33: "This " -- RenderInline {B} at (0,0) size 69x18 -- RenderText {#text} at (32,0) size 45x18 -- text run at (32,0) width 45: "styled " -- RenderInline {I} at (0,0) size 25x18 -- RenderText {#text} at (76,0) size 25x18 -- text run at (76,0) width 25: "text" -- RenderText {#text} at (100,0) size 36x18 -- text run at (100,0) width 36: ", and " -- RenderInline {A} at (0,0) size 26x18 [color=#0000EE] -- RenderText {#text} at (135,0) size 26x18 -- text run at (135,0) width 26: "link" -- RenderText {#text} at (160,0) size 413x18 -- text run at (160,0) width 211: " will be pasted into the textfield. " -- text run at (370,0) width 203: "All richness should be stripped." -- RenderBlock {OL} at (0,57) size 784x36 -- RenderListItem {LI} at (40,0) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "1" -- RenderText {#text} at (0,0) size 332x18 -- text run at (0,0) width 332: "Success: document.execCommand(\"Copy\") == true" -- RenderListItem {LI} at (40,18) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "2" -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Success: document.execCommand(\"Paste\") == true" --layer at (11,13) size 594x13 -- RenderBlock {DIV} at (3,3) size 594x13 -- RenderText {#text} at (0,0) size 465x13 -- text run at (0,0) width 465: "This styled text, and link will be pasted into the textfield. All richness should be stripped." --caret: position 94 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 0 {INPUT} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/range/input-appearance-range-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/range/input-appearance-range-expected.txt -deleted file mode 100644 -index 8e32f827bfa3b82b9b406cb442ce29cfa071ebaa..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/range/input-appearance-range-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x261 -- RenderBlock {HTML} at (0,0) size 800x261 -- RenderBody {BODY} at (8,8) size 784x245 -- RenderBlock {DIV} at (0,0) size 784x36 -- RenderSlider {INPUT} at (2,2) size 129x30 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x30 -- RenderBlock {DIV} at (0,7) size 129x16 -- RenderBlock {DIV} at (57,0) size 15x15 -- RenderBlock {DIV} at (0,36) size 784x21 -- RenderSlider {INPUT} at (2,2) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 15x15 -- RenderBlock {DIV} at (0,57) size 784x21 -- RenderSlider {INPUT} at (2,2) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (114,0) size 15x15 -- RenderBlock {DIV} at (0,78) size 784x146 -- RenderSlider {INPUT} at (64,2) size 129x140 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x140 -- RenderBlock {DIV} at (57,0) size 15x140 -- RenderBlock {DIV} at (0,62) size 15x16 -- RenderBlock {DIV} at (0,224) size 784x21 --layer at (10,234) size 129x15 -- RenderSlider {INPUT} at (2,2) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (85,0) size 16x15 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/range/slider-padding-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/range/slider-padding-expected.txt -deleted file mode 100644 -index 2cbf0a246fdd3405f1088f4a2cbebd4ec9fb19c7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/range/slider-padding-expected.txt -+++ /dev/null -@@ -1,16 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x579 -- RenderBlock (anonymous) at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "This tests that the slider control considers padding." -- RenderBR {BR} at (325,0) size 1x18 -- RenderBlock {DIV} at (0,18) size 784x39 [bgcolor=#ADD8E6] -- RenderSlider {INPUT} at (2,2) size 100x35 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (10,10) size 80x15 -- RenderBlock {DIV} at (0,0) size 80x15 -- RenderBlock {DIV} at (0,0) size 15x15 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {PRE} at (0,70) size 784x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/range/slider-thumb-shared-style-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/range/slider-thumb-shared-style-expected.txt -deleted file mode 100644 -index dcc06d0a9e7040b7bfda83d48b2acf721bcd718e..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/range/slider-thumb-shared-style-expected.txt -+++ /dev/null -@@ -1,31 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 54x18 -- text run at (0,0) width 54: "Test for " -- RenderInline {I} at (0,0) size 717x18 -- RenderInline {A} at (0,0) size 305x18 [color=#0000EE] -- RenderText {#text} at (53,0) size 305x18 -- text run at (53,0) width 305: "http://bugs.webkit.org/show_bug.cgi?id=13800" -- RenderText {#text} at (357,0) size 413x18 -- text run at (357,0) width 5: " " -- text run at (361,0) width 409: "REGRESSION: Moving a slider moves another unrelated slider" -- RenderText {#text} at (769,0) size 5x18 -- text run at (769,0) width 5: "." -- RenderBlock {P} at (0,34) size 784x18 -- RenderText {#text} at (0,0) size 289x18 -- text run at (0,0) width 289: "The first slider\x{2019}s thumb should be on the left." -- RenderBlock {DIV} at (0,68) size 784x38 -- RenderSlider {INPUT} at (2,2) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 15x15 -- RenderBR {BR} at (133,3) size 0x18 -- RenderSlider {INPUT} at (2,21) size 129x15 [color=#909090] [bgcolor=#FFFFFF] -- RenderFlexibleBox {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (0,0) size 129x15 -- RenderBlock {DIV} at (114,0) size 15x15 -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/range/thumbslider-no-parent-slider-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/range/thumbslider-no-parent-slider-expected.txt -deleted file mode 100644 -index fbb0dc74be95c771c8a48e99dc95739f940c9676..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/range/thumbslider-no-parent-slider-expected.txt -+++ /dev/null -@@ -1,9 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {SPAN} at (0,0) size 15x15 -- RenderBR {BR} at (15,1) size 0x18 -- RenderBlock {SPAN} at (0,15) size 15x15 -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/search-rtl-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/search-rtl-expected.txt -deleted file mode 100644 -index 183ae8a007ab1bb0318ed9172a7559e5d648726a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/search-rtl-expected.txt -+++ /dev/null -@@ -1,58 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 54x18 -- text run at (0,0) width 54: "Test for " -- RenderInline {I} at (0,0) size 702x18 -- RenderInline {A} at (0,0) size 304x18 [color=#0000EE] -- RenderText {#text} at (53,0) size 304x18 -- text run at (53,0) width 304: "http://bugs.webkit.org/show_bug.cgi?id=11916" -- RenderText {#text} at (356,0) size 399x18 -- text run at (356,0) width 5: " " -- text run at (360,0) width 395: "REGRESSION (SearchField): RTL search fields are mixed up" -- RenderText {#text} at (754,0) size 5x18 -- text run at (754,0) width 5: "." -- RenderBlock {P} at (0,34) size 784x69 -- RenderTextControl {INPUT} at (2,2) size 187x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 181x19 -- RenderBlock {DIV} at (158,0) size 23x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderBR {BR} at (190,2) size 1x18 -- RenderTextControl {INPUT} at (2,25) size 257x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 251x19 -- RenderBlock {DIV} at (228,0) size 23x19 -- RenderBlock {DIV} at (19,3) size 210x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderBR {BR} at (260,25) size 1x18 -- RenderTextControl {INPUT} at (2,48) size 187x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 181x19 -- RenderBlock {DIV} at (158,0) size 23x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,119) size 784x18 -- RenderText {#text} at (0,0) size 37x18 -- text run at (0,0) width 37: "PASS" --layer at (32,47) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (7,0) size 133x13 -- text run at (7,0) width 22 RTL: " \x{5D5}\x{5D6}\x{5D4}\x{5D5}" -- text run at (28,0) width 20: "she" -- text run at (47,0) width 44 RTL: " \x{5D5}\x{5D4}\x{5D9}\x{5D0} \x{5D6}\x{5D4} " -- text run at (90,0) width 14: "he" -- text run at (103,0) width 37 RTL: "\x{5D4}\x{5D5}\x{5D0} \x{5D6}\x{5D4} " --layer at (32,70) size 210x13 -- RenderBlock {DIV} at (0,0) size 210x13 -- RenderText {#text} at (76,0) size 134x13 -- text run at (76,0) width 23 RTL: " \x{5D5}\x{5D6}\x{5D4}\x{5D5}" -- text run at (98,0) width 20: "she" -- text run at (117,0) width 44 RTL: " \x{5D5}\x{5D4}\x{5D9}\x{5D0} \x{5D6}\x{5D4} " -- text run at (160,0) width 14: "he" -- text run at (173,0) width 37 RTL: "\x{5D4}\x{5D5}\x{5D0} \x{5D6}\x{5D4} " --layer at (32,93) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 --caret: position 0 of child 0 {DIV} of child 1 {DIV} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of child 3 {P} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/search/search-size-with-decorations-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/search/search-size-with-decorations-expected.txt -deleted file mode 100644 -index 7adee50489e8c4b4c47c31582cd5acb53311b23c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/search/search-size-with-decorations-expected.txt -+++ /dev/null -@@ -1,69 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x177 -- RenderBlock {HTML} at (0,0) size 800x177 -- RenderBody {BODY} at (8,8) size 784x161 -- RenderTextControl {INPUT} at (2,2) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderBR {BR} at (177,2) size 1x18 -- RenderTextControl {INPUT} at (2,25) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderBR {BR} at (177,25) size 1x18 -- RenderTextControl {INPUT} at (2,48) size 183x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 177x19 -- RenderBlock {DIV} at (0,0) size 17x19 -- RenderBlock {DIV} at (17,3) size 141x13 -- RenderBlock {DIV} at (157,0) size 20x19 -- RenderBR {BR} at (186,48) size 1x18 -- RenderTextControl {INPUT} at (2,71) size 183x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 177x19 -- RenderBlock {DIV} at (0,0) size 17x19 -- RenderBlock {DIV} at (17,3) size 141x13 -- RenderBlock {DIV} at (157,0) size 20x19 -- RenderBR {BR} at (186,71) size 1x18 -- RenderTextControl {INPUT} at (2,94) size 188x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 182x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 141x13 -- RenderBlock {DIV} at (162,0) size 20x19 -- RenderBR {BR} at (191,94) size 1x18 -- RenderTextControl {INPUT} at (2,117) size 188x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 182x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 141x13 -- RenderBlock {DIV} at (162,0) size 20x19 -- RenderBR {BR} at (191,117) size 1x18 -- RenderTextControl {INPUT} at (2,140) size 328x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 322x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 281x13 -- RenderBlock {DIV} at (302,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 --layer at (21,13) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (21,36) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 135x13 -- text run at (0,0) width 135: "12345678901234567890" --layer at (30,59) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (30,82) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 135x13 -- text run at (0,0) width 135: "12345678901234567890" --layer at (35,105) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (35,128) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 135x13 -- text run at (0,0) width 135: "12345678901234567890" --layer at (35,151) size 281x13 -- RenderBlock {DIV} at (0,0) size 281x13 -- RenderText {#text} at (0,0) size 270x13 -- text run at (0,0) width 270: "1234567890123456789012345678901234567890" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/search/search-zoom-computed-style-height-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/search/search-zoom-computed-style-height-expected.txt -deleted file mode 100644 -index 1045dc18a82b3fed89d2e543b1612bce9d2e81c7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/search/search-zoom-computed-style-height-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --Test for computed style height of a zoomed-in search field -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --PASS successfullyParsed is true -- --TEST COMPLETE -- --Computed style height: 22px -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/select-change-listbox-to-popup-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/select-change-listbox-to-popup-expected.txt -deleted file mode 100644 -index eeee40faad064d0f888b4a853402afb0d67251e4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/select-change-listbox-to-popup-expected.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 450x18 -- text run at (0,0) width 450: "This tests that you can dynamically change a list box to a popup menu" -- RenderBR {BR} at (449,0) size 1x18 -- RenderMenuList {SELECT} at (2,20) size 218x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 218x18 -- RenderText at (8,2) size 187x13 -- text run at (8,2) width 187: "This should turn into a popup menu" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/select-change-popup-to-listbox-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/select-change-popup-to-listbox-expected.txt -deleted file mode 100644 -index 440a1d3b31ebeca3eebd4013fd0c0ccae75205e1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/select-change-popup-to-listbox-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 454x18 -- text run at (0,0) width 454: "This tests that you can dynamically change a popup menu to a list box." -- RenderBR {BR} at (453,0) size 1x18 -- RenderListBox {SELECT} at (2,20) size 176x71 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/select-selected-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/select-selected-expected.txt -deleted file mode 100644 -index bb0ac0eabcc6ddff98cd8f5e1f39c74cf48d0277..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/select-selected-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderMenuList {SELECT} at (2,2) size 259x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 259x18 -- RenderText at (8,2) size 164x13 -- text run at (8,2) width 164: "should see this option selected" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/select-visual-hebrew-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/select-visual-hebrew-expected.txt -deleted file mode 100644 -index 3f453d317b043bc9397b4bc330cc66194332ddf0..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/select-visual-hebrew-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 632x18 -- text run at (0,0) width 632: "This tests that native pop-ups are rendered in logical order even in visually-ordered Hebrew pages." -- RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,52) size 784x19 -- RenderText {#text} at (0,1) size 398x18 -- text run at (0,1) width 398: "Text on the pop-up and in the list should look like this: \x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}" -- RenderBlock (anonymous) at (0,87) size 784x22 -- RenderMenuList {SELECT} at (2,2) size 61x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 61x18 -- RenderText at (8,2) size 30x13 -- text run at (8,2) width 30 RTL: "\x{5DB}\x{5E4}\x{5EA}\x{5D5}\x{5E8}" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/select/optgroup-rendering-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/select/optgroup-rendering-expected.txt -deleted file mode 100644 -index a6f3033c365ef98019cbb4ee337bed1b3aa8a90f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/select/optgroup-rendering-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x323 -- RenderBlock {HTML} at (0,0) size 800x323 -- RenderBody {BODY} at (8,8) size 784x307 -- RenderBlock {FORM} at (0,0) size 784x307 -- RenderListBox {SELECT} at (2,2) size 70x281 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderText {#text} at (74,264) size 4x18 -- text run at (74,264) width 4: " " -- RenderBR {BR} at (78,264) size 0x18 -- RenderMenuList {SELECT} at (2,287) size 75x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 75x18 -- RenderText at (8,2) size 31x13 -- text run at (8,2) width 31: "Three" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/textAreaLineHeight-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/textAreaLineHeight-expected.txt -deleted file mode 100644 -index ddb1c6208fbfc43f73d5afb48376167d77700edf..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/textAreaLineHeight-expected.txt -+++ /dev/null -@@ -1,78 +0,0 @@ --layer at (0,0) size 785x1207 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x1207 -- RenderBlock {HTML} at (0,0) size 785x1208 -- RenderBody {BODY} at (8,8) size 769x1184 -- RenderBlock (anonymous) at (0,0) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "line-height settings not reflected in textarea" -- RenderBR {BR} at (276,0) size 1x18 -- RenderBlock {P} at (0,34) size 769x264 -- RenderText {#text} at (0,0) size 84x18 -- text run at (0,0) width 84: "TEXTAREA" -- RenderBR {BR} at (83,0) size 1x18 -- RenderText {#text} at (406,210) size 4x18 -- text run at (406,210) width 4: " " -- RenderBR {BR} at (0,0) size 0x0 -- RenderBR {BR} at (0,228) size 0x18 -- RenderText {#text} at (0,246) size 148x18 -- text run at (0,246) width 148: "PARAGRAPH - works" -- RenderBlock {P} at (0,314) size 402x202 [border: (1px dotted #C0C0C0)] -- RenderText {#text} at (1,19) size 400x69 -- text run at (1,19) width 400: "Demo text here that wraps a bit and should demonstrate the" -- text run at (1,72) width 154: "goodness of line-height" -- RenderBlock (anonymous) at (0,529) size 769x37 -- RenderBR {BR} at (0,0) size 0x18 -- RenderText {#text} at (0,18) size 81x18 -- text run at (0,18) width 81: "DIV - works" -- RenderBR {BR} at (80,18) size 1x18 -- RenderBlock {DIV} at (0,565) size 402x203 [border: (1px dotted #C0C0C0)] -- RenderText {#text} at (1,19) size 400x69 -- text run at (1,19) width 400: "Demo text here that wraps a bit and should demonstrate the" -- text run at (1,72) width 154: "goodness of line-height" -- RenderBlock (anonymous) at (0,767) size 769x417 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBR {BR} at (0,18) size 0x18 -- RenderText {#text} at (0,36) size 125x18 -- text run at (0,36) width 125: "Un-Styled Textarea" -- RenderBR {BR} at (124,36) size 1x18 -- RenderText {#text} at (165,76) size 4x18 -- text run at (165,76) width 4: " " -- RenderBR {BR} at (0,0) size 0x0 -- RenderBR {BR} at (0,94) size 0x18 -- RenderText {#text} at (0,112) size 216x18 -- text run at (0,112) width 216: "Totally Blank Un-Styled Textarea" -- RenderBR {BR} at (215,112) size 1x18 -- RenderText {#text} at (165,152) size 4x18 -- text run at (165,152) width 4: " " -- RenderBR {BR} at (0,0) size 0x0 -- RenderBR {BR} at (0,170) size 0x18 -- RenderText {#text} at (0,188) size 212x18 -- text run at (0,188) width 212: "Totally Blank STYLED Textarea" -- RenderBR {BR} at (211,188) size 1x18 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,1199) size 769x0 --layer at (8,60) size 406x206 clip at (9,61) size 404x204 -- RenderTextControl {TEXTAREA} at (0,18) size 406x206 [bgcolor=#FFFFFF] [border: (1px dotted #C0C0C0)] -- RenderBlock {DIV} at (3,3) size 400x106 -- RenderText {#text} at (0,18) size 400x69 -- text run at (0,18) width 400: "Demo text here that wraps a bit and should demonstrate the" -- text run at (399,18) width 1: " " -- text run at (0,71) width 154: "goodness of line-height" --layer at (10,831) size 161x32 clip at (11,832) size 144x30 scrollHeight 56 -- RenderTextControl {TEXTAREA} at (2,56) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 140x52 -- RenderText {#text} at (0,0) size 140x52 -- text run at (0,0) width 140: "Demo text here that wraps" -- text run at (139,0) width 1: " " -- text run at (0,13) width 84: "a bit and should" -- text run at (83,13) width 5: " " -- text run at (0,26) width 87: "demonstrate the" -- text run at (86,26) width 4: " " -- text run at (0,39) width 125: "goodness of line-height" --layer at (10,907) size 161x32 clip at (11,908) size 159x30 -- RenderTextControl {TEXTAREA} at (2,132) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 --layer at (8,981) size 406x206 clip at (9,982) size 404x204 -- RenderTextControl {TEXTAREA} at (0,206) size 406x206 [bgcolor=#FFFFFF] [border: (1px dotted #C0C0C0)] -- RenderBlock {DIV} at (3,3) size 400x53 -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/textarea-placeholder-visibility-1-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/textarea-placeholder-visibility-1-expected.txt -deleted file mode 100644 -index 466147338638e9197df447c7bf684ed60a02ddb1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/textarea-placeholder-visibility-1-expected.txt -+++ /dev/null -@@ -1,19 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 390x18 -- text run at (0,0) width 390: "Focus field with a placeholder, then type, then delete all text." -- RenderBlock {DIV} at (0,34) size 784x36 -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (10,44) size 161x32 clip at (11,45) size 159x30 -- RenderTextControl {TEXTAREA} at (2,2) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderBR {BR} at (0,0) size 0x13 -- RenderBlock {DIV} at (3,3) size 155x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 63x13 -- text run at (0,0) width 63: "Placeholder" --caret: position 0 of child 0 {BR} of child 0 {DIV} of {#document-fragment} of child 1 {TEXTAREA} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/textarea-placeholder-visibility-2-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/textarea-placeholder-visibility-2-expected.txt -deleted file mode 100644 -index 85a3ed75b57a14baff4af777873800a6d17753dc..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/textarea-placeholder-visibility-2-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Focus field with a placeholder, then type, then clear the value." -- RenderBlock {DIV} at (0,34) size 784x36 -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (10,44) size 161x32 clip at (11,45) size 159x30 -- RenderTextControl {TEXTAREA} at (2,2) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderBlock {DIV} at (3,3) size 155x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 63x13 -- text run at (0,0) width 63: "Placeholder" --caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {TEXTAREA} of child 3 {DIV} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/textfield-outline-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/textfield-outline-expected.txt -deleted file mode 100644 -index a513235df3fb993879d4117400449bfca42940f2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/textfield-outline-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 563x18 -- text run at (0,0) width 563: "This tests that a negative outline-offset won't get in the way of a cursor in a text control." -- RenderBR {BR} at (562,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 255x27 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (12,30) size 251x23 -- RenderBlock {DIV} at (2,2) size 251x23 -- RenderText {#text} at (0,0) size 33x23 -- text run at (0,0) width 33: "abc" --caret: position 3 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 3 {INPUT} of body -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/time/time-input-rendering-basic-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/time/time-input-rendering-basic-expected.txt -deleted file mode 100644 -index f9f1bfafa4a9f8d0637c5f9b68426ba2e7bde0d2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/time/time-input-rendering-basic-expected.txt -+++ /dev/null -@@ -1,48 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (68,4) size 5x18 -- text run at (68,4) width 5: " " -- RenderText {#text} at (0,0) size 0x0 --layer at (10,10) size 64x23 clip at (12,12) size 60x19 -- RenderFlexibleBox {INPUT} at (2,2) size 65x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (13,13) size 58x17 -- RenderBlock {DIV} at (3,3) size 59x17 -- RenderBlock {DIV} at (1,1) size 57x15 -- RenderBlock {DIV} at (0,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "09" -- RenderInline {DIV} at (0,0) size 4x13 -- RenderText {#text} at (16,1) size 4x13 -- text run at (16,1) width 4: ":" -- RenderBlock {DIV} at (19,0) size 18x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "41" -- RenderInline {DIV} at (0,0) size 4x13 -- RenderText {#text} at (35,1) size 4x13 -- text run at (35,1) width 4: " " -- RenderBlock {DIV} at (37,0) size 20x15 -- RenderText {#text} at (1,1) size 18x13 -- text run at (1,1) width 18: "AM" --layer at (82,10) size 65x23 clip at (84,12) size 61x19 -- RenderFlexibleBox {INPUT} at (74,2) size 65x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (85,13) size 58x17 -- RenderBlock {DIV} at (3,3) size 59x17 -- RenderBlock {DIV} at (1,1) size 57x15 -- RenderBlock {DIV} at (40,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "09" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (36,1) size 5x13 -- text run at (36,1) width 5 RTL: ":" -- RenderBlock {DIV} at (20,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "41" -- RenderInline {DIV} at (0,0) size 4x13 -- RenderText {#text} at (18,1) size 4x13 -- text run at (18,1) width 4 RTL: " " -- RenderBlock {DIV} at (0,0) size 20x15 -- RenderText {#text} at (1,1) size 18x13 -- text run at (1,1) width 18: "AM" -diff --git a/LayoutTests/platform/mac-catalina/fast/forms/visual-hebrew-text-field-expected.txt b/LayoutTests/platform/mac-catalina/fast/forms/visual-hebrew-text-field-expected.txt -deleted file mode 100644 -index 7724c8ce7dff8e71918d5ed92293dc1a1c0be70f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/forms/visual-hebrew-text-field-expected.txt -+++ /dev/null -@@ -1,28 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 218x18 -- text run at (0,0) width 218: "This tests for a regression against " -- RenderInline {I} at (0,0) size 783x36 -- RenderInline {A} at (0,0) size 354x18 [color=#0000EE] -- RenderText {#text} at (217,0) size 354x18 -- text run at (217,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8076" -- RenderText {#text} at (570,0) size 783x36 -- text run at (570,0) width 213: " REGRESSION: native text fields" -- text run at (0,18) width 251: "are reversed on \"visual Hebrew\" pages" -- RenderText {#text} at (250,18) size 5x18 -- text run at (250,18) width 5: "." -- RenderBlock {HR} at (0,52) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,70) size 784x19 -- RenderText {#text} at (0,1) size 286x18 -- text run at (0,1) width 286: "Text in the field should look like this: \x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}" -- RenderBlock (anonymous) at (0,105) size 784x23 -- RenderTextControl {INPUT} at (2,2) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (13,118) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 30x13 -- text run at (0,0) width 30 RTL: "\x{5DB}\x{5E4}\x{5EA}\x{5D5}\x{5E8}" -diff --git a/LayoutTests/platform/mac-catalina/fast/parser/document-write-option-expected.txt b/LayoutTests/platform/mac-catalina/fast/parser/document-write-option-expected.txt -deleted file mode 100644 -index cac7ff8eff08a7557f5460db734030f1ce3ffc73..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/parser/document-write-option-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderMenuList {SELECT} at (2,2) size 317x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 317x18 -- RenderText at (8,2) size 286x13 -- text run at (8,2) width 286: "This is a very long string so it makes the select bigger." -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-catalina/fast/parser/entity-comment-in-textarea-expected.txt b/LayoutTests/platform/mac-catalina/fast/parser/entity-comment-in-textarea-expected.txt -deleted file mode 100644 -index c95447a3b64a3411dd5f0ae4ff93b7ebdc4c445a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-catalina/fast/parser/entity-comment-in-textarea-expected.txt -+++ /dev/null -@@ -1,12 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (165,22) size 255x18 -- text run at (165,22) width 255: " --> This should be outside the textarea." --layer at (10,10) size 161x32 clip at (11,11) size 159x30 -- RenderTextControl {TEXTAREA} at (2,2) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 155x13 -- RenderText {#text} at (0,0) size 22x13 -- text run at (0,0) width 22: " world. -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[hello world. ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-size-expected.txt b/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-size-expected.txt -deleted file mode 100644 -index ca52fdd063faaa10fa712c1d7bb560ce69797527..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-size-expected.txt -+++ /dev/null -@@ -1,125 +0,0 @@ --Input: --small element --xx-small --x-small --small --normal --large --x-large --xx-large --5pt --15pt -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[small element] -- NSFont: Times-Roman 13.33 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[xx-small] -- NSFont: Times-Roman 9.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[x-small] -- NSFont: Times-Roman 10.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[small] -- NSFont: Times-Roman 13.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ normal ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[large] -- NSFont: Times-Roman 18.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[x-large] -- NSFont: Times-Roman 24.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[xx-large] -- NSFont: Times-Roman 32.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[5pt] -- NSFont: Times-Roman 6.67 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[15pt] -- NSFont: Times-Roman 20.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt b/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt -deleted file mode 100644 -index 2d35c81c3c52015d14ebfc72c730575419f08251..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-style-variant-effect-expected.txt -+++ /dev/null -@@ -1,60 +0,0 @@ --Input: --italic --oblique --small-caps --outline --emboss -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[italic] -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[oblique] -- NSFont: Times-Italic 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[small-caps] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ outline emboss ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-weight-expected.txt b/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-weight-expected.txt -deleted file mode 100644 -index be72a540d1acc5beef24a024e38fd5b3621e9fe8..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/font-weight-expected.txt -+++ /dev/null -@@ -1,85 +0,0 @@ --Input: --bold --font weight 100 --font weight 200 --font weight 300 --font weight 400 --font weight 500 --font weight 600 --font weight 700 --font weight 800 --font weight 900 -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[bold] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ font weight 100 font weight 200 font weight 300 font weight 400 font weight 500 ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 600] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 700] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 800] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[font weight 900] -- NSFont: Times-Bold 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/letter-spacing-expected.txt b/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/letter-spacing-expected.txt -deleted file mode 100644 -index 14c9a9efa74a5469f33d4d0245cfd6e1ff0f8918..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/letter-spacing-expected.txt -+++ /dev/null -@@ -1,36 +0,0 @@ --Input: --3pt -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[3pt] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/text-decorations-expected.txt b/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/text-decorations-expected.txt -deleted file mode 100644 -index c911ce26874ac95cd27d6cced31a1c001b3e5a03..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/text-decorations-expected.txt -+++ /dev/null -@@ -1,50 +0,0 @@ --Input: --underline --strike --underline and strike -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[underline] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSUnderline: true --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[strike] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrikethrough: true -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[ underline and strike ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/vertical-align-expected.txt b/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/vertical-align-expected.txt -deleted file mode 100644 -index 678c630ba4c673065671292238771855b373dc72..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/editing/mac/attributed-string/vertical-align-expected.txt -+++ /dev/null -@@ -1,74 +0,0 @@ --Input: --sup element --sub element --vertical align super --vertical align sub --vertical align 50% -- --Output: --NSParagraphStyle: --Alignment 4 -- LineSpacing: 0 -- ParagraphSpacing: 0 -- ParagraphSpacingBefore: 0 -- HeadIndent: 0 -- TailIndent: 0 -- FirstLineHeadIndent: 0 -- LineHeight: 0/0 -- LineHeightMultiple: 0 -- LineBreakMode: 0 -- Tabs: () -- DefaultTabInterval: 36 -- Blocks: ( --) -- Lists: ( --) -- BaseWritingDirection: 0 -- HyphenationFactor: 0 -- TighteningForTruncation: YES -- HeaderLevel: 0 --[sup element] -- NSFont: Times-Roman 13.33 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: 1 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[sub element] -- NSFont: Times-Roman 13.33 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: -1 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[vertical align super] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: 1 --[ ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 --[vertical align sub] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- NSSuperScript: -1 --[ vertical align 50% ] -- NSFont: Times-Roman 16.00 pt. -- NSKern: 0pt -- NSStrokeColor: #000000 (sRGB) -- NSStrokeWidth: 0 -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt b/LayoutTests/platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt -deleted file mode 100644 -index a5d982577b01453f562d4c5cee149d627d818d0e..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt -+++ /dev/null -@@ -1,17 +0,0 @@ -- --PASS Response.redirected should be false on not-redirected responses --PASS Redirect 301 with GET --PASS Redirect 301 with POST --FAIL Redirect 301 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 302 with GET --PASS Redirect 302 with POST --FAIL Redirect 302 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with GET --PASS Redirect 303 with POST --FAIL Redirect 303 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with TESTING --PASS Redirect 307 with GET --PASS Redirect 307 with POST (string body) --PASS Redirect 307 with POST (blob body) --FAIL Redirect 307 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" -- -diff --git a/LayoutTests/platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt b/LayoutTests/platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt -deleted file mode 100644 -index a5d982577b01453f562d4c5cee149d627d818d0e..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave-wk1/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt -+++ /dev/null -@@ -1,17 +0,0 @@ -- --PASS Response.redirected should be false on not-redirected responses --PASS Redirect 301 with GET --PASS Redirect 301 with POST --FAIL Redirect 301 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 302 with GET --PASS Redirect 302 with POST --FAIL Redirect 302 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with GET --PASS Redirect 303 with POST --FAIL Redirect 303 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with TESTING --PASS Redirect 307 with GET --PASS Redirect 307 with POST (string body) --PASS Redirect 307 with POST (blob body) --FAIL Redirect 307 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" -- -diff --git a/LayoutTests/platform/mac-mojave/css1/basic/inheritance-expected.txt b/LayoutTests/platform/mac-mojave/css1/basic/inheritance-expected.txt -deleted file mode 100644 -index bbee1a343e7ee107dd312a99ec6197efa4a6baf4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/css1/basic/inheritance-expected.txt -+++ /dev/null -@@ -1,189 +0,0 @@ --layer at (0,0) size 785x730 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x730 -- RenderBlock {HTML} at (0,0) size 785x731 -- RenderBody {BODY} at (8,8) size 769x715 [color=#008000] [bgcolor=#CCCCCC] -- RenderBlock {P} at (0,0) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "The style declarations which apply to the text below are:" -- RenderBlock {PRE} at (0,34) size 769x105 -- RenderText {#text} at (0,0) size 266x105 -- text run at (0,0) width 157: "BODY {color: green;}" -- text run at (156,0) width 1: " " -- text run at (0,15) width 133: "H3 {color: blue;}" -- text run at (132,15) width 1: " " -- text run at (0,30) width 149: "EM {color: purple;}" -- text run at (148,30) width 1: " " -- text run at (0,45) width 203: ".one {font-style: italic;}" -- text run at (202,45) width 1: " " -- text run at (0,60) width 266: ".two {text-decoration: underline;}" -- text run at (265,60) width 1: " " -- text run at (0,75) width 149: "#two {color: navy;}" -- text run at (148,75) width 1: " " -- text run at (0,90) width 180: ".three {color: purple;}" -- text run at (179,90) width 1: " " -- RenderBlock {HR} at (0,152) size 769x2 [border: (1px inset #008000)] -- RenderBlock {H3} at (0,172) size 769x23 [color=#0000FF] -- RenderText {#text} at (0,0) size 219x22 -- text run at (0,0) width 219: "This sentence should show " -- RenderInline {STRONG} at (0,0) size 36x22 -- RenderText {#text} at (218,0) size 36x22 -- text run at (218,0) width 36: "blue" -- RenderText {#text} at (253,0) size 41x22 -- text run at (253,0) width 41: " and " -- RenderInline {EM} at (0,0) size 57x22 [color=#800080] -- RenderText {#text} at (293,0) size 57x22 -- text run at (293,0) width 57: "purple" -- RenderText {#text} at (349,0) size 5x22 -- text run at (349,0) width 5: "." -- RenderBlock {H3} at (0,213) size 769x23 [color=#0000FF] -- RenderText {#text} at (0,0) size 197x22 -- text run at (0,0) width 197: "This sentence should be " -- RenderInline {SPAN} at (0,0) size 38x22 -- RenderText {#text} at (196,0) size 38x22 -- text run at (196,0) width 38: "blue" -- RenderText {#text} at (233,0) size 102x22 -- text run at (233,0) width 102: " throughout." -- RenderBlock {P} at (0,254) size 769x19 -- RenderText {#text} at (0,0) size 230x18 -- text run at (0,0) width 230: "This should be green except for the " -- RenderInline {EM} at (0,0) size 118x18 [color=#800080] -- RenderText {#text} at (229,0) size 118x18 -- text run at (229,0) width 118: "emphasized words" -- RenderText {#text} at (346,0) size 163x18 -- text run at (346,0) width 163: ", which should be purple." -- RenderBlock {H3} at (0,290) size 769x23 [color=#0000FF] -- RenderText {#text} at (0,0) size 292x22 -- text run at (0,0) width 292: "This should be blue and underlined." -- RenderBlock {P} at (0,331) size 769x19 -- RenderText {#text} at (0,0) size 299x18 -- text run at (0,0) width 299: "This sentence should be underlined, including " -- RenderInline {TT} at (0,0) size 71x15 -- RenderText {#text} at (298,2) size 71x15 -- text run at (298,2) width 71: "this part" -- RenderText {#text} at (368,0) size 9x18 -- text run at (368,0) width 9: ", " -- RenderInline {I} at (0,0) size 55x18 -- RenderText {#text} at (376,0) size 55x18 -- text run at (376,0) width 55: "this part" -- RenderText {#text} at (430,0) size 9x18 -- text run at (430,0) width 9: ", " -- RenderInline {EM} at (0,0) size 54x18 [color=#800080] -- RenderText {#text} at (438,0) size 54x18 -- text run at (438,0) width 54: "this part" -- RenderText {#text} at (491,0) size 37x18 -- text run at (491,0) width 37: ", and " -- RenderInline {STRONG} at (0,0) size 59x18 -- RenderText {#text} at (527,0) size 59x18 -- text run at (527,0) width 59: "this part" -- RenderText {#text} at (585,0) size 5x18 -- text run at (585,0) width 5: "." -- RenderBlock {P} at (0,365) size 769x19 [color=#000080] -- RenderText {#text} at (0,0) size 444x18 -- text run at (0,0) width 444: "This sentence should also be underlined, as well as dark blue (navy), " -- RenderInline {TT} at (0,0) size 149x15 -- RenderText {#text} at (443,2) size 149x15 -- text run at (443,2) width 149: "including this part" -- RenderText {#text} at (591,0) size 5x18 -- text run at (591,0) width 5: "." -- RenderBlock {P} at (0,399) size 769x19 [color=#800080] -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "This sentence should be purple, including " -- RenderInline {STRONG} at (0,0) size 59x18 -- RenderText {#text} at (270,0) size 59x18 -- text run at (270,0) width 59: "this part" -- RenderText {#text} at (328,0) size 32x18 -- text run at (328,0) width 32: " and " -- RenderInline {SPAN} at (0,0) size 178x18 -- RenderText {#text} at (359,0) size 178x18 -- text run at (359,0) width 178: "this part (which is spanned)" -- RenderText {#text} at (536,0) size 5x18 -- text run at (536,0) width 5: "." -- RenderTable {TABLE} at (0,433) size 618x282 [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 616x279 -- RenderTableRow {TR} at (0,0) size 616x26 -- RenderTableCell {TD} at (0,0) size 616x26 [bgcolor=#C0C0C0] [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=2] -- RenderInline {STRONG} at (0,0) size 161x18 -- RenderText {#text} at (4,4) size 161x18 -- text run at (4,4) width 161: "TABLE Testing Section" -- RenderTableRow {TR} at (0,26) size 616x253 -- RenderTableCell {TD} at (0,139) size 12x27 [bgcolor=#C0C0C0] [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (4,3) size 4x19 -- text run at (4,4) width 4: " " -- RenderTableCell {TD} at (12,26) size 604x253 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] -- RenderBlock {H3} at (4,4) size 596x22 [color=#0000FF] -- RenderText {#text} at (0,0) size 219x22 -- text run at (0,0) width 219: "This sentence should show " -- RenderInline {STRONG} at (0,0) size 36x22 -- RenderText {#text} at (218,0) size 36x22 -- text run at (218,0) width 36: "blue" -- RenderText {#text} at (253,0) size 41x22 -- text run at (253,0) width 41: " and " -- RenderInline {EM} at (0,0) size 57x22 [color=#800080] -- RenderText {#text} at (293,0) size 57x22 -- text run at (293,0) width 57: "purple" -- RenderText {#text} at (349,0) size 5x22 -- text run at (349,0) width 5: "." -- RenderBlock {H3} at (4,44) size 596x23 [color=#0000FF] -- RenderText {#text} at (0,0) size 197x22 -- text run at (0,0) width 197: "This sentence should be " -- RenderInline {SPAN} at (0,0) size 38x22 -- RenderText {#text} at (196,0) size 38x22 -- text run at (196,0) width 38: "blue" -- RenderText {#text} at (233,0) size 102x22 -- text run at (233,0) width 102: " throughout." -- RenderBlock {P} at (4,85) size 596x19 -- RenderText {#text} at (0,0) size 230x18 -- text run at (0,0) width 230: "This should be green except for the " -- RenderInline {EM} at (0,0) size 118x18 [color=#800080] -- RenderText {#text} at (229,0) size 118x18 -- text run at (229,0) width 118: "emphasized words" -- RenderText {#text} at (346,0) size 163x18 -- text run at (346,0) width 163: ", which should be purple." -- RenderBlock {H3} at (4,122) size 596x23 [color=#0000FF] -- RenderText {#text} at (0,0) size 292x22 -- text run at (0,0) width 292: "This should be blue and underlined." -- RenderBlock {P} at (4,162) size 596x19 -- RenderText {#text} at (0,0) size 299x18 -- text run at (0,0) width 299: "This sentence should be underlined, including " -- RenderInline {TT} at (0,0) size 71x15 -- RenderText {#text} at (298,2) size 71x15 -- text run at (298,2) width 71: "this part" -- RenderText {#text} at (368,0) size 9x18 -- text run at (368,0) width 9: ", " -- RenderInline {I} at (0,0) size 55x18 -- RenderText {#text} at (376,0) size 55x18 -- text run at (376,0) width 55: "this part" -- RenderText {#text} at (430,0) size 9x18 -- text run at (430,0) width 9: ", " -- RenderInline {EM} at (0,0) size 54x18 [color=#800080] -- RenderText {#text} at (438,0) size 54x18 -- text run at (438,0) width 54: "this part" -- RenderText {#text} at (491,0) size 37x18 -- text run at (491,0) width 37: ", and " -- RenderInline {STRONG} at (0,0) size 59x18 -- RenderText {#text} at (527,0) size 59x18 -- text run at (527,0) width 59: "this part" -- RenderText {#text} at (585,0) size 5x18 -- text run at (585,0) width 5: "." -- RenderBlock {P} at (4,196) size 596x19 [color=#000080] -- RenderText {#text} at (0,0) size 444x18 -- text run at (0,0) width 444: "This sentence should also be underlined, as well as dark blue (navy), " -- RenderInline {TT} at (0,0) size 149x15 -- RenderText {#text} at (443,2) size 149x15 -- text run at (443,2) width 149: "including this part" -- RenderText {#text} at (591,0) size 5x18 -- text run at (591,0) width 5: "." -- RenderBlock {P} at (4,230) size 596x19 [color=#800080] -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "This sentence should be purple, including " -- RenderInline {STRONG} at (0,0) size 59x18 -- RenderText {#text} at (270,0) size 59x18 -- text run at (270,0) width 59: "this part" -- RenderText {#text} at (328,0) size 32x18 -- text run at (328,0) width 32: " and " -- RenderInline {SPAN} at (0,0) size 178x18 -- RenderText {#text} at (359,0) size 178x18 -- text run at (359,0) width 178: "this part (which is spanned)" -- RenderText {#text} at (536,0) size 5x18 -- text run at (536,0) width 5: "." -diff --git a/LayoutTests/platform/mac-mojave/css2.1/t0602-c13-inh-underlin-00-e-expected.txt b/LayoutTests/platform/mac-mojave/css2.1/t0602-c13-inh-underlin-00-e-expected.txt -deleted file mode 100644 -index 2c3cb1e84e2a757b1c30595228d5b20cb43d3133..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/css2.1/t0602-c13-inh-underlin-00-e-expected.txt -+++ /dev/null -@@ -1,54 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x152 -- RenderBlock {HTML} at (0,0) size 800x152 -- RenderBody {BODY} at (8,16) size 784x120 [color=#000080] -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 230x18 -- text run at (0,0) width 230: "This should be blue and underlined." -- RenderBlock {P} at (0,34) size 784x18 -- RenderText {#text} at (0,0) size 299x18 -- text run at (0,0) width 299: "This sentence should be underlined, including " -- RenderInline {CODE} at (0,0) size 71x15 -- RenderText {#text} at (298,2) size 71x15 -- text run at (298,2) width 71: "this part" -- RenderText {#text} at (368,0) size 9x18 -- text run at (368,0) width 9: ", " -- RenderInline {CITE} at (0,0) size 55x18 -- RenderText {#text} at (376,0) size 55x18 -- text run at (376,0) width 55: "this part" -- RenderText {#text} at (430,0) size 9x18 -- text run at (430,0) width 9: ", " -- RenderInline {EM} at (0,0) size 54x18 -- RenderText {#text} at (438,0) size 54x18 -- text run at (438,0) width 54: "this part" -- RenderText {#text} at (491,0) size 37x18 -- text run at (491,0) width 9: ", " -- text run at (499,0) width 29: "and " -- RenderInline {STRONG} at (0,0) size 59x18 -- RenderText {#text} at (527,0) size 59x18 -- text run at (527,0) width 59: "this part" -- RenderText {#text} at (585,0) size 5x18 -- text run at (585,0) width 5: "." -- RenderBlock {P} at (0,68) size 784x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 283: "This sentence should also be underlined, as " -- text run at (282,0) width 97: "well as italics, " -- RenderInline {STRONG} at (0,0) size 138x18 -- RenderText {#text} at (378,0) size 138x18 -- text run at (378,0) width 138: "including this part" -- RenderText {#text} at (515,0) size 5x18 -- text run at (515,0) width 5: "." -- RenderBlock {P} at (0,102) size 784x18 -- RenderText {#text} at (0,0) size 343x18 -- text run at (0,0) width 343: "This sentence should be blue but not underlined, like " -- RenderInline {STRONG} at (0,0) size 59x18 -- RenderText {#text} at (342,0) size 59x18 -- text run at (342,0) width 59: "this part" -- RenderText {#text} at (400,0) size 33x18 -- text run at (400,0) width 33: ", but " -- RenderInline {EM} at (0,0) size 194x18 -- RenderText {#text} at (432,0) size 194x18 -- text run at (432,0) width 194: "this part should be underlined" -- RenderText {#text} at (625,0) size 5x18 -- text run at (625,0) width 5: "." -diff --git a/LayoutTests/platform/mac-mojave/css2.1/t0805-c5522-brdr-02-e-expected.txt b/LayoutTests/platform/mac-mojave/css2.1/t0805-c5522-brdr-02-e-expected.txt -deleted file mode 100644 -index f83d6166f78204407e18829ad73a6bb53cf7cbd9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/css2.1/t0805-c5522-brdr-02-e-expected.txt -+++ /dev/null -@@ -1,30 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x80 -- RenderBlock {HTML} at (0,0) size 800x80 -- RenderBody {BODY} at (8,8) size 784x64 [color=#0000FF] -- RenderTable {TABLE} at (0,0) size 721x64 -- RenderTableSection {TBODY} at (0,0) size 721x64 -- RenderTableRow {TR} at (0,2) size 721x24 -- RenderTableCell {TD} at (2,2) size 717x24 [border: (2px solid #0000FF)] [r=0 c=0 rs=1 cs=2] -- RenderText {#text} at (3,3) size 331x18 -- text run at (3,3) width 331: "There should be a blue border around this sentence." -- RenderTableRow {TR} at (0,28) size 721x34 -- RenderTableCell {TD} at (2,33) size 337x24 [border: (2px solid #0000FF)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (3,3) size 331x18 -- text run at (3,3) width 331: "There should be a blue border around this sentence." -- RenderTableCell {TD} at (340,28) size 379x34 [border: (2px solid #0000FF)] [r=1 c=1 rs=1 cs=1] -- RenderTable {TABLE} at (3,3) size 373x28 -- RenderTableSection {TBODY} at (0,0) size 373x28 -- RenderTableRow {TR} at (0,2) size 373x24 -- RenderTableCell {TD} at (2,2) size 369x24 [border: (2px solid #0000FF)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (3,3) size 108x18 -- text run at (3,3) width 108: "There should be " -- RenderInline {STRONG} at (0,0) size 117x18 -- RenderInline {EM} at (0,0) size 27x18 -- RenderText {#text} at (110,3) size 27x18 -- text run at (110,3) width 27: "two" -- RenderText {#text} at (136,3) size 91x18 -- text run at (136,3) width 91: " blue borders" -- RenderText {#text} at (226,3) size 140x18 -- text run at (226,3) width 140: " around this sentence." -diff --git a/LayoutTests/platform/mac-mojave/css2.1/t1202-counter-09-b-expected.txt b/LayoutTests/platform/mac-mojave/css2.1/t1202-counter-09-b-expected.txt -deleted file mode 100644 -index ca2b1ed7d24645060310a3c9124cc27c1f364512..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/css2.1/t1202-counter-09-b-expected.txt -+++ /dev/null -@@ -1,290 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x94 -- RenderBlock {HTML} at (0,0) size 800x94 -- RenderBody {BODY} at (8,16) size 784x70 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "The following two lines should look the same:" -- RenderBlock {DIV} at (0,34) size 784x18 -- RenderInline {SPAN} at (0,0) size 8x18 -- RenderInline (generated) at (0,0) size 8x18 -- RenderCounter at (0,0) size 8x18 -- text run at (0,0) width 8: "\x{10D0}" -- RenderText {#text} at (7,0) size 5x18 -- text run at (7,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (11,0) size 10x18 -- text run at (11,0) width 10: "\x{10D1}" -- RenderText {#text} at (20,0) size 5x18 -- text run at (20,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (24,0) size 10x18 -- text run at (24,0) width 10: "\x{10D2}" -- RenderText {#text} at (33,0) size 5x18 -- text run at (33,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 17x18 -- RenderInline (generated) at (0,0) size 17x18 -- RenderCounter at (37,0) size 17x18 -- text run at (37,0) width 17: "\x{10D3}" -- RenderText {#text} at (53,0) size 5x18 -- text run at (53,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (57,0) size 9x18 -- text run at (57,0) width 9: "\x{10D4}" -- RenderText {#text} at (65,0) size 5x18 -- text run at (65,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (69,0) size 10x18 -- text run at (69,0) width 10: "\x{10D5}" -- RenderText {#text} at (78,0) size 5x18 -- text run at (78,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 12x18 -- RenderInline (generated) at (0,0) size 12x18 -- RenderCounter at (82,0) size 12x18 -- text run at (82,0) width 12: "\x{10D6}" -- RenderText {#text} at (93,0) size 5x18 -- text run at (93,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 12x18 -- RenderInline (generated) at (0,0) size 12x18 -- RenderCounter at (97,0) size 12x18 -- text run at (97,0) width 12: "\x{10F1}" -- RenderText {#text} at (108,0) size 5x18 -- text run at (108,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 16x18 -- RenderInline (generated) at (0,0) size 16x18 -- RenderCounter at (112,0) size 16x18 -- text run at (112,0) width 16: "\x{10D7}" -- RenderText {#text} at (127,0) size 5x18 -- text run at (127,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 11x18 -- RenderInline (generated) at (0,0) size 11x18 -- RenderCounter at (131,0) size 11x18 -- text run at (131,0) width 11: "\x{10D8}" -- RenderText {#text} at (141,0) size 5x18 -- text run at (141,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 18x18 -- RenderInline (generated) at (0,0) size 18x18 -- RenderCounter at (145,0) size 18x18 -- text run at (145,0) width 18: "\x{10D8}\x{10D0}" -- RenderText {#text} at (162,0) size 5x18 -- text run at (162,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 19x18 -- RenderInline (generated) at (0,0) size 19x18 -- RenderCounter at (166,0) size 19x18 -- text run at (166,0) width 19: "\x{10D8}\x{10D1}" -- RenderText {#text} at (184,0) size 5x18 -- text run at (184,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (188,0) size 9x18 -- text run at (188,0) width 9: "\x{10D9}" -- RenderText {#text} at (196,0) size 5x18 -- text run at (196,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (200,0) size 20x18 -- text run at (200,0) width 20: "\x{10DA}" -- RenderText {#text} at (219,0) size 5x18 -- text run at (219,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (223,0) size 9x18 -- text run at (223,0) width 9: "\x{10DB}" -- RenderText {#text} at (231,0) size 5x18 -- text run at (231,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (235,0) size 9x18 -- text run at (235,0) width 9: "\x{10DC}" -- RenderText {#text} at (243,0) size 5x18 -- text run at (243,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (247,0) size 10x18 -- text run at (247,0) width 10: "\x{10F2}" -- RenderText {#text} at (256,0) size 5x18 -- text run at (256,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 15x18 -- RenderInline (generated) at (0,0) size 15x18 -- RenderCounter at (260,0) size 15x18 -- text run at (260,0) width 15: "\x{10DD}" -- RenderText {#text} at (274,0) size 5x18 -- text run at (274,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (278,0) size 9x18 -- text run at (278,0) width 9: "\x{10DE}" -- RenderText {#text} at (286,0) size 5x18 -- text run at (286,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (290,0) size 10x18 -- text run at (290,0) width 10: "\x{10DF}" -- RenderText {#text} at (299,0) size 5x18 -- text run at (299,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 14x18 -- RenderInline (generated) at (0,0) size 14x18 -- RenderCounter at (303,0) size 14x18 -- text run at (303,0) width 14: "\x{10E0}" -- RenderText {#text} at (316,0) size 5x18 -- text run at (316,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (320,0) size 9x18 -- text run at (320,0) width 9: "\x{10E1}" -- RenderText {#text} at (328,0) size 5x18 -- text run at (328,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 14x18 -- RenderInline (generated) at (0,0) size 14x18 -- RenderCounter at (332,0) size 14x18 -- text run at (332,0) width 14: "\x{10E2}" -- RenderText {#text} at (345,0) size 5x18 -- text run at (345,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (349,0) size 9x18 -- text run at (349,0) width 9: "\x{10F3}" -- RenderText {#text} at (357,0) size 5x18 -- text run at (357,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 14x18 -- RenderInline (generated) at (0,0) size 14x18 -- RenderCounter at (361,0) size 14x18 -- text run at (361,0) width 14: "\x{10E4}" -- RenderText {#text} at (374,0) size 5x18 -- text run at (374,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (378,0) size 9x18 -- text run at (378,0) width 9: "\x{10E5}" -- RenderText {#text} at (386,0) size 5x18 -- text run at (386,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 14x18 -- RenderInline (generated) at (0,0) size 14x18 -- RenderCounter at (390,0) size 14x18 -- text run at (390,0) width 14: "\x{10E6}" -- RenderText {#text} at (403,0) size 5x18 -- text run at (403,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 8x18 -- RenderInline (generated) at (0,0) size 8x18 -- RenderCounter at (407,0) size 8x18 -- text run at (407,0) width 8: "\x{10E7}" -- RenderText {#text} at (414,0) size 5x18 -- text run at (414,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (418,0) size 10x18 -- text run at (418,0) width 10: "\x{10E8}" -- RenderText {#text} at (427,0) size 5x18 -- text run at (427,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 8x18 -- RenderInline (generated) at (0,0) size 8x18 -- RenderCounter at (431,0) size 8x18 -- text run at (431,0) width 8: "\x{10E9}" -- RenderText {#text} at (438,0) size 5x18 -- text run at (438,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (442,0) size 10x18 -- text run at (442,0) width 10: "\x{10EA}" -- RenderText {#text} at (451,0) size 5x18 -- text run at (451,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (455,0) size 10x18 -- text run at (455,0) width 10: "\x{10EB}" -- RenderText {#text} at (464,0) size 5x18 -- text run at (464,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (468,0) size 9x18 -- text run at (468,0) width 9: "\x{10EC}" -- RenderText {#text} at (476,0) size 5x18 -- text run at (476,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (480,0) size 10x18 -- text run at (480,0) width 10: "\x{10ED}" -- RenderText {#text} at (489,0) size 5x18 -- text run at (489,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (493,0) size 9x18 -- text run at (493,0) width 9: "\x{10EE}" -- RenderText {#text} at (501,0) size 5x18 -- text run at (501,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (505,0) size 9x18 -- text run at (505,0) width 9: "\x{10F4}" -- RenderText {#text} at (513,0) size 5x18 -- text run at (513,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 13x18 -- RenderInline (generated) at (0,0) size 13x18 -- RenderCounter at (517,0) size 13x18 -- text run at (517,0) width 13: "\x{10EF}" -- RenderText {#text} at (529,0) size 5x18 -- text run at (529,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 9x18 -- RenderInline (generated) at (0,0) size 9x18 -- RenderCounter at (533,0) size 9x18 -- text run at (533,0) width 9: "\x{10F0}" -- RenderText {#text} at (541,0) size 5x18 -- text run at (541,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 10x18 -- RenderInline (generated) at (0,0) size 10x18 -- RenderCounter at (545,0) size 10x18 -- text run at (545,0) width 10: "\x{10F5}" -- RenderText {#text} at (554,0) size 5x18 -- text run at (554,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 49x18 -- RenderInline (generated) at (0,0) size 49x18 -- RenderCounter at (558,0) size 49x18 -- text run at (558,0) width 49: "\x{10F5}\x{10F0}\x{10E8}\x{10DF}\x{10D7}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,52) size 784x18 -- RenderText {#text} at (0,0) size 607x18 -- text run at (0,0) width 12: "\x{10D0} " -- text run at (11,0) width 14: "\x{10D1} " -- text run at (24,0) width 14: "\x{10D2} " -- text run at (37,0) width 21: "\x{10D3} " -- text run at (57,0) width 13: "\x{10D4} " -- text run at (69,0) width 14: "\x{10D5} " -- text run at (82,0) width 16: "\x{10D6} " -- text run at (97,0) width 16: "\x{10F1} " -- text run at (112,0) width 20: "\x{10D7} " -- text run at (131,0) width 15: "\x{10D8} " -- text run at (145,0) width 22: "\x{10D8}\x{10D0} " -- text run at (166,0) width 23: "\x{10D8}\x{10D1} " -- text run at (188,0) width 13: "\x{10D9} " -- text run at (200,0) width 24: "\x{10DA} " -- text run at (223,0) width 13: "\x{10DB} " -- text run at (235,0) width 13: "\x{10DC} " -- text run at (247,0) width 14: "\x{10F2} " -- text run at (260,0) width 19: "\x{10DD} " -- text run at (278,0) width 13: "\x{10DE} " -- text run at (290,0) width 14: "\x{10DF} " -- text run at (303,0) width 18: "\x{10E0} " -- text run at (320,0) width 13: "\x{10E1} " -- text run at (332,0) width 18: "\x{10E2} " -- text run at (349,0) width 13: "\x{10F3} " -- text run at (361,0) width 18: "\x{10E4} " -- text run at (378,0) width 13: "\x{10E5} " -- text run at (390,0) width 18: "\x{10E6} " -- text run at (407,0) width 12: "\x{10E7} " -- text run at (418,0) width 14: "\x{10E8} " -- text run at (431,0) width 12: "\x{10E9} " -- text run at (442,0) width 14: "\x{10EA} " -- text run at (455,0) width 14: "\x{10EB} " -- text run at (468,0) width 13: "\x{10EC} " -- text run at (480,0) width 14: "\x{10ED} " -- text run at (493,0) width 13: "\x{10EE} " -- text run at (505,0) width 13: "\x{10F4} " -- text run at (517,0) width 17: "\x{10EF} " -- text run at (533,0) width 13: "\x{10F0} " -- text run at (545,0) width 14: "\x{10F5} " -- text run at (558,0) width 49: "\x{10F5}\x{10F0}\x{10E8}\x{10DF}\x{10D7}" -diff --git a/LayoutTests/platform/mac-mojave/css2.1/t1202-counters-09-b-expected.txt b/LayoutTests/platform/mac-mojave/css2.1/t1202-counters-09-b-expected.txt -deleted file mode 100644 -index 3804249b10cd3d22702b3ac77cf432d0427668f5..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/css2.1/t1202-counters-09-b-expected.txt -+++ /dev/null -@@ -1,290 +0,0 @@ --layer at (0,0) size 1072x585 -- RenderView at (0,0) size 800x585 --layer at (0,0) size 800x94 -- RenderBlock {HTML} at (0,0) size 800x94 -- RenderBody {BODY} at (8,16) size 784x70 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "The following two lines should look the same:" -- RenderBlock {DIV} at (0,34) size 784x18 -- RenderInline {SPAN} at (0,0) size 19x18 -- RenderInline (generated) at (0,0) size 19x18 -- RenderCounter at (0,0) size 19x18 -- text run at (0,0) width 19: "\x{10D0}.\x{10D0}" -- RenderText {#text} at (18,0) size 5x18 -- text run at (18,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (22,0) size 22x18 -- text run at (22,0) width 22: "\x{10D0}.\x{10D1}" -- RenderText {#text} at (43,0) size 5x18 -- text run at (43,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (47,0) size 22x18 -- text run at (47,0) width 22: "\x{10D0}.\x{10D2}" -- RenderText {#text} at (68,0) size 5x18 -- text run at (68,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 27x18 -- RenderInline (generated) at (0,0) size 27x18 -- RenderCounter at (72,0) size 27x18 -- text run at (72,0) width 27: "\x{10D0}.\x{10D3}" -- RenderText {#text} at (98,0) size 5x18 -- text run at (98,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (102,0) size 21x18 -- text run at (102,0) width 21: "\x{10D0}.\x{10D4}" -- RenderText {#text} at (122,0) size 5x18 -- text run at (122,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (126,0) size 21x18 -- text run at (126,0) width 21: "\x{10D0}.\x{10D5}" -- RenderText {#text} at (146,0) size 5x18 -- text run at (146,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 24x18 -- RenderInline (generated) at (0,0) size 24x18 -- RenderCounter at (150,0) size 24x18 -- text run at (150,0) width 24: "\x{10D0}.\x{10D6}" -- RenderText {#text} at (173,0) size 5x18 -- text run at (173,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 23x18 -- RenderInline (generated) at (0,0) size 23x18 -- RenderCounter at (177,0) size 23x18 -- text run at (177,0) width 23: "\x{10D0}.\x{10F1}" -- RenderText {#text} at (199,0) size 5x18 -- text run at (199,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderInline (generated) at (0,0) size 28x18 -- RenderCounter at (203,0) size 28x18 -- text run at (203,0) width 28: "\x{10D0}.\x{10D7}" -- RenderText {#text} at (230,0) size 5x18 -- text run at (230,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (234,0) size 22x18 -- text run at (234,0) width 22: "\x{10D0}.\x{10D8}" -- RenderText {#text} at (255,0) size 5x18 -- text run at (255,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 29x18 -- RenderInline (generated) at (0,0) size 29x18 -- RenderCounter at (259,0) size 29x18 -- text run at (259,0) width 29: "\x{10D0}.\x{10D8}\x{10D0}" -- RenderText {#text} at (287,0) size 5x18 -- text run at (287,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 32x18 -- RenderInline (generated) at (0,0) size 32x18 -- RenderCounter at (291,0) size 32x18 -- text run at (291,0) width 32: "\x{10D0}.\x{10D8}\x{10D1}" -- RenderText {#text} at (322,0) size 5x18 -- text run at (322,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (326,0) size 20x18 -- text run at (326,0) width 20: "\x{10D0}.\x{10D9}" -- RenderText {#text} at (345,0) size 5x18 -- text run at (345,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 31x18 -- RenderInline (generated) at (0,0) size 31x18 -- RenderCounter at (349,0) size 31x18 -- text run at (349,0) width 31: "\x{10D0}.\x{10DA}" -- RenderText {#text} at (379,0) size 5x18 -- text run at (379,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (383,0) size 20x18 -- text run at (383,0) width 20: "\x{10D0}.\x{10DB}" -- RenderText {#text} at (402,0) size 5x18 -- text run at (402,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (406,0) size 21x18 -- text run at (406,0) width 21: "\x{10D0}.\x{10DC}" -- RenderText {#text} at (426,0) size 5x18 -- text run at (426,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (430,0) size 22x18 -- text run at (430,0) width 22: "\x{10D0}.\x{10F2}" -- RenderText {#text} at (451,0) size 5x18 -- text run at (451,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 26x18 -- RenderInline (generated) at (0,0) size 26x18 -- RenderCounter at (455,0) size 26x18 -- text run at (455,0) width 26: "\x{10D0}.\x{10DD}" -- RenderText {#text} at (480,0) size 5x18 -- text run at (480,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (484,0) size 20x18 -- text run at (484,0) width 20: "\x{10D0}.\x{10DE}" -- RenderText {#text} at (503,0) size 5x18 -- text run at (503,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (507,0) size 22x18 -- text run at (507,0) width 22: "\x{10D0}.\x{10DF}" -- RenderText {#text} at (528,0) size 5x18 -- text run at (528,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 25x18 -- RenderInline (generated) at (0,0) size 25x18 -- RenderCounter at (532,0) size 25x18 -- text run at (532,0) width 25: "\x{10D0}.\x{10E0}" -- RenderText {#text} at (556,0) size 5x18 -- text run at (556,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (560,0) size 21x18 -- text run at (560,0) width 21: "\x{10D0}.\x{10E1}" -- RenderText {#text} at (580,0) size 5x18 -- text run at (580,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 24x18 -- RenderInline (generated) at (0,0) size 24x18 -- RenderCounter at (584,0) size 24x18 -- text run at (584,0) width 24: "\x{10D0}.\x{10E2}" -- RenderText {#text} at (607,0) size 5x18 -- text run at (607,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (611,0) size 22x18 -- text run at (611,0) width 22: "\x{10D0}.\x{10F3}" -- RenderText {#text} at (632,0) size 5x18 -- text run at (632,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 24x18 -- RenderInline (generated) at (0,0) size 24x18 -- RenderCounter at (636,0) size 24x18 -- text run at (636,0) width 24: "\x{10D0}.\x{10E4}" -- RenderText {#text} at (659,0) size 5x18 -- text run at (659,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (663,0) size 21x18 -- text run at (663,0) width 21: "\x{10D0}.\x{10E5}" -- RenderText {#text} at (683,0) size 5x18 -- text run at (683,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 25x18 -- RenderInline (generated) at (0,0) size 25x18 -- RenderCounter at (687,0) size 25x18 -- text run at (687,0) width 25: "\x{10D0}.\x{10E6}" -- RenderText {#text} at (711,0) size 5x18 -- text run at (711,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (715,0) size 20x18 -- text run at (715,0) width 20: "\x{10D0}.\x{10E7}" -- RenderText {#text} at (734,0) size 5x18 -- text run at (734,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (738,0) size 21x18 -- text run at (738,0) width 21: "\x{10D0}.\x{10E8}" -- RenderText {#text} at (758,0) size 5x18 -- text run at (758,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (762,0) size 20x18 -- text run at (762,0) width 20: "\x{10D0}.\x{10E9}" -- RenderText {#text} at (781,0) size 5x18 -- text run at (781,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (785,0) size 22x18 -- text run at (785,0) width 22: "\x{10D0}.\x{10EA}" -- RenderText {#text} at (806,0) size 5x18 -- text run at (806,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (810,0) size 20x18 -- text run at (810,0) width 20: "\x{10D0}.\x{10EB}" -- RenderText {#text} at (829,0) size 5x18 -- text run at (829,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (833,0) size 21x18 -- text run at (833,0) width 21: "\x{10D0}.\x{10EC}" -- RenderText {#text} at (853,0) size 5x18 -- text run at (853,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 22x18 -- RenderInline (generated) at (0,0) size 22x18 -- RenderCounter at (857,0) size 22x18 -- text run at (857,0) width 22: "\x{10D0}.\x{10ED}" -- RenderText {#text} at (878,0) size 5x18 -- text run at (878,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (882,0) size 20x18 -- text run at (882,0) width 20: "\x{10D0}.\x{10EE}" -- RenderText {#text} at (901,0) size 5x18 -- text run at (901,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (905,0) size 20x18 -- text run at (905,0) width 20: "\x{10D0}.\x{10F4}" -- RenderText {#text} at (924,0) size 5x18 -- text run at (924,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 25x18 -- RenderInline (generated) at (0,0) size 25x18 -- RenderCounter at (928,0) size 25x18 -- text run at (928,0) width 25: "\x{10D0}.\x{10EF}" -- RenderText {#text} at (952,0) size 5x18 -- text run at (952,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderInline (generated) at (0,0) size 20x18 -- RenderCounter at (956,0) size 20x18 -- text run at (956,0) width 20: "\x{10D0}.\x{10F0}" -- RenderText {#text} at (975,0) size 5x18 -- text run at (975,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderInline (generated) at (0,0) size 21x18 -- RenderCounter at (979,0) size 21x18 -- text run at (979,0) width 21: "\x{10D0}.\x{10F5}" -- RenderText {#text} at (999,0) size 5x18 -- text run at (999,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 62x18 -- RenderInline (generated) at (0,0) size 62x18 -- RenderCounter at (1003,0) size 62x18 -- text run at (1003,0) width 62: "\x{10D0}.\x{10F5}\x{10F0}\x{10E8}\x{10DF}\x{10D7}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (0,52) size 784x18 -- RenderText {#text} at (0,0) size 1065x18 -- text run at (0,0) width 23: "\x{10D0}.\x{10D0} " -- text run at (22,0) width 26: "\x{10D0}.\x{10D1} " -- text run at (47,0) width 26: "\x{10D0}.\x{10D2} " -- text run at (72,0) width 31: "\x{10D0}.\x{10D3} " -- text run at (102,0) width 25: "\x{10D0}.\x{10D4} " -- text run at (126,0) width 25: "\x{10D0}.\x{10D5} " -- text run at (150,0) width 28: "\x{10D0}.\x{10D6} " -- text run at (177,0) width 27: "\x{10D0}.\x{10F1} " -- text run at (203,0) width 32: "\x{10D0}.\x{10D7} " -- text run at (234,0) width 26: "\x{10D0}.\x{10D8} " -- text run at (259,0) width 33: "\x{10D0}.\x{10D8}\x{10D0} " -- text run at (291,0) width 36: "\x{10D0}.\x{10D8}\x{10D1} " -- text run at (326,0) width 24: "\x{10D0}.\x{10D9} " -- text run at (349,0) width 35: "\x{10D0}.\x{10DA} " -- text run at (383,0) width 24: "\x{10D0}.\x{10DB} " -- text run at (406,0) width 25: "\x{10D0}.\x{10DC} " -- text run at (430,0) width 26: "\x{10D0}.\x{10F2} " -- text run at (455,0) width 30: "\x{10D0}.\x{10DD} " -- text run at (484,0) width 24: "\x{10D0}.\x{10DE} " -- text run at (507,0) width 26: "\x{10D0}.\x{10DF} " -- text run at (532,0) width 29: "\x{10D0}.\x{10E0} " -- text run at (560,0) width 25: "\x{10D0}.\x{10E1} " -- text run at (584,0) width 28: "\x{10D0}.\x{10E2} " -- text run at (611,0) width 26: "\x{10D0}.\x{10F3} " -- text run at (636,0) width 28: "\x{10D0}.\x{10E4} " -- text run at (663,0) width 25: "\x{10D0}.\x{10E5} " -- text run at (687,0) width 29: "\x{10D0}.\x{10E6} " -- text run at (715,0) width 24: "\x{10D0}.\x{10E7} " -- text run at (738,0) width 25: "\x{10D0}.\x{10E8} " -- text run at (762,0) width 24: "\x{10D0}.\x{10E9} " -- text run at (785,0) width 26: "\x{10D0}.\x{10EA} " -- text run at (810,0) width 24: "\x{10D0}.\x{10EB} " -- text run at (833,0) width 25: "\x{10D0}.\x{10EC} " -- text run at (857,0) width 26: "\x{10D0}.\x{10ED} " -- text run at (882,0) width 24: "\x{10D0}.\x{10EE} " -- text run at (905,0) width 24: "\x{10D0}.\x{10F4} " -- text run at (928,0) width 29: "\x{10D0}.\x{10EF} " -- text run at (956,0) width 24: "\x{10D0}.\x{10F0} " -- text run at (979,0) width 25: "\x{10D0}.\x{10F5} " -- text run at (1003,0) width 62: "\x{10D0}.\x{10F5}\x{10F0}\x{10E8}\x{10DF}\x{10D7}" -diff --git a/LayoutTests/platform/mac-mojave/editing/input/reveal-caret-of-multiline-input-expected.txt b/LayoutTests/platform/mac-mojave/editing/input/reveal-caret-of-multiline-input-expected.txt -deleted file mode 100644 -index 8371300933be24061b839fbf543bd99a77b21abb..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/editing/input/reveal-caret-of-multiline-input-expected.txt -+++ /dev/null -@@ -1,79 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x178 -- RenderBlock {HTML} at (0,0) size 800x178 -- RenderBody {BODY} at (8,8) size 784x162 -- RenderBlock {DIV} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 610x18 -- text run at (0,0) width 610: "When the caret is scrolled out, on starting typing it must be brought to the center of the control." -- RenderBlock (anonymous) at (0,18) size 784x144 -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 --layer at (10,28) size 91x136 clip at (11,29) size 74x134 scrollY 98 scrollHeight 420 -- RenderTextControl {TEXTAREA} at (2,2) size 91x136 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 70x416 -- RenderText {#text} at (0,0) size 20x403 -- text run at (0,0) width 14: "00" -- text run at (13,0) width 1: " " -- text run at (0,13) width 13: "01" -- text run at (12,13) width 1: " " -- text run at (0,26) width 14: "02" -- text run at (13,26) width 1: " " -- text run at (0,39) width 14: "03" -- text run at (13,39) width 1: " " -- text run at (0,52) width 15: "04" -- text run at (14,52) width 1: " " -- text run at (0,65) width 14: "05" -- text run at (13,65) width 1: " " -- text run at (0,78) width 15: "06" -- text run at (14,78) width 1: " " -- text run at (0,91) width 14: "07" -- text run at (13,91) width 1: " " -- text run at (0,104) width 15: "08" -- text run at (14,104) width 1: " " -- text run at (0,117) width 15: "09" -- text run at (14,117) width 1: " " -- text run at (0,130) width 13: "10" -- text run at (12,130) width 1: " " -- text run at (0,143) width 11: "11" -- text run at (10,143) width 1: " " -- text run at (0,156) width 20: ">12" -- text run at (19,156) width 1: " " -- text run at (0,169) width 13: "13" -- text run at (12,169) width 1: " " -- text run at (0,182) width 13: "14" -- text run at (12,182) width 1: " " -- text run at (0,195) width 13: "15" -- text run at (12,195) width 1: " " -- text run at (0,208) width 13: "16" -- text run at (12,208) width 1: " " -- text run at (0,221) width 12: "17" -- text run at (11,221) width 1: " " -- text run at (0,234) width 13: "18" -- text run at (12,234) width 1: " " -- text run at (0,247) width 13: "19" -- text run at (12,247) width 1: " " -- text run at (0,260) width 14: "20" -- text run at (13,260) width 1: " " -- text run at (0,273) width 12: "21" -- text run at (11,273) width 1: " " -- text run at (0,286) width 14: "22" -- text run at (13,286) width 1: " " -- text run at (0,299) width 14: "23" -- text run at (13,299) width 1: " " -- text run at (0,312) width 14: "24" -- text run at (13,312) width 1: " " -- text run at (0,325) width 14: "25" -- text run at (13,325) width 1: " " -- text run at (0,338) width 14: "26" -- text run at (13,338) width 1: " " -- text run at (0,351) width 14: "27" -- text run at (13,351) width 1: " " -- text run at (0,364) width 14: "28" -- text run at (13,364) width 1: " " -- text run at (0,377) width 14: "29" -- text run at (13,377) width 1: " " -- text run at (0,390) width 14: "30" -- text run at (13,390) width 1: " " -- RenderBR {BR} at (0,403) size 0x13 --caret: position 37 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 3 {TEXTAREA} of body -diff --git a/LayoutTests/platform/mac-mojave/editing/mac/selection/context-menu-select-editability-expected.txt b/LayoutTests/platform/mac-mojave/editing/mac/selection/context-menu-select-editability-expected.txt -deleted file mode 100644 -index ab1a5b58b88846211a308b966d90868c86acb21f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/editing/mac/selection/context-menu-select-editability-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --This test checks that conext menu selection allows whitespace for non-editable fields. To test manually, right click on the blank text in the input box. -- --The crowd says: New York, New York is a helluva town! --The crowd says: New York, New York is a helluva town! -- -- -- -- --PASS getSelectionForId('inputWhitespace') is "" --FAIL getSelectionForId('readOnlyWhitespace') should be . Was New York, New York. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/editing/selection/3690703-2-expected.txt b/LayoutTests/platform/mac-mojave/editing/selection/3690703-2-expected.txt -deleted file mode 100644 -index 283acc28ea0f3bd919e904086c0f8e3a7b2d1201..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/editing/selection/3690703-2-expected.txt -+++ /dev/null -@@ -1,152 +0,0 @@ --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > CENTER > BODY > HTML > #document to 6 of DIV > CENTER > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,3) size 784x581 [bgcolor=#FFFFFF] -- RenderBlock {CENTER} at (0,0) size 784x258 -- RenderTable {TABLE} at (0,0) size 784x19 -- RenderTableSection {TBODY} at (0,0) size 784x19 -- RenderTableRow {TR} at (0,0) size 784x15 -- RenderTableCell {TD} at (0,0) size 784x15 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 102x15 -- RenderInline {A} at (0,0) size 102x15 [color=#0000CC] -- RenderText {#text} at (682,0) size 102x15 -- text run at (682,0) width 102: "Personalized Home" -- RenderTableRow {TR} at (0,15) size 784x4 -- RenderTableCell {TD} at (0,16) size 784x2 [r=1 c=0 rs=1 cs=1] -- RenderImage {IMG} at (0,0) size 1x1 -- RenderBlock (anonymous) at (0,19) size 784x36 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBlock {DIV} at (0,55) size 784x105 [border: (2px solid #AAAAFF)] -- RenderTable {TABLE} at (214,2) size 355x23 -- RenderTableSection {TBODY} at (0,0) size 355x23 -- RenderTableRow {TR} at (0,0) size 355x23 -- RenderTableCell {TD} at (0,0) size 355x23 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 347x15 -- RenderInline {B} at (0,0) size 26x15 -- RenderText {#text} at (4,4) size 26x15 -- text run at (4,4) width 26: "Web" -- RenderText {#text} at (29,4) size 14x15 -- text run at (29,4) width 14: " " -- RenderInline {A} at (0,0) size 38x15 [color=#0000CC] -- RenderText {#text} at (42,4) size 38x15 -- text run at (42,4) width 38: "Images" -- RenderText {#text} at (79,4) size 14x15 -- text run at (79,4) width 14: " " -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (92,4) size 40x15 -- text run at (92,4) width 40: "Groups" -- RenderText {#text} at (131,4) size 14x15 -- text run at (131,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (144,4) size 30x15 -- text run at (144,4) width 30: "News" -- RenderText {#text} at (173,4) size 14x15 -- text run at (173,4) width 14: " " -- RenderInline {A} at (0,0) size 42x15 [color=#0000CC] -- RenderText {#text} at (186,4) size 42x15 -- text run at (186,4) width 42: "Froogle" -- RenderText {#text} at (227,4) size 14x15 -- text run at (227,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (240,4) size 30x15 -- text run at (240,4) width 30: "Local" -- RenderInline {SUP} at (0,0) size 1x13 -- RenderInline {A} at (0,0) size 30x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (269,4) size 30x15 -- text run at (269,4) width 30: "New!" -- RenderText {#text} at (298,4) size 14x15 -- text run at (298,4) width 14: " " -- RenderInline {B} at (0,0) size 40x15 -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (311,4) size 40x15 -- text run at (311,4) width 40: "more \x{BB}" -- RenderTable {TABLE} at (2,25) size 780x45 -- RenderTableSection {TBODY} at (0,0) size 780x45 -- RenderTableRow {TR} at (0,0) size 780x45 -- RenderTableCell {TD} at (0,13) size 192x19 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 4x19 -- text run at (0,1) width 4: " " -- RenderTableCell {TD} at (191,0) size 397x45 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (2,2) size 392x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (395,2) size 1x18 -- RenderButton {INPUT} at (95,25) size 94x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 77x13 -- RenderText at (0,0) size 77x13 -- text run at (0,0) width 77: "Google Search" -- RenderButton {INPUT} at (192,25) size 108x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 91x13 -- RenderText at (0,0) size 91x13 -- text run at (0,0) width 91: "I'm Feeling Lucky" -- RenderTableCell {TD} at (587,0) size 194x39 [r=0 c=2 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 76x39 -- RenderText {#text} at (0,0) size 5x13 -- text run at (0,0) width 5: " " -- RenderInline {A} at (0,0) size 71x13 [color=#0000CC] -- RenderText {#text} at (5,0) size 71x13 -- text run at (5,0) width 71: "Advanced Search" -- RenderBR {BR} at (75,0) size 1x13 -- RenderText {#text} at (0,13) size 5x13 -- text run at (0,13) width 5: " " -- RenderInline {A} at (0,0) size 47x13 [color=#0000CC] -- RenderText {#text} at (5,13) size 47x13 -- text run at (5,13) width 47: "Preferences" -- RenderBR {BR} at (51,13) size 1x13 -- RenderText {#text} at (0,26) size 5x13 -- text run at (0,26) width 5: " " -- RenderInline {A} at (0,0) size 65x13 [color=#0000CC] -- RenderText {#text} at (5,26) size 65x13 -- text run at (5,26) width 65: "Language Tools" -- RenderBlock (anonymous) at (2,70) size 780x33 -- RenderBR {BR} at (390,0) size 0x18 -- RenderInline {FONT} at (0,0) size 146x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (317,18) size 30x15 -- text run at (317,18) width 30: "New!" -- RenderText {#text} at (346,18) size 4x15 -- text run at (346,18) width 4: " " -- RenderInline {A} at (0,0) size 111x15 [color=#0000CC] -- RenderText {#text} at (349,18) size 111x15 -- text run at (349,18) width 111: "Personalize this page" -- RenderText {#text} at (459,18) size 4x15 -- text run at (459,18) width 4: "." -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,160) size 784x69 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBR {BR} at (392,36) size 0x18 -- RenderInline {FONT} at (0,0) size 310x15 -- RenderInline {A} at (0,0) size 116x15 [color=#0000CC] -- RenderText {#text} at (237,54) size 116x15 -- text run at (237,54) width 116: "Advertising Programs" -- RenderText {#text} at (352,54) size 11x15 -- text run at (352,54) width 11: " - " -- RenderInline {A} at (0,0) size 100x15 [color=#0000CC] -- RenderText {#text} at (362,54) size 100x15 -- text run at (362,54) width 100: "Business Solutions" -- RenderText {#text} at (461,54) size 12x15 -- text run at (461,54) width 12: " - " -- RenderInline {A} at (0,0) size 75x15 [color=#0000CC] -- RenderText {#text} at (472,54) size 75x15 -- text run at (472,54) width 75: "About Google" -- RenderBlock {P} at (0,245) size 784x13 -- RenderInline {FONT} at (0,0) size 60x13 -- RenderText {#text} at (362,0) size 60x13 -- text run at (362,0) width 60: "\x{A9}2005 Google" --layer at (207,88) size 386x13 backgroundClip at (207,88) size 385x13 clip at (207,88) size 385x13 -- RenderBlock {DIV} at (3,3) size 386x13 --selection start: position 0 of child 3 {INPUT} of child 1 {TD} of child 0 {TR} of child 0 {TBODY} of child 2 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body --selection end: position 1 of child 2 {BR} of child 0 {FONT} of child 2 {TD} of child 0 {TR} of child 0 {TBODY} of child 2 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body -diff --git a/LayoutTests/platform/mac-mojave/editing/selection/3690703-expected.txt b/LayoutTests/platform/mac-mojave/editing/selection/3690703-expected.txt -deleted file mode 100644 -index cca65092cb1c64ccada839d2471963238c9aa4ea..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/editing/selection/3690703-expected.txt -+++ /dev/null -@@ -1,154 +0,0 @@ --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > CENTER > BODY > HTML > #document to 6 of DIV > CENTER > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,3) size 784x581 [bgcolor=#FFFFFF] -- RenderBlock {CENTER} at (0,0) size 784x258 -- RenderTable {TABLE} at (0,0) size 784x19 -- RenderTableSection {TBODY} at (0,0) size 784x19 -- RenderTableRow {TR} at (0,0) size 784x15 -- RenderTableCell {TD} at (0,0) size 784x15 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 102x15 -- RenderInline {A} at (0,0) size 102x15 [color=#0000CC] -- RenderText {#text} at (682,0) size 102x15 -- text run at (682,0) width 102: "Personalized Home" -- RenderTableRow {TR} at (0,15) size 784x4 -- RenderTableCell {TD} at (0,16) size 784x2 [r=1 c=0 rs=1 cs=1] -- RenderImage {IMG} at (0,0) size 1x1 -- RenderBlock (anonymous) at (0,19) size 784x36 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBlock {DIV} at (0,55) size 784x105 [border: (2px solid #AAAAFF)] -- RenderTable {TABLE} at (214,2) size 355x23 -- RenderTableSection {TBODY} at (0,0) size 355x23 -- RenderTableRow {TR} at (0,0) size 355x23 -- RenderTableCell {TD} at (0,0) size 355x23 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 347x15 -- RenderInline {B} at (0,0) size 26x15 -- RenderText {#text} at (4,4) size 26x15 -- text run at (4,4) width 26: "Web" -- RenderText {#text} at (29,4) size 14x15 -- text run at (29,4) width 14: " " -- RenderInline {A} at (0,0) size 38x15 [color=#0000CC] -- RenderText {#text} at (42,4) size 38x15 -- text run at (42,4) width 38: "Images" -- RenderText {#text} at (79,4) size 14x15 -- text run at (79,4) width 14: " " -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (92,4) size 40x15 -- text run at (92,4) width 40: "Groups" -- RenderText {#text} at (131,4) size 14x15 -- text run at (131,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (144,4) size 30x15 -- text run at (144,4) width 30: "News" -- RenderText {#text} at (173,4) size 14x15 -- text run at (173,4) width 14: " " -- RenderInline {A} at (0,0) size 42x15 [color=#0000CC] -- RenderText {#text} at (186,4) size 42x15 -- text run at (186,4) width 42: "Froogle" -- RenderText {#text} at (227,4) size 14x15 -- text run at (227,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (240,4) size 30x15 -- text run at (240,4) width 30: "Local" -- RenderInline {SUP} at (0,0) size 1x13 -- RenderInline {A} at (0,0) size 30x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (269,4) size 30x15 -- text run at (269,4) width 30: "New!" -- RenderText {#text} at (298,4) size 14x15 -- text run at (298,4) width 14: " " -- RenderInline {B} at (0,0) size 40x15 -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (311,4) size 40x15 -- text run at (311,4) width 40: "more \x{BB}" -- RenderTable {TABLE} at (2,25) size 780x45 -- RenderTableSection {TBODY} at (0,0) size 780x45 -- RenderTableRow {TR} at (0,0) size 780x45 -- RenderTableCell {TD} at (0,13) size 192x19 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 4x19 -- text run at (0,1) width 4: " " -- RenderTableCell {TD} at (191,0) size 397x45 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (2,2) size 392x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (395,2) size 1x18 -- RenderButton {INPUT} at (95,25) size 94x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 77x13 -- RenderText at (0,0) size 77x13 -- text run at (0,0) width 77: "Google Search" -- RenderButton {INPUT} at (192,25) size 108x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 91x13 -- RenderText at (0,0) size 91x13 -- text run at (0,0) width 91: "I'm Feeling Lucky" -- RenderTableCell {TD} at (587,0) size 194x39 [r=0 c=2 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 76x39 -- RenderText {#text} at (0,0) size 5x13 -- text run at (0,0) width 5: " " -- RenderInline {A} at (0,0) size 71x13 [color=#0000CC] -- RenderText {#text} at (5,0) size 71x13 -- text run at (5,0) width 71: "Advanced Search" -- RenderBR {BR} at (75,0) size 1x13 -- RenderText {#text} at (0,13) size 5x13 -- text run at (0,13) width 5: " " -- RenderInline {A} at (0,0) size 47x13 [color=#0000CC] -- RenderText {#text} at (5,13) size 47x13 -- text run at (5,13) width 47: "Preferences" -- RenderBR {BR} at (51,13) size 1x13 -- RenderText {#text} at (0,26) size 5x13 -- text run at (0,26) width 5: " " -- RenderInline {A} at (0,0) size 65x13 [color=#0000CC] -- RenderText {#text} at (5,26) size 65x13 -- text run at (5,26) width 65: "Language Tools" -- RenderBlock (anonymous) at (2,70) size 780x33 -- RenderBR {BR} at (390,0) size 0x18 -- RenderInline {FONT} at (0,0) size 146x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (317,18) size 30x15 -- text run at (317,18) width 30: "New!" -- RenderText {#text} at (346,18) size 4x15 -- text run at (346,18) width 4: " " -- RenderInline {A} at (0,0) size 111x15 [color=#0000CC] -- RenderText {#text} at (349,18) size 111x15 -- text run at (349,18) width 111: "Personalize this page" -- RenderText {#text} at (459,18) size 4x15 -- text run at (459,18) width 4: "." -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,160) size 784x69 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBR {BR} at (392,36) size 0x18 -- RenderInline {FONT} at (0,0) size 310x15 -- RenderInline {A} at (0,0) size 116x15 [color=#0000CC] -- RenderText {#text} at (237,54) size 116x15 -- text run at (237,54) width 116: "Advertising Programs" -- RenderText {#text} at (352,54) size 11x15 -- text run at (352,54) width 11: " - " -- RenderInline {A} at (0,0) size 100x15 [color=#0000CC] -- RenderText {#text} at (362,54) size 100x15 -- text run at (362,54) width 100: "Business Solutions" -- RenderText {#text} at (461,54) size 12x15 -- text run at (461,54) width 12: " - " -- RenderInline {A} at (0,0) size 75x15 [color=#0000CC] -- RenderText {#text} at (472,54) size 75x15 -- text run at (472,54) width 75: "About Google" -- RenderBlock {P} at (0,245) size 784x13 -- RenderInline {FONT} at (0,0) size 60x13 -- RenderText {#text} at (362,0) size 60x13 -- text run at (362,0) width 60: "\x{A9}2005 Google" --layer at (207,88) size 386x13 backgroundClip at (207,88) size 385x13 clip at (207,88) size 385x13 -- RenderBlock {DIV} at (3,3) size 386x13 --selection start: position 0 of child 1 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body --selection end: position 1 of child 3 {#text} of child 4 {FONT} of child 4 {DIV} of child 0 {CENTER} of body -diff --git a/LayoutTests/platform/mac-mojave/editing/selection/3690719-expected.txt b/LayoutTests/platform/mac-mojave/editing/selection/3690719-expected.txt -deleted file mode 100644 -index b70a3cfa8ca7336e299c46af73a9a031905729c6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/editing/selection/3690719-expected.txt -+++ /dev/null -@@ -1,146 +0,0 @@ --EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > CENTER > BODY > HTML > #document to 6 of DIV > CENTER > BODY > HTML > #document --EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of DIV > CENTER > BODY > HTML > #document to 1 of DIV > CENTER > BODY > HTML > #document toDOMRange:range from 1 of DIV > CENTER > BODY > HTML > #document to 1 of #text > FONT > DIV > CENTER > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE --EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,3) size 784x581 [bgcolor=#FFFFFF] -- RenderBlock {CENTER} at (0,0) size 784x258 -- RenderTable {TABLE} at (0,0) size 784x19 -- RenderTableSection {TBODY} at (0,0) size 784x19 -- RenderTableRow {TR} at (0,0) size 784x15 -- RenderTableCell {TD} at (0,0) size 784x15 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 102x15 -- RenderInline {A} at (0,0) size 102x15 [color=#0000CC] -- RenderText {#text} at (682,0) size 102x15 -- text run at (682,0) width 102: "Personalized Home" -- RenderTableRow {TR} at (0,15) size 784x4 -- RenderTableCell {TD} at (0,16) size 784x2 [r=1 c=0 rs=1 cs=1] -- RenderImage {IMG} at (0,0) size 1x1 -- RenderBlock (anonymous) at (0,19) size 784x36 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBlock {DIV} at (0,55) size 784x105 [border: (2px solid #AAAAFF)] -- RenderTable {TABLE} at (214,2) size 355x23 -- RenderTableSection {TBODY} at (0,0) size 355x23 -- RenderTableRow {TR} at (0,0) size 355x23 -- RenderTableCell {TD} at (0,0) size 355x23 [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 347x15 -- RenderInline {B} at (0,0) size 26x15 -- RenderText {#text} at (4,4) size 26x15 -- text run at (4,4) width 26: "Web" -- RenderText {#text} at (29,4) size 14x15 -- text run at (29,4) width 14: " " -- RenderInline {A} at (0,0) size 38x15 [color=#0000CC] -- RenderText {#text} at (42,4) size 38x15 -- text run at (42,4) width 38: "Images" -- RenderText {#text} at (79,4) size 14x15 -- text run at (79,4) width 14: " " -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (92,4) size 40x15 -- text run at (92,4) width 40: "Groups" -- RenderText {#text} at (131,4) size 14x15 -- text run at (131,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (144,4) size 30x15 -- text run at (144,4) width 30: "News" -- RenderText {#text} at (173,4) size 14x15 -- text run at (173,4) width 14: " " -- RenderInline {A} at (0,0) size 42x15 [color=#0000CC] -- RenderText {#text} at (186,4) size 42x15 -- text run at (186,4) width 42: "Froogle" -- RenderText {#text} at (227,4) size 14x15 -- text run at (227,4) width 14: " " -- RenderInline {A} at (0,0) size 30x15 [color=#0000CC] -- RenderText {#text} at (240,4) size 30x15 -- text run at (240,4) width 30: "Local" -- RenderInline {SUP} at (0,0) size 1x13 -- RenderInline {A} at (0,0) size 30x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (269,4) size 30x15 -- text run at (269,4) width 30: "New!" -- RenderText {#text} at (298,4) size 14x15 -- text run at (298,4) width 14: " " -- RenderInline {B} at (0,0) size 40x15 -- RenderInline {A} at (0,0) size 40x15 [color=#0000CC] -- RenderText {#text} at (311,4) size 40x15 -- text run at (311,4) width 40: "more \x{BB}" -- RenderTable {TABLE} at (2,25) size 780x45 -- RenderTableSection {TBODY} at (0,0) size 780x45 -- RenderTableRow {TR} at (0,0) size 780x45 -- RenderTableCell {TD} at (0,13) size 192x19 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 4x19 -- text run at (0,1) width 4: " " -- RenderTableCell {TD} at (191,0) size 397x45 [r=0 c=1 rs=1 cs=1] -- RenderTextControl {INPUT} at (2,2) size 392x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (395,2) size 1x18 -- RenderButton {INPUT} at (95,25) size 94x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 77x13 -- RenderText at (0,0) size 77x13 -- text run at (0,0) width 77: "Google Search" -- RenderButton {INPUT} at (192,25) size 108x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 91x13 -- RenderText at (0,0) size 91x13 -- text run at (0,0) width 91: "I'm Feeling Lucky" -- RenderTableCell {TD} at (587,0) size 194x39 [r=0 c=2 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 76x39 -- RenderText {#text} at (0,0) size 5x13 -- text run at (0,0) width 5: " " -- RenderInline {A} at (0,0) size 71x13 [color=#0000CC] -- RenderText {#text} at (5,0) size 71x13 -- text run at (5,0) width 71: "Advanced Search" -- RenderBR {BR} at (75,0) size 1x13 -- RenderText {#text} at (0,13) size 5x13 -- text run at (0,13) width 5: " " -- RenderInline {A} at (0,0) size 47x13 [color=#0000CC] -- RenderText {#text} at (5,13) size 47x13 -- text run at (5,13) width 47: "Preferences" -- RenderBR {BR} at (51,13) size 1x13 -- RenderText {#text} at (0,26) size 5x13 -- text run at (0,26) width 5: " " -- RenderInline {A} at (0,0) size 65x13 [color=#0000CC] -- RenderText {#text} at (5,26) size 65x13 -- text run at (5,26) width 65: "Language Tools" -- RenderBlock (anonymous) at (2,70) size 780x33 -- RenderBR {BR} at (390,0) size 0x18 -- RenderInline {FONT} at (0,0) size 146x15 -- RenderInline {FONT} at (0,0) size 30x15 [color=#FF0000] -- RenderText {#text} at (317,18) size 30x15 -- text run at (317,18) width 30: "New!" -- RenderText {#text} at (346,18) size 4x15 -- text run at (346,18) width 4: " " -- RenderInline {A} at (0,0) size 111x15 [color=#0000CC] -- RenderText {#text} at (349,18) size 111x15 -- text run at (349,18) width 111: "Personalize this page" -- RenderText {#text} at (459,18) size 4x15 -- text run at (459,18) width 4: "." -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,160) size 784x69 -- RenderBR {BR} at (392,0) size 0x18 -- RenderBR {BR} at (392,18) size 0x18 -- RenderBR {BR} at (392,36) size 0x18 -- RenderInline {FONT} at (0,0) size 310x15 -- RenderInline {A} at (0,0) size 116x15 [color=#0000CC] -- RenderText {#text} at (237,54) size 116x15 -- text run at (237,54) width 116: "Advertising Programs" -- RenderText {#text} at (352,54) size 11x15 -- text run at (352,54) width 11: " - " -- RenderInline {A} at (0,0) size 100x15 [color=#0000CC] -- RenderText {#text} at (362,54) size 100x15 -- text run at (362,54) width 100: "Business Solutions" -- RenderText {#text} at (461,54) size 12x15 -- text run at (461,54) width 12: " - " -- RenderInline {A} at (0,0) size 75x15 [color=#0000CC] -- RenderText {#text} at (472,54) size 75x15 -- text run at (472,54) width 75: "About Google" -- RenderBlock {P} at (0,245) size 784x13 -- RenderInline {FONT} at (0,0) size 60x13 -- RenderText {#text} at (362,0) size 60x13 -- text run at (362,0) width 60: "\x{A9}2005 Google" --layer at (207,88) size 386x13 backgroundClip at (207,88) size 385x13 clip at (207,88) size 385x13 -- RenderBlock {DIV} at (3,3) size 386x13 --selection start: position 0 of child 1 {TABLE} of child 4 {DIV} of child 0 {CENTER} of body --selection end: position 1 of child 3 {#text} of child 4 {FONT} of child 4 {DIV} of child 0 {CENTER} of body -diff --git a/LayoutTests/platform/mac-mojave/fast/block/basic/001-expected.txt b/LayoutTests/platform/mac-mojave/fast/block/basic/001-expected.txt -deleted file mode 100644 -index ba9529ae23fcbb2176c70d4b2272351b970ffa41..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/block/basic/001-expected.txt -+++ /dev/null -@@ -1,33 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {DIV} at (0,0) size 784x185 [border: (2px solid #FF0000)] -- RenderBlock (anonymous) at (2,2) size 780x18 -- RenderInline {I} at (0,0) size 235x18 -- RenderText {#text} at (0,0) size 96x18 -- text run at (0,0) width 96: "Start of a line. " -- RenderInline {FONT} at (0,0) size 140x18 [color=#FF0000] -- RenderText {#text} at (95,0) size 140x18 -- text run at (95,0) width 140: "More red on this line:" -- RenderBlock (anonymous) at (2,38) size 780x71 [color=#FF0000] -- RenderBlock {H3} at (0,0) size 780x22 -- RenderText {#text} at (0,0) size 228x22 -- text run at (0,0) width 228: "Suddenly a block appears!" -- RenderBlock {H2} at (0,41) size 780x29 -- RenderText {#text} at (0,0) size 204x28 -- text run at (0,0) width 204: "And another block!" -- RenderBlock (anonymous) at (2,128) size 780x55 -- RenderInline {I} at (0,0) size 299x36 -- RenderInline {FONT} at (0,0) size 97x36 [color=#FF0000] -- RenderText {#text} at (0,0) size 97x18 -- text run at (0,0) width 97: "Now more text." -- RenderBR {BR} at (96,0) size 1x18 -- RenderText {#text} at (0,18) size 67x18 -- text run at (0,18) width 67: "This is red" -- RenderText {#text} at (66,18) size 233x18 -- text run at (66,18) width 233: " but now only italic on the same line" -- RenderBR {BR} at (298,18) size 1x18 -- RenderText {#text} at (0,36) size 132x18 -- text run at (0,36) width 132: "Plain line at the end." -diff --git a/LayoutTests/platform/mac-mojave/fast/block/float/float-avoidance-expected.txt b/LayoutTests/platform/mac-mojave/fast/block/float/float-avoidance-expected.txt -deleted file mode 100644 -index e248c17ebc279d743eb12a8414367921d29e8f00..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/block/float/float-avoidance-expected.txt -+++ /dev/null -@@ -1,337 +0,0 @@ --layer at (0,0) size 785x2386 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x2386 -- RenderBlock {HTML} at (0,0) size 785x2386 -- RenderBody {BODY} at (8,8) size 769x2370 -- RenderBlock (anonymous) at (0,0) size 769x36 -- RenderText {#text} at (0,0) size 753x36 -- text run at (0,0) width 546: "Test of objects that avoid floats to see what they do with percentage and auto widths. " -- text run at (545,0) width 208: "This test is designed to illustrate" -- text run at (0,18) width 482: "that we have removed the WinIE quirk and are behaving more like Firefox." -- RenderBlock {HR} at (0,44) size 769x2 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (0,54) size 769x18 -- RenderText {#text} at (0,0) size 517x18 -- text run at (0,0) width 517: "The inline-level button should be below the select and fill the width of the block." -- RenderBlock {P} at (0,88) size 220x82 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (10,52) size 200x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 184x13 -- RenderText at (86,0) size 12x13 -- text run at (86,0) width 12: "Hi" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,186) size 769x18 -- RenderText {#text} at (0,0) size 481x18 -- text run at (0,0) width 481: "The floating button with a percentage width should be even with the select." -- RenderBlock {P} at (0,220) size 220x60 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (110,30) size 100x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 84x13 -- RenderText at (36,0) size 12x13 -- text run at (36,0) width 12: "Hi" -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (210,28) size 0x18 -- RenderBlock (anonymous) at (0,296) size 769x18 -- RenderText {#text} at (0,0) size 470x18 -- text run at (0,0) width 470: "The block-level button with an auto width should be even with the select." -- RenderBlock {P} at (0,330) size 220x78 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (110,30) size 27x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 11x13 -- RenderText at (0,0) size 11x13 -- text run at (0,0) width 11: "Hi" -- RenderBlock (anonymous) at (10,50) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,424) size 769x18 -- RenderText {#text} at (0,0) size 504x18 -- text run at (0,0) width 504: "The block-level button with a percentage width should be even with the select." -- RenderBlock {P} at (0,458) size 220x78 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (110,30) size 100x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 84x13 -- RenderText at (36,0) size 12x13 -- text run at (36,0) width 12: "Hi" -- RenderBlock (anonymous) at (10,50) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,552) size 769x18 -- RenderText {#text} at (0,0) size 471x18 -- text run at (0,0) width 471: "The floating table with a percentage width should be even with the select." -- RenderBlock {P} at (0,586) size 220x68 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (110,28) size 100x30 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 96x26 -- RenderTableRow {TR} at (0,2) size 96x22 -- RenderTableCell {TD} at (2,2) size 92x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 36x18 -- text run at (2,2) width 36: "Table" -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (210,28) size 0x18 -- RenderBlock (anonymous) at (0,670) size 769x36 -- RenderText {#text} at (0,0) size 768x36 -- text run at (0,0) width 768: "The floating table with an auto width should be even with the select and shrinks to use the available line width. THIS IS" -- text run at (0,18) width 157: "CURRENTLY BUGGY." -- RenderBlock {P} at (0,722) size 220x126 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (10,50) size 200x66 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 196x62 -- RenderTableRow {TR} at (0,2) size 196x58 -- RenderTableCell {TD} at (2,2) size 192x58 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 165x54 -- text run at (2,2) width 164: "Floating table that should" -- text run at (2,20) width 165: "shrink so it can be next to" -- text run at (2,38) width 92: "previous float." -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (110,28) size 0x18 -- RenderBlock (anonymous) at (0,864) size 769x18 -- RenderText {#text} at (0,0) size 746x18 -- text run at (0,0) width 589: "The block-level table below has a percentage width and should still be even with the select. " -- text run at (588,0) width 158: "It spills out of the block." -- RenderBlock {P} at (0,898) size 220x144 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (10,50) size 200x66 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 196x62 -- RenderTableRow {TR} at (0,2) size 196x58 -- RenderTableCell {TD} at (2,2) size 192x58 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 165x54 -- text run at (2,2) width 164: "Floating table that should" -- text run at (2,20) width 165: "shrink so it can be next to" -- text run at (2,38) width 92: "previous float." -- RenderBlock (anonymous) at (10,116) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1058) size 769x18 -- RenderText {#text} at (0,0) size 759x18 -- text run at (0,0) width 555: "The block-level table below has an auto width and should still be even with the select. " -- text run at (554,0) width 205: "It shrinks to fit inside the block." -- RenderBlock {P} at (0,1092) size 220x194 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderTable {TABLE} at (110,28) size 100x138 [border: (2px outset #808080)] -- RenderTableSection {TBODY} at (2,2) size 96x134 -- RenderTableRow {TR} at (0,2) size 96x130 -- RenderTableCell {TD} at (2,2) size 92x130 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 87x126 -- text run at (2,2) width 54: "Floating" -- text run at (2,20) width 60: "table that" -- text run at (2,38) width 87: "should shrink" -- text run at (2,56) width 73: "so it can be" -- text run at (2,74) width 44: "next to" -- text run at (2,92) width 56: "previous" -- text run at (2,110) width 33: "float." -- RenderBlock (anonymous) at (10,166) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1302) size 769x18 -- RenderText {#text} at (0,0) size 546x18 -- text run at (0,0) width 546: "The floating overflow section with a percentage width should be even with the select." -- RenderBlock {DIV} at (0,1320) size 220x146 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (210,28) size 0x18 -- RenderBlock (anonymous) at (0,1466) size 769x36 -- RenderText {#text} at (0,0) size 741x36 -- text run at (0,0) width 741: "The floating overflow section with an auto width should be even with the select and shrinks to use the available line" -- text run at (0,18) width 259: "width. THIS IS CURRENTLY BUGGY." -- RenderBlock {DIV} at (0,1502) size 220x114 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (110,28) size 0x18 -- RenderBlock (anonymous) at (0,1616) size 769x18 -- RenderText {#text} at (0,0) size 660x18 -- text run at (0,0) width 660: "The block-level overflow section below has a percentage width and should still be even with the select." -- RenderBlock {DIV} at (0,1634) size 220x164 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (10,136) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1798) size 769x36 -- RenderText {#text} at (0,0) size 767x36 -- text run at (0,0) width 631: "The block-level overflow section below has an auto width and should still be even with the select. " -- text run at (630,0) width 137: "It shrinks to fit inside" -- text run at (0,18) width 64: "the block." -- RenderBlock {DIV} at (0,1834) size 220x164 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (10,136) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,1998) size 769x18 -- RenderText {#text} at (0,0) size 453x18 -- text run at (0,0) width 453: "The floating hr with a percentage width should be even with the select." -- RenderBlock {DIV} at (0,2016) size 220x60 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (floating) {HR} at (112,30) size 82x2 [border: (1px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (196,28) size 0x18 -- RenderBlock (anonymous) at (0,2076) size 769x36 -- RenderText {#text} at (0,0) size 767x36 -- text run at (0,0) width 767: "The floating hr below should still be even with the select and shrinks to use its intrinsic width (which is basically like 1-" -- text run at (0,18) width 34: "2px)." -- RenderBlock {DIV} at (0,2112) size 220x60 [border: (10px solid #FF0000)] -- RenderText {#text} at (10,10) size 60x18 -- text run at (10,10) width 60: "Line One" -- RenderBR {BR} at (69,10) size 1x18 -- RenderMenuList {SELECT} at (10,30) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (floating) {HR} at (112,30) size 2x2 [border: (1px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderBR {BR} at (116,28) size 0x18 -- RenderBlock (anonymous) at (0,2172) size 769x18 -- RenderText {#text} at (0,0) size 567x18 -- text run at (0,0) width 567: "The block-level hr below has a percentage width and should still be even with the select." -- RenderBlock {DIV} at (0,2190) size 220x88 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (10,50) size 202x2 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (10,60) size 200x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock (anonymous) at (0,2278) size 769x18 -- RenderText {#text} at (0,0) size 635x18 -- text run at (0,0) width 538: "The block-level hr below has an auto width and should still be even with the select. " -- text run at (537,0) width 98: "It shrinks to fit." -- RenderBlock {DIV} at (0,2296) size 220x74 [border: (10px solid #FF0000)] -- RenderBlock (anonymous) at (10,10) size 200x18 -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "Line One" -- RenderBR {BR} at (59,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 100x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 100x18 -- RenderText at (8,2) size 22x13 -- text run at (8,2) width 22: "One" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (110,36) size 100x2 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (10,46) size 200x18 -- RenderBR {BR} at (100,0) size 0x18 --layer at (118,1356) size 100x108 -- RenderBlock (floating) {DIV} at (110,28) size 100x108 -- RenderText {#text} at (0,0) size 100x108 -- text run at (0,0) width 63: "This is an" -- text run at (0,18) width 57: "overflow" -- text run at (0,36) width 78: "section with" -- text run at (0,54) width 92: "enough text to" -- text run at (0,72) width 100: "have to wrap to" -- text run at (0,90) width 92: "multiple lines." --layer at (18,1560) size 200x54 -- RenderBlock (floating) {DIV} at (10,50) size 200x54 -- RenderText {#text} at (0,0) size 175x54 -- text run at (0,0) width 173: "This is an overflow section" -- text run at (0,18) width 175: "with enough text to have to" -- text run at (0,36) width 144: "wrap to multiple lines." --layer at (118,1670) size 100x108 -- RenderBlock {DIV} at (110,28) size 100x108 -- RenderText {#text} at (0,0) size 100x108 -- text run at (0,0) width 63: "This is an" -- text run at (0,18) width 57: "overflow" -- text run at (0,36) width 78: "section with" -- text run at (0,54) width 92: "enough text to" -- text run at (0,72) width 100: "have to wrap to" -- text run at (0,90) width 92: "multiple lines." --layer at (118,1870) size 100x108 -- RenderBlock {DIV} at (110,28) size 100x108 -- RenderText {#text} at (0,0) size 100x108 -- text run at (0,0) width 63: "This is an" -- text run at (0,18) width 57: "overflow" -- text run at (0,36) width 78: "section with" -- text run at (0,54) width 92: "enough text to" -- text run at (0,72) width 100: "have to wrap to" -- text run at (0,90) width 92: "multiple lines." -diff --git a/LayoutTests/platform/mac-mojave/fast/css-generated-content/014-expected.png b/LayoutTests/platform/mac-mojave/fast/css-generated-content/014-expected.png -deleted file mode 100644 -index d7606cfed46594f0437930c6b68a2f8f62fbe967..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/css-generated-content/014-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/css-generated-content/014-expected.txt b/LayoutTests/platform/mac-mojave/fast/css-generated-content/014-expected.txt -deleted file mode 100644 -index bda1422ef3bdcc5720b785446efab252424424b5..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css-generated-content/014-expected.txt -+++ /dev/null -@@ -1,106 +0,0 @@ --layer at (0,0) size 785x887 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x887 -- RenderBlock {HTML} at (0,0) size 785x887 -- RenderBody {BODY} at (8,21) size 769x841 -- RenderBlock {H1} at (0,0) size 769x74 -- RenderText {#text} at (0,0) size 747x74 -- text run at (0,0) width 747: "Problem: Safari improperly handles generated content" -- text run at (0,37) width 717: "in certain cases when used with multiple class names" -- RenderBlock {P} at (0,95) size 769x37 -- RenderInline {EM} at (0,0) size 767x36 -- RenderText {#text} at (0,0) size 767x36 -- text run at (0,0) width 767: "When referencing an element by two class names simultaneously, Safari won't generate content (using :before or :after)" -- text run at (0,18) width 122: "within the element." -- RenderBlock {P} at (0,147) size 769x37 -- RenderText {#text} at (0,0) size 124x18 -- text run at (0,0) width 124: "Assume we have a " -- RenderInline {CODE} at (0,0) size 24x15 -- RenderText {#text} at (123,2) size 24x15 -- text run at (123,2) width 24: "div" -- RenderText {#text} at (146,0) size 150x18 -- text run at (146,0) width 150: " with two class names: " -- RenderInline {CODE} at (0,0) size 25x15 -- RenderText {#text} at (295,2) size 25x15 -- text run at (295,2) width 25: "box" -- RenderText {#text} at (319,0) size 32x18 -- text run at (319,0) width 32: " and " -- RenderInline {CODE} at (0,0) size 24x15 -- RenderText {#text} at (350,2) size 24x15 -- text run at (350,2) width 24: "one" -- RenderText {#text} at (373,0) size 85x18 -- text run at (373,0) width 85: ". Within that " -- RenderInline {CODE} at (0,0) size 24x15 -- RenderText {#text} at (457,2) size 24x15 -- text run at (457,2) width 24: "div" -- RenderText {#text} at (480,0) size 77x18 -- text run at (480,0) width 77: ", we have a " -- RenderInline {CODE} at (0,0) size 9x15 -- RenderText {#text} at (556,2) size 9x15 -- text run at (556,2) width 9: "p" -- RenderText {#text} at (564,0) size 748x36 -- text run at (564,0) width 184: " (paragraph) tag, after which" -- text run at (0,18) width 509: "we'd like to insert generated content. One way to do so would be the following:" -- RenderBlock {PRE} at (20,199) size 749x16 [color=#FF0000] -- RenderInline {CODE} at (0,0) size 445x15 -- RenderText {#text} at (0,0) size 445x15 -- text run at (0,0) width 445: "div.box.one p:after{ content:'generated content here!'; }" -- RenderBlock {P} at (0,230) size 769x19 -- RenderText {#text} at (0,0) size 741x18 -- text run at (0,0) width 741: "But that doesn't work in Safari. However, if you drop one of the class names, as shown below, it works as expected:" -- RenderBlock {PRE} at (20,264) size 749x16 [color=#008000] -- RenderInline {CODE} at (0,0) size 414x15 -- RenderText {#text} at (0,0) size 414x15 -- text run at (0,0) width 414: "div.box p:after{ content:'generated content here!'; }" -- RenderBlock {P} at (0,295) size 769x37 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Note also that the bug only applies to content " -- RenderInline {EM} at (0,0) size 41x18 -- RenderText {#text} at (293,0) size 41x18 -- text run at (293,0) width 41: "within" -- RenderText {#text} at (333,0) size 276x18 -- text run at (333,0) width 276: " the classed element \x{2014} generating content " -- RenderInline {EM} at (0,0) size 726x36 -- RenderText {#text} at (608,0) size 726x36 -- text run at (608,0) width 118: "before or after the" -- text run at (0,18) width 85: "element itself" -- RenderText {#text} at (84,18) size 77x18 -- text run at (84,18) width 77: " works fine:" -- RenderBlock {PRE} at (20,347) size 749x16 [color=#008000] -- RenderInline {CODE} at (0,0) size 430x15 -- RenderText {#text} at (0,0) size 430x15 -- text run at (0,0) width 430: "div.box.one:after{ content:'generated content here!'; }" -- RenderBlock {HR} at (0,375) size 769x3 [border: (1px inset #000000)] -- RenderBlock {H2} at (0,397) size 769x29 -- RenderText {#text} at (0,0) size 477x28 -- text run at (0,0) width 477: "Example (view source to see CSS and HTML):" -- RenderBlock {P} at (0,445) size 769x19 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Both boxes below should contain generated content (" -- RenderInline {SPAN} at (0,0) size 53x18 [color=#008000] -- RenderText {#text} at (339,0) size 53x18 -- text run at (339,0) width 53: "in green" -- RenderText {#text} at (391,0) size 11x18 -- text run at (391,0) width 11: "):" -- RenderBlock {DIV} at (0,488) size 769x164 [border: (1px solid #000000)] -- RenderBlock {H3} at (26,44) size 717x23 -- RenderText {#text} at (0,0) size 46x22 -- text run at (0,0) width 46: "Box 1" -- RenderBlock {P} at (26,85) size 717x37 -- RenderBlock (anonymous) at (0,0) size 717x18 -- RenderText {#text} at (0,0) size 661x18 -- text run at (0,0) width 661: "This box should contain the text \"generated content\" in CSS2-compliant browsers (but won't in Safari)." -- RenderBlock (generated) at (0,18) size 717x18 [color=#008000] -- RenderText at (0,0) size 114x18 -- text run at (0,0) width 114: "generated content" -- RenderBlock {DIV} at (0,676) size 769x165 [border: (1px solid #000000)] -- RenderBlock {H3} at (26,44) size 717x23 -- RenderText {#text} at (0,0) size 46x22 -- text run at (0,0) width 46: "Box 2" -- RenderBlock {P} at (26,85) size 717x37 -- RenderBlock (anonymous) at (0,0) size 717x18 -- RenderText {#text} at (0,0) size 639x18 -- text run at (0,0) width 639: "This box should contain the text \"generated content\" in CSS2-compliant browsers, including Safari." -- RenderBlock (generated) at (0,18) size 717x18 [color=#008000] -- RenderText at (0,0) size 114x18 -- text run at (0,0) width 114: "generated content" -diff --git a/LayoutTests/platform/mac-mojave/fast/css/apple-system-control-colors-expected.txt b/LayoutTests/platform/mac-mojave/fast/css/apple-system-control-colors-expected.txt -deleted file mode 100644 -index 69a0b968ab1a8c641572faa940886c090571727a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css/apple-system-control-colors-expected.txt -+++ /dev/null -@@ -1,23 +0,0 @@ ---apple-system-header-text : rgba(0, 0, 0, 0.847) ---apple-system-text-background : rgb(255, 255, 255) ---apple-system-control-background : rgb(255, 255, 255) ---apple-system-alternate-selected-text : rgb(255, 255, 255) ---apple-system-control-accent : rgb(0, 122, 255) ---apple-system-even-alternating-content-background : rgb(255, 255, 255) ---apple-system-odd-alternating-content-background : rgb(244, 245, 245) ---apple-system-selected-content-background : rgb(0, 99, 225) ---apple-system-unemphasized-selected-content-background : rgb(220, 220, 220) ---apple-system-selected-text : rgb(0, 0, 0) ---apple-system-unemphasized-selected-text : rgb(0, 0, 0) ---apple-system-selected-text-background : rgba(128, 188, 254, 0.6) ---apple-system-unemphasized-selected-text-background : rgb(220, 220, 220) ---apple-system-placeholder-text : rgba(0, 0, 0, 0.247) ---apple-system-find-highlight-background : rgb(255, 255, 0) ---apple-system-label : rgba(0, 0, 0, 0.847) ---apple-system-secondary-label : rgba(0, 0, 0, 0.498) ---apple-system-tertiary-label : rgba(0, 0, 0, 0.247) ---apple-system-quaternary-label : rgba(0, 0, 0, 0.098) ---apple-system-grid : rgb(204, 204, 204) ---apple-system-separator : rgba(0, 0, 0, 0.098) ---apple-system-container-border : rgba(0, 0, 0, 0.247) --current-color with inherited -apple-system-label : rgba(0, 0, 0, 0.847) -diff --git a/LayoutTests/platform/mac-mojave/fast/css/continuationCrash-expected.txt b/LayoutTests/platform/mac-mojave/fast/css/continuationCrash-expected.txt -deleted file mode 100644 -index 4e70dac2052e32287cc4e3312b2fd81db2c5ed11..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css/continuationCrash-expected.txt -+++ /dev/null -@@ -1,66 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock (anonymous) at (0,0) size 784x0 -- RenderInline {SPAN} at (0,0) size 0x0 -- RenderInline {SPAN} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {H4} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 83x18 -- text run at (0,0) width 83: "Instructions" -- RenderBlock {P} at (0,39) size 784x19 -- RenderText {#text} at (0,0) size 180x18 -- text run at (0,0) width 180: "Click the following buttons." -- RenderBlock {OL} at (0,73) size 784x167 -- RenderListItem {LI} at (40,0) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "1" -- RenderText {#text} at (0,0) size 199x18 -- text run at (0,0) width 199: "Start with the outmost left one." -- RenderListItem {LI} at (40,18) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "2" -- RenderText {#text} at (0,0) size 138x18 -- text run at (0,0) width 138: "Click the middle one." -- RenderListItem {LI} at (40,36) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "3" -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "(The ouline will not be updated correctly.)" -- RenderListItem {LI} at (40,54) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "4" -- RenderText {#text} at (0,0) size 142x18 -- text run at (0,0) width 142: "Click the right button." -- RenderListItem {LI} at (40,72) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "5" -- RenderText {#text} at (0,0) size 473x18 -- text run at (0,0) width 473: "This will crash Safari 1.3 (v176 and v170, no other configurations tested)." -- RenderListItem {LI} at (40,90) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "6" -- RenderText {#text} at (0,0) size 300x18 -- text run at (0,0) width 300: "The combination 2. 1. 3. will also crash Safari." -- RenderListItem {LI} at (40,108) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "7" -- RenderText {#text} at (0,0) size 457x18 -- text run at (0,0) width 457: "1. 3. will not crash Safari. (But the outline should vanish. Shouldn't it?)" -- RenderListItem {LI} at (40,126) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "8" -- RenderText {#text} at (0,0) size 205x18 -- text run at (0,0) width 205: "2. 3. will not crash Safari either." -- RenderBlock (anonymous) at (40,144) size 744x22 -- RenderButton {INPUT} at (2,2) size 133x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 117x13 -- RenderText at (0,0) size 117x13 -- text run at (0,0) width 117: "1. Set outline property" -- RenderText {#text} at (136,1) size 5x18 -- text run at (136,1) width 5: " " -- RenderButton {INPUT} at (142,2) size 136x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 120x13 -- RenderText at (0,0) size 120x13 -- text run at (0,0) width 120: "2. Set display property" -- RenderText {#text} at (279,1) size 5x18 -- text run at (279,1) width 5: " " -- RenderButton {INPUT} at (285,2) size 147x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 131x13 -- RenderText at (0,0) size 131x13 -- text run at (0,0) width 131: "3. Replace span-element" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/css/css3-nth-child-expected.txt b/LayoutTests/platform/mac-mojave/fast/css/css3-nth-child-expected.txt -deleted file mode 100644 -index 1f56db3b96038f2ccb31684d321003789cf6f25a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css/css3-nth-child-expected.txt -+++ /dev/null -@@ -1,68 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {DIV} at (0,0) size 784x162 -- RenderTable {TABLE} at (0,0) size 784x162 -- RenderTableSection {TBODY} at (0,0) size 784x162 -- RenderTableRow {TR} at (0,2) size 784x38 [color=#008000] -- RenderTableCell {TD} at (2,2) size 383x38 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 352x36 -- text run at (1,1) width 352: "This is the first cell in the first row of this table, and" -- text run at (1,19) width 176: "should be green, and bold" -- RenderTableCell {TD} at (386,2) size 397x38 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 370x36 -- text run at (1,1) width 370: "This is the second cell in the first row of this table, and" -- text run at (1,19) width 172: "should be green and bold" -- RenderTableRow {TR} at (0,42) size 784x38 [color=#800080] -- RenderTableCell {TD} at (2,42) size 383x38 [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 370x36 -- text run at (1,1) width 370: "This is the first cell in the second row of this table, and" -- text run at (1,19) width 179: "should be purple and bold" -- RenderTableCell {TD} at (386,42) size 397x38 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 389x36 -- text run at (1,1) width 389: "This is the second cell in the second row of this table, and" -- text run at (1,19) width 179: "should be purple and bold" -- RenderTableRow {TR} at (0,82) size 784x38 [color=#008000] -- RenderTableCell {TD} at (2,82) size 383x38 [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 337x36 -- text run at (1,1) width 337: "This is the first cell in the third row of this table, and" -- text run at (1,19) width 102: "should be green" -- RenderTableCell {TD} at (386,82) size 397x38 [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 356x36 -- text run at (1,1) width 356: "This is the second cell in the third row of this table, and" -- text run at (1,19) width 102: "should be green" -- RenderTableRow {TR} at (0,122) size 784x38 [color=#800080] -- RenderTableCell {TD} at (2,122) size 383x38 [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 346x36 -- text run at (1,1) width 346: "This is the first cell in the fourth row of this table, and" -- text run at (1,19) width 107: "should be purple" -- RenderTableCell {TD} at (386,122) size 397x38 [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 365x36 -- text run at (1,1) width 365: "This is the second cell in the fourth row of this table, and" -- text run at (1,19) width 107: "should be purple" -- RenderBlock {DIV} at (0,178) size 784x120 -- RenderBlock {P} at (0,0) size 784x18 [color=#000080] -- RenderText {#text} at (0,0) size 394x18 -- text run at (0,0) width 394: "This should be navy, as this is the first paragraph in this page." -- RenderBlock {P} at (0,34) size 784x18 [color=#FF0000] -- RenderText {#text} at (0,0) size 404x18 -- text run at (0,0) width 404: "This should be red, as this is the second paragraph in this page." -- RenderBlock {P} at (0,68) size 784x18 [color=#000080] -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This should be navy, as this is the third paragraph in this page." -- RenderBlock {P} at (0,102) size 784x18 [color=#FF0000] -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "This should be red, as this is the fourth paragraph in this page." -- RenderBlock {DIV} at (0,314) size 784x18 -- RenderBlock {P} at (0,0) size 784x18 [color=#000080] -- RenderInline {SPAN} at (0,0) size 249x18 -- RenderInline {I} at (0,0) size 249x18 -- RenderText {#text} at (0,0) size 249x18 -- text run at (0,0) width 249: "This whole paragraph should be italic." -- RenderText {#text} at (248,0) size 5x18 -- text run at (248,0) width 5: " " -- RenderInline {SPAN} at (0,0) size 282x18 -- RenderText {#text} at (252,0) size 282x18 -- text run at (252,0) width 282: "But only this sentence should be bold." -diff --git a/LayoutTests/platform/mac-mojave/fast/css/line-height-font-order-expected.png b/LayoutTests/platform/mac-mojave/fast/css/line-height-font-order-expected.png -deleted file mode 100644 -index 7305287b00a62d3fc84f0d593d5cd575f5ec84ed..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/css/line-height-font-order-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/css/line-height-font-order-expected.txt b/LayoutTests/platform/mac-mojave/fast/css/line-height-font-order-expected.txt -deleted file mode 100644 -index cad7b8c091e280b5c463d1bbcac2117a053ace4a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css/line-height-font-order-expected.txt -+++ /dev/null -@@ -1,21 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x196 -- RenderBlock {HTML} at (0,0) size 800x196 -- RenderBody {BODY} at (8,15) size 784x166 -- RenderBlock {P} at (0,0) size 784x75 -- RenderText {#text} at (0,29) size 95x17 -- text run at (0,29) width 95: "This tests bug " -- RenderInline {A} at (0,0) size 651x17 [color=#0000EE] -- RenderText {#text} at (94,29) size 651x17 -- text run at (94,29) width 651: "Bug 13174: line-height in font shorthand does not override a previously stated line-height property" -- RenderText {#text} at (744,29) size 6x17 -- text run at (744,29) width 6: "." -- RenderBlock {P} at (0,90) size 784x76 -- RenderText {#text} at (0,29) size 130x17 -- text run at (0,29) width 130: "This text should be " -- RenderInline {CODE} at (0,0) size 190x17 -- RenderText {#text} at (129,30) size 190x17 -- text run at (129,30) width 190: "font:15px/5em Georgia" -- RenderText {#text} at (318,29) size 5x17 -- text run at (318,29) width 5: "." -diff --git a/LayoutTests/platform/mac-mojave/fast/css/rtl-ordering-expected.txt b/LayoutTests/platform/mac-mojave/fast/css/rtl-ordering-expected.txt -deleted file mode 100644 -index d53f257a106dd45442276aecf0dd491ddc585781..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css/rtl-ordering-expected.txt -+++ /dev/null -@@ -1,45 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 218x18 -- text run at (0,0) width 218: "This tests for a regression against " -- RenderInline {I} at (0,0) size 722x36 -- RenderInline {A} at (0,0) size 354x18 [color=#0000EE] -- RenderText {#text} at (217,0) size 354x18 -- text run at (217,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=6334" -- RenderText {#text} at (570,0) size 722x36 -- text run at (570,0) width 152: " REGRESSION: text is reversed on \"visual Hebrew\" pages" -- RenderText {#text} at (373,18) size 5x18 -- text run at (373,18) width 5: "." -- RenderBlock {HR} at (0,52) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,70) size 784x19 -- RenderText {#text} at (0,1) size 310x18 -- text run at (0,1) width 310: "The text on both buttons should like this: \x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}" -- RenderBlock (anonymous) at (0,105) size 784x44 -- RenderButton {BUTTON} at (2,2) size 46x18 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 30x13 -- RenderText {#text} at (0,0) size 30x13 -- text run at (0,0) width 30: "\x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}" -- RenderText {#text} at (49,1) size 5x18 -- text run at (49,1) width 5: " " -- RenderBR {BR} at (53,1) size 1x18 -- RenderButton {INPUT} at (2,24) size 46x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 30x13 -- RenderText at (0,0) size 30x13 -- text run at (0,0) width 30 RTL: "\x{5DB}\x{5E4}\x{5EA}\x{5D5}\x{5E8}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,157) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,175) size 784x18 -- RenderText {#text} at (0,0) size 255x18 -- text run at (0,0) width 255: "The following lines should be identical:" -- RenderBlock {P} at (0,209) size 784x19 -- RenderText {#text} at (0,1) size 81x18 -- text run at (0,1) width 16: "21" -- text run at (16,1) width 65 RTL: "\x{5D4}\x{5DE}\x{5D0}\x{5D4} \x{5D4}-" -- RenderBlock {P} at (0,244) size 784x19 -- RenderText {#text} at (0,1) size 81x18 -- text run at (0,1) width 81: "21-\x{5D4} \x{5D4}\x{5D0}\x{5DE}\x{5D4}" -diff --git a/LayoutTests/platform/mac-mojave/fast/css/text-overflow-input-expected.txt b/LayoutTests/platform/mac-mojave/fast/css/text-overflow-input-expected.txt -deleted file mode 100644 -index 4b71ad9e0a7731c831409a2412354dab90822a92..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/css/text-overflow-input-expected.txt -+++ /dev/null -@@ -1,246 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x382 -- RenderBlock {HTML} at (0,0) size 800x382 -- RenderBody {BODY} at (8,16) size 784x350 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "This test is a basic check for using text-overflow." -- RenderBlock {P} at (0,34) size 784x110 -- RenderText {#text} at (0,0) size 489x18 -- text run at (0,0) width 489: "Apply \"text-overflow:clip\" to inputs. The following input should be clipped:" -- RenderBR {BR} at (488,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (150,20) size 5x18 -- text run at (150,20) width 5: " " -- RenderTextControl {INPUT} at (156,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (332,20) size 5x18 -- text run at (332,20) width 5: " " -- RenderTextControl {INPUT} at (338,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (487,20) size 5x18 -- text run at (487,20) width 5: " " -- RenderTextControl {INPUT} at (493,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,43) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderBR {BR} at (150,43) size 1x18 -- RenderTextControl {INPUT} at (2,66) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (149,66) size 5x18 -- text run at (149,66) width 5: " " -- RenderTextControl {INPUT} at (155,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (330,66) size 5x18 -- text run at (330,66) width 5: " " -- RenderTextControl {INPUT} at (336,66) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (484,66) size 5x18 -- text run at (484,66) width 5: " " -- RenderTextControl {INPUT} at (490,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,89) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,160) size 784x110 -- RenderText {#text} at (0,0) size 546x18 -- text run at (0,0) width 546: "Apply \"text-overflow:ellipsis\" to inputs. The following input should show an ellipsis:" -- RenderBR {BR} at (545,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (150,20) size 5x18 -- text run at (150,20) width 5: " " -- RenderTextControl {INPUT} at (156,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (332,20) size 5x18 -- text run at (332,20) width 5: " " -- RenderTextControl {INPUT} at (338,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (487,20) size 5x18 -- text run at (487,20) width 5: " " -- RenderTextControl {INPUT} at (493,20) size 175x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,43) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderBR {BR} at (150,43) size 1x18 -- RenderTextControl {INPUT} at (2,66) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (149,66) size 5x18 -- text run at (149,66) width 5: " " -- RenderTextControl {INPUT} at (155,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (330,66) size 5x18 -- text run at (330,66) width 5: " " -- RenderTextControl {INPUT} at (336,66) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (484,66) size 5x18 -- text run at (484,66) width 5: " " -- RenderTextControl {INPUT} at (490,66) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 167x19 -- RenderBlock {DIV} at (158,0) size 9x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderTextControl {INPUT} at (2,89) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,286) size 784x64 -- RenderText {#text} at (0,0) size 237x18 -- text run at (0,0) width 237: "Dynamic style change text-overflow:" -- RenderBR {BR} at (236,0) size 1x18 -- RenderText {#text} at (0,20) size 247x18 -- text run at (0,20) width 247: "Clip to ellipsis (should show ellipsis): " -- RenderTextControl {INPUT} at (248,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (397,20) size 5x18 -- text run at (397,20) width 5: " " -- RenderTextControl {INPUT} at (403,20) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (551,20) size 5x18 -- text run at (551,20) width 5: " " -- RenderBR {BR} at (555,20) size 1x18 -- RenderText {#text} at (0,43) size 270x18 -- text run at (0,43) width 270: "Ellipsis to clip (should not show ellipsis): " -- RenderTextControl {INPUT} at (271,43) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (420,43) size 5x18 -- text run at (420,43) width 5: " " -- RenderTextControl {INPUT} at (426,43) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (575,43) size 5x18 -- text run at (575,43) width 5: " " -- RenderBR {BR} at (579,43) size 1x18 --layer at (13,73) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,73) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (176,73) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (11,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (176,73) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (350,73) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (513,73) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,96) size 141x13 scrollWidth 282 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 282x13 -- text run at (0,0) width 282: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (13,119) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,119) size 140x13 -- RenderBlock {DIV} at (3,3) size 140x13 --layer at (186,119) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (22,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (186,119) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 --layer at (348,119) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (521,119) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,142) size 140x13 scrollX 141 scrollWidth 281 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-141,0) size 282x13 -- text run at (-141,0) width 281 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (13,199) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,199) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (176,199) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (11,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (176,199) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (350,199) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (513,199) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,222) size 141x13 scrollWidth 282 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 282x13 -- text run at (0,0) width 282: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (13,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,245) size 140x13 -- RenderBlock {DIV} at (3,3) size 140x13 --layer at (186,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (22,3) size 140x13 [color=#A9A9A9] -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (186,245) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 --layer at (348,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (521,245) size 140x13 scrollX 148 scrollWidth 288 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-147,0) size 288x13 -- text run at (-147,0) width 287: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (13,268) size 140x13 scrollX 141 scrollWidth 281 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (-141,0) size 282x13 -- text run at (-141,0) width 281 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" --layer at (259,325) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (259,325) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (414,325) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (283,348) size 141x13 scrollWidth 288 -- RenderBlock {DIV} at (3,3) size 141x13 [color=#A9A9A9] -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" --layer at (283,348) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (438,348) size 141x13 scrollWidth 289 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 288x13 -- text run at (0,0) width 288: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" -diff --git a/LayoutTests/platform/mac-mojave/fast/dom/34176-expected.txt b/LayoutTests/platform/mac-mojave/fast/dom/34176-expected.txt -deleted file mode 100644 -index a00b08bb06b23c6b873f77ec5a2e05a70efa1f0d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/dom/34176-expected.txt -+++ /dev/null -@@ -1,389 +0,0 @@ --layer at (0,0) size 785x1458 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x1458 -- RenderBlock {HTML} at (0,0) size 785x1458 -- RenderBody {BODY} at (8,16) size 769x1426 -- RenderBlock {P} at (0,0) size 769x54 -- RenderText {#text} at (8,0) size 761x54 -- text run at (8,0) width 405: "Test rendering of 3 text runs -- TextRun1 TextRun2 TextRun3, " -- text run at (412,0) width 357: "in which TextRun1 and TextRun2's bidi level are 2, and" -- text run at (39,18) width 730: "TextRun3's bidi level is 1. TextRun2 and TextRun3 are siblings. But their ancestor (not their parent) is a sibling of" -- text run at (93,36) width 72: "TextRun1. " -- text run at (164,36) width 605: "The visual order should be TextRun3 TextRun1 TextRun2, not TextRun3 TextRun2 TextRun1." -- RenderBlock {HR} at (0,70) size 769x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,88) size 769x19 -- RenderText {#text} at (299,1) size 470x18 -- text run at (299,1) width 348: "Pure text. The following 3 lines should all display as \"" -- text run at (646,1) width 28 RTL: "\x{5E9}\x{5E0}\x{5D1}" -- text run at (673,1) width 96: " This is a Test\"" -- RenderBlock {DIV} at (0,123) size 769x19 [bgcolor=#FF0000] -- RenderText {#text} at (684,1) size 59x18 -- text run at (684,1) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 116x18 -- RenderInline {SPAN} at (0,0) size 116x18 -- RenderText {#text} at (680,1) size 89x18 -- text run at (680,1) width 5 RTL: " " -- text run at (742,1) width 27: "Test" -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderText {#text} at (653,1) size 28x18 -- text run at (653,1) width 28 RTL: "\x{5E9}\x{5E0}\x{5D1}" -- RenderBlock {DIV} at (0,142) size 769x19 [bgcolor=#FF0000] -- RenderText {#text} at (684,1) size 59x18 -- text run at (684,1) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 116x18 -- RenderInline {SPAN} at (0,0) size 116x18 -- RenderInline {SPAN} at (0,0) size 116x18 -- RenderText {#text} at (680,1) size 89x18 -- text run at (680,1) width 5 RTL: " " -- text run at (742,1) width 27: "Test" -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderText {#text} at (653,1) size 28x18 -- text run at (653,1) width 28 RTL: "\x{5E9}\x{5E0}\x{5D1}" -- RenderBlock {DIV} at (0,161) size 769x19 -- RenderText {#text} at (684,1) size 59x18 -- text run at (684,1) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 116x18 -- RenderText {#text} at (680,1) size 89x18 -- text run at (680,1) width 5 RTL: " " -- text run at (742,1) width 27: "Test" -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderText {#text} at (653,1) size 28x18 -- text run at (653,1) width 28 RTL: "\x{5E9}\x{5E0}\x{5D1}" -- RenderBlock {HR} at (0,188) size 769x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,206) size 769x18 -- RenderText {#text} at (314,0) size 455x18 -- text run at (314,0) width 455: "Text in . The English text should be displayed as \"This is a Test\"." -- RenderBlock {DIV} at (0,240) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 84x18 -- RenderInline {EM} at (0,0) size 84x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,258) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 84x18 -- RenderInline {EM} at (0,0) size 84x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,276) size 769x19 [bgcolor=#FF0000] -- RenderText {#text} at (685,1) size 59x18 -- text run at (685,1) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 118x18 -- RenderInline {EM} at (0,0) size 118x18 -- RenderText {#text} at (681,1) size 88x18 -- text run at (681,1) width 5 RTL: " " -- text run at (743,1) width 26: "Test" -- RenderInline {SPAN} at (0,0) size 31x18 -- RenderText {#text} at (651,1) size 31x18 -- text run at (651,1) width 31 RTL: "\x{5D3}\x{5DE}\x{5D4}" -- RenderBlock {DIV} at (0,295) size 769x18 -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 26x18 -- RenderInline {EM} at (0,0) size 26x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderBlock {DIV} at (0,313) size 769x18 -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 26x18 -- RenderInline {EM} at (0,0) size 26x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderBlock {HR} at (0,339) size 769x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,357) size 769x18 -- RenderText {#text} at (289,0) size 480x18 -- text run at (289,0) width 480: "Text in . The following lines should all display as \"This is a Test\"." -- RenderBlock {DIV} at (0,391) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 87x18 -- RenderInline {STRONG} at (0,0) size 87x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,409) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 87x18 -- RenderInline {STRONG} at (0,0) size 87x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,427) size 769x18 -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderInline {STRONG} at (0,0) size 28x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderBlock {DIV} at (0,445) size 769x18 -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderInline {STRONG} at (0,0) size 28x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderBlock {HR} at (0,471) size 769x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,489) size 769x18 -- RenderText {#text} at (324,0) size 445x18 -- text run at (324,0) width 445: "Text in . The following lines should all display as \"This is a Test\"." -- RenderBlock {DIV} at (0,523) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 84x18 -- RenderInline {I} at (0,0) size 84x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,541) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 84x18 -- RenderInline {I} at (0,0) size 84x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,559) size 769x18 -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 26x18 -- RenderInline {I} at (0,0) size 26x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderBlock {DIV} at (0,577) size 769x18 -- RenderText {#text} at (685,0) size 59x18 -- text run at (685,0) width 59: "This is a " -- RenderInline {SPAN} at (0,0) size 26x18 -- RenderInline {I} at (0,0) size 26x18 -- RenderText {#text} at (743,0) size 26x18 -- text run at (743,0) width 26: "Test" -- RenderBlock {HR} at (0,603) size 769x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,621) size 769x18 -- RenderText {#text} at (321,0) size 448x18 -- text run at (321,0) width 448: "Text in . The following lines should all display as \"This is a Test\"." -- RenderBlock {DIV} at (0,655) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 87x18 -- RenderInline {B} at (0,0) size 87x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,673) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 87x18 -- RenderInline {B} at (0,0) size 87x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderBlock {DIV} at (0,691) size 769x18 -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderInline {B} at (0,0) size 28x18 -- RenderInline {SPAN} at (0,0) size 1x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderBlock {DIV} at (0,709) size 769x18 -- RenderText {#text} at (682,0) size 60x18 -- text run at (682,0) width 60: "This is a " -- RenderInline {SPAN} at (0,0) size 28x18 -- RenderInline {B} at (0,0) size 28x18 -- RenderText {#text} at (741,0) size 28x18 -- text run at (741,0) width 28: "Test" -- RenderBlock (anonymous) at (0,727) size 769x0 -- RenderInline {B} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,735) size 769x691 -- RenderBlock {HR} at (0,0) size 769x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,18) size 769x18 -- RenderText {#text} at (91,0) size 678x18 -- text run at (91,0) width 678: "Text in , , , . The following English text should all display as \"This is a Test\"." -- RenderBlock {DIV} at (0,52) size 769x24 [bgcolor=#FF0000] -- RenderText {#text} at (680,6) size 62x18 -- text run at (680,6) width 62: "This is a " -- RenderInline {SPAN} at (0,0) size 109x18 -- RenderInline {A} at (0,0) size 109x18 [color=#551A8B] -- RenderText {#text} at (741,6) size 28x18 -- text run at (741,6) width 28: "Test" -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderImage {IMG} at (660,0) size 21x20 -- RenderBlock {DIV} at (0,76) size 769x19 [bgcolor=#FF0000] -- RenderText {#text} at (680,1) size 62x18 -- text run at (680,1) width 62: "This is a " -- RenderInline {SPAN} at (0,0) size 122x18 -- RenderInline {A} at (0,0) size 122x18 [color=#551A8B] -- RenderText {#text} at (676,1) size 93x18 -- text run at (676,1) width 5 RTL: " " -- text run at (741,1) width 28: "Test" -- RenderInline {SPAN} at (0,0) size 30x18 -- RenderText {#text} at (647,1) size 30x18 -- text run at (647,1) width 30 RTL: "\x{5E9}\x{5E0}\x{5D1}" -- RenderBlock {DIV} at (0,95) size 769x18 [bgcolor=#FF0000] -- RenderText {#text} at (678,0) size 62x18 -- text run at (678,0) width 62: "This is a " -- RenderInline {SPAN} at (0,0) size 91x18 -- RenderInline {EM} at (0,0) size 91x18 -- RenderText {#text} at (739,0) size 30x18 -- text run at (739,0) width 30: "Test" -- RenderInline {A} at (0,0) size 1x18 [color=#551A8B] -- RenderBlock {DIV} at (0,113) size 769x24 [bgcolor=#FF0000] -- RenderText {#text} at (678,6) size 62x18 -- text run at (678,6) width 62: "This is a " -- RenderInline {SPAN} at (0,0) size 111x18 -- RenderInline {EM} at (0,0) size 111x18 -- RenderText {#text} at (739,6) size 30x18 -- text run at (739,6) width 30: "Test" -- RenderInline {SPAN} at (0,0) size 21x18 -- RenderImage {IMG} at (658,0) size 21x20 -- RenderBlock {DIV} at (0,137) size 769x18 -- RenderText {#text} at (638,0) size 62x18 -- text run at (638,0) width 62: "This is a " -- RenderInline {SPAN} at (0,0) size 70x18 -- RenderInline {A} at (0,0) size 70x18 [color=#551A8B] -- RenderText {#text} at (699,0) size 33x18 -- text run at (699,0) width 33: "Test " -- RenderInline {SPAN} at (0,0) size 38x18 -- RenderText {#text} at (731,0) size 38x18 -- text run at (731,0) width 38: "again" -- RenderBlock {DIV} at (0,155) size 769x42 -- RenderBlock (anonymous) at (0,0) size 769x18 -- RenderText {#text} at (678,0) size 62x18 -- text run at (678,0) width 62: "This is a " -- RenderInline {SPAN} at (0,0) size 30x18 -- RenderInline {EM} at (0,0) size 30x18 -- RenderText {#text} at (739,0) size 30x18 -- text run at (739,0) width 30: "Test" -- RenderBlock (anonymous) at (0,18) size 769x24 -- RenderTable {TABLE} at (754,0) size 15x24 -- RenderTableSection {TBODY} at (0,0) size 15x24 -- RenderTableRow {TR} at (0,2) size 15x20 -- RenderTableCell {TD} at (2,2) size 11x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 9x18 -- text run at (1,1) width 9: "a" -- RenderBlock (anonymous) at (0,42) size 769x0 -- RenderInline {SPAN} at (0,0) size 0x0 -- RenderInline {EM} at (0,0) size 0x0 -- RenderBlock {HR} at (0,205) size 769x2 [border: (1px inset #000000)] -- RenderBlock {UL} at (0,223) size 769x468 -- RenderListItem {LI} at (40,0) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 0: : Success" -- RenderListItem {LI} at (40,18) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 1: : Success" -- RenderListItem {LI} at (40,36) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 2: : Success" -- RenderListItem {LI} at (40,54) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 3: : Success" -- RenderListItem {LI} at (40,72) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 4: : Success" -- RenderListItem {LI} at (40,90) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 5: : Success" -- RenderListItem {LI} at (40,108) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 6: : Success" -- RenderListItem {LI} at (40,126) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 7: : Success" -- RenderListItem {LI} at (40,144) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 8: : Success" -- RenderListItem {LI} at (40,162) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Test 9: : Success" -- RenderListItem {LI} at (40,180) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 10: : Success" -- RenderListItem {LI} at (40,198) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 118x18 -- text run at (0,0) width 118: "Test 11: : Success" -- RenderListItem {LI} at (40,216) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 12: : Success" -- RenderListItem {LI} at (40,234) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 13: : Success" -- RenderListItem {LI} at (40,252) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 14: : Success" -- RenderListItem {LI} at (40,270) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 15: : Success" -- RenderListItem {LI} at (40,288) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 16: : Success" -- RenderListItem {LI} at (40,306) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 17: : Success" -- RenderListItem {LI} at (40,324) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 18: : Success" -- RenderListItem {LI} at (40,342) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 19: : Success" -- RenderListItem {LI} at (40,360) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 20: : Success" -- RenderListItem {LI} at (40,378) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 21: : Success" -- RenderListItem {LI} at (40,396) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 22: : Success" -- RenderListItem {LI} at (40,414) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 23: : Success" -- RenderListItem {LI} at (40,432) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 24: : Success" -- RenderListItem {LI} at (40,450) size 729x18 -- RenderListMarker at (-17,0) size 7x18: bullet -- RenderText {#text} at (0,0) size 119x18 -- text run at (0,0) width 119: "Test 25: : Success" -- RenderBlock (anonymous) at (0,1442) size 769x0 -- RenderInline {B} at (0,0) size 0x0 --selection start: position 0 of child 0 {#text} of child 14 {DIV} of child 56 {B} of body --selection end: position 4 of child 0 {#text} of child 14 {DIV} of child 56 {B} of body -diff --git a/LayoutTests/platform/mac-mojave/fast/dom/clone-node-dynamic-style-expected.txt b/LayoutTests/platform/mac-mojave/fast/dom/clone-node-dynamic-style-expected.txt -deleted file mode 100644 -index 4b9e2ca2c954a5282ea482fb3ffa6c30bcb3a36f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/dom/clone-node-dynamic-style-expected.txt -+++ /dev/null -@@ -1,46 +0,0 @@ --layer at (0,0) size 861x585 -- RenderView at (0,0) size 800x585 --layer at (0,0) size 800x585 -- RenderBlock {HTML} at (0,0) size 800x585 -- RenderBody {BODY} at (8,8) size 784x569 -- RenderBlock {H1} at (0,0) size 784x37 -- RenderText {#text} at (0,0) size 195x37 -- text run at (0,0) width 195: "Cloning nodes" -- RenderBlock {DIV} at (0,58) size 784x41 [bgcolor=#FFFF00] [border: (2px ridge #000000)] -- RenderInline {SPAN} at (0,0) size 851x36 -- RenderText {#text} at (2,2) size 61x36 -- text run at (2,2) width 61: "Bold" -- RenderInline {SPAN} at (0,0) size 731x36 -- RenderText {#text} at (62,2) size 206x36 -- text run at (62,2) width 206: "Bold+Underline" -- RenderInline {SPAN} at (0,0) size 304x36 -- RenderText {#text} at (267,2) size 304x36 -- text run at (267,2) width 304: "Bold+Underline+Italic" -- RenderText {#text} at (570,2) size 223x36 -- text run at (570,2) width 223: "Bold+Uunderline" -- RenderText {#text} at (792,2) size 61x36 -- text run at (792,2) width 61: "Bold" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,98) size 784x19 -- RenderText {#text} at (0,0) size 191x18 -- text run at (0,0) width 191: "Cloned Node with deep=false" -- RenderBlock {DIV} at (0,116) size 784x41 [bgcolor=#FFFF00] [border: (2px ridge #000000)] -- RenderBR {BR} at (2,2) size 0x36 -- RenderBlock (anonymous) at (0,156) size 784x19 -- RenderText {#text} at (0,0) size 186x18 -- text run at (0,0) width 186: "Cloned Node with deep=true" -- RenderBlock {DIV} at (0,174) size 784x41 [bgcolor=#FFFF00] [border: (2px ridge #000000)] -- RenderInline {SPAN} at (0,0) size 851x36 -- RenderText {#text} at (2,2) size 61x36 -- text run at (2,2) width 61: "Bold" -- RenderInline {SPAN} at (0,0) size 731x36 -- RenderText {#text} at (62,2) size 206x36 -- text run at (62,2) width 206: "Bold+Underline" -- RenderInline {SPAN} at (0,0) size 304x36 -- RenderText {#text} at (267,2) size 304x36 -- text run at (267,2) width 304: "Bold+Underline+Italic" -- RenderText {#text} at (570,2) size 223x36 -- text run at (570,2) width 223: "Bold+Uunderline" -- RenderText {#text} at (792,2) size 61x36 -- text run at (792,2) width 61: "Bold" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/basic-inputs-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/basic-inputs-expected.txt -deleted file mode 100644 -index 427e6961011dbe702944e712b4570e302ec846fc..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/basic-inputs-expected.txt -+++ /dev/null -@@ -1,88 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 470x582 -- RenderBlock (anonymous) at (0,0) size 470x306 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "This tests basic inputs. Here's what you should see:" -- RenderBR {BR} at (327,0) size 1x18 -- RenderBR {BR} at (0,18) size 0x18 -- RenderText {#text} at (0,36) size 461x54 -- text run at (0,36) width 442: "first line: the letter \"a\" and then a text input field filled with repeating" -- text run at (0,54) width 86: "\"foobarbaz\", " -- text run at (85,54) width 376: "then the word \"text\" followed by a disabled text input field" -- text run at (0,72) width 331: "filled with \"foo\" and then the letter \"b\" and then \"a\"" -- RenderBR {BR} at (330,72) size 1x18 -- RenderBR {BR} at (0,90) size 0x18 -- RenderText {#text} at (0,108) size 467x54 -- text run at (0,108) width 437: "second line: and then a password input field that's filled and then the" -- text run at (0,126) width 467: "word \"password\" and then a disabled password field that's filled and then" -- text run at (0,144) width 82: "the letter \"b\"" -- RenderBR {BR} at (81,144) size 1x18 -- RenderBR {BR} at (0,162) size 0x18 -- RenderText {#text} at (0,180) size 459x36 -- text run at (0,180) width 459: "third line: the letter \"a\" and then a checkbox (unchecked) with the word" -- text run at (0,198) width 356: "\"checkbox\" and then a disabled checkbox and letter \"b\"" -- RenderBR {BR} at (355,198) size 1x18 -- RenderBR {BR} at (0,216) size 0x18 -- RenderText {#text} at (0,234) size 457x54 -- text run at (0,234) width 411: "fourth line: the last line has the letter \"a\" and then a redio button" -- text run at (0,252) width 457: "(unselected) and then the word \"radio\" and then a disabled radio button" -- text run at (0,270) width 109: "and the letter \"b\"" -- RenderBR {BR} at (108,270) size 1x18 -- RenderBR {BR} at (0,288) size 0x18 -- RenderBlock {DIV} at (10,316) size 450x48 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,3) size 8x18 -- text run at (1,3) width 8: "a" -- RenderTextControl {INPUT} at (10,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (158,3) size 29x18 -- text run at (158,3) width 29: "text " -- RenderTextControl {INPUT} at (188,3) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (336,3) size 20x18 -- text run at (336,3) width 13: "b " -- text run at (348,3) width 8: "a" -- RenderTextControl {INPUT} at (3,26) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (151,26) size 66x18 -- text run at (151,26) width 66: "password " -- RenderTextControl {INPUT} at (218,26) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (366,26) size 9x18 -- text run at (366,26) width 9: "b" -- RenderBlock {DIV} at (10,374) size 450x21 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,1) size 8x18 -- text run at (1,1) width 8: "a" -- RenderBlock {INPUT} at (10,5) size 13x12 -- RenderText {#text} at (24,1) size 66x18 -- text run at (24,1) width 66: "checkbox " -- RenderBlock {INPUT} at (91,5) size 13x12 -- RenderText {#text} at (105,1) size 9x18 -- text run at (105,1) width 9: "b" -- RenderBlock {DIV} at (10,405) size 450x21 [border: (1px solid #FF0000)] -- RenderText {#text} at (1,1) size 8x18 -- text run at (1,1) width 8: "a" -- RenderBlock {INPUT} at (10,5) size 13x12 -- RenderText {#text} at (24,1) size 37x18 -- text run at (24,1) width 37: "radio " -- RenderBlock {INPUT} at (62,5) size 13x12 -- RenderText {#text} at (76,1) size 9x18 -- text run at (76,1) width 9: "b" --layer at (31,330) size 141x13 scrollWidth 160 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 160x13 -- text run at (0,0) width 160: "foobarbazfoobarbazfoobarbaz" --layer at (210,330) size 140x13 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 17x13 -- text run at (0,0) width 17: "foo" --layer at (24,353) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 16x13 -- text run at (0,0) width 16: "\x{2022}\x{2022}\x{2022}" --layer at (239,353) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 16x13 -- text run at (0,0) width 16: "\x{2022}\x{2022}\x{2022}" -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/button-positioned-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/button-positioned-expected.txt -deleted file mode 100644 -index 4053905ac0f0716ddbbc500b2e7153355f28fb92..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/button-positioned-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 --layer at (10,10) size 149x18 -- RenderButton {BUTTON} at (10,10) size 150x18 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 134x13 -- RenderText {#text} at (0,0) size 134x13 -- text run at (0,0) width 134: "This button is positioned." --layer at (10,10) size 170x18 -- RenderButton {INPUT} at (10,10) size 171x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 155x13 -- RenderText at (0,0) size 155x13 -- text run at (0,0) width 155: "This button is also positioned" -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/button-sizes-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/button-sizes-expected.txt -deleted file mode 100644 -index 4141bbfb7f1e39c556613b4659d08789f2b9afeb..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/button-sizes-expected.txt -+++ /dev/null -@@ -1,112 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderButton {BUTTON} at (0,8) size 46x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,4) size 30x6 -- RenderText {#text} at (0,0) size 30x6 -- text run at (0,0) width 30: "Test Button" -- RenderText {#text} at (45,3) size 5x18 -- text run at (45,3) width 5: " " -- RenderButton {BUTTON} at (49,8) size 52x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,3) size 36x8 -- RenderText {#text} at (0,0) size 36x7 -- text run at (0,0) width 36: "Test Button" -- RenderText {#text} at (100,3) size 5x18 -- text run at (100,3) width 5: " " -- RenderButton {BUTTON} at (104,7) size 57x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,3) size 41x8 -- RenderText {#text} at (0,0) size 41x8 -- text run at (0,0) width 41: "Test Button" -- RenderText {#text} at (160,3) size 5x18 -- text run at (160,3) width 5: " " -- RenderButton {BUTTON} at (164,7) size 63x15 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 46x10 -- RenderText {#text} at (0,0) size 46x10 -- text run at (0,0) width 46: "Test Button" -- RenderText {#text} at (226,3) size 5x18 -- text run at (226,3) width 5: " " -- RenderButton {BUTTON} at (230,6) size 67x16 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText {#text} at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (296,3) size 5x18 -- text run at (296,3) width 5: " " -- RenderButton {BUTTON} at (300,5) size 73x17 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 56x12 -- RenderText {#text} at (0,0) size 56x12 -- text run at (0,0) width 56: "Test Button" -- RenderText {#text} at (372,3) size 5x18 -- text run at (372,3) width 5: " " -- RenderButton {BUTTON} at (378,4) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText {#text} at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (456,3) size 5x18 -- text run at (456,3) width 5: " " -- RenderButton {INPUT} at (462,4) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (540,3) size 5x18 -- text run at (540,3) width 5: " " -- RenderButton {BUTTON} at (546,3) size 82x20 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 65x15 -- RenderText {#text} at (0,0) size 65x15 -- text run at (0,0) width 65: "Test Button" -- RenderText {#text} at (629,3) size 5x18 -- text run at (629,3) width 5: " " -- RenderButton {BUTTON} at (635,2) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText {#text} at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (722,3) size 5x18 -- text run at (722,3) width 5: " " -- RenderButton {BUTTON} at (2,32) size 91x22 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 75x17 -- RenderText {#text} at (0,0) size 75x17 -- text run at (0,0) width 75: "Test Button" -- RenderText {#text} at (94,34) size 5x18 -- text run at (94,34) width 5: " " -- RenderButton {BUTTON} at (100,31) size 95x23 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 79x18 -- RenderText {#text} at (0,0) size 79x18 -- text run at (0,0) width 79: "Test Button" -- RenderText {#text} at (196,34) size 5x18 -- text run at (196,34) width 5: " " -- RenderButton {BUTTON} at (202,31) size 100x23 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 84x18 -- RenderText {#text} at (0,0) size 84x18 -- text run at (0,0) width 84: "Test Button" -- RenderText {#text} at (303,34) size 5x18 -- text run at (303,34) width 5: " " -- RenderButton {BUTTON} at (309,30) size 105x25 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 88x20 -- RenderText {#text} at (0,0) size 88x20 -- text run at (0,0) width 88: "Test Button" -- RenderText {#text} at (415,34) size 5x18 -- text run at (415,34) width 5: " " -- RenderButton {BUTTON} at (421,29) size 109x26 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 93x21 -- RenderText {#text} at (0,0) size 93x21 -- text run at (0,0) width 93: "Test Button" -- RenderText {#text} at (531,34) size 5x18 -- text run at (531,34) width 5: " " -- RenderButton {BUTTON} at (537,28) size 115x27 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 98x22 -- RenderText {#text} at (0,0) size 98x22 -- text run at (0,0) width 98: "Test Button" -- RenderText {#text} at (653,34) size 5x18 -- text run at (653,34) width 5: " " -- RenderButton {BUTTON} at (659,27) size 115x28 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 99x23 -- RenderText {#text} at (0,0) size 99x23 -- text run at (0,0) width 99: "Test Button" -- RenderText {#text} at (775,34) size 5x18 -- text run at (775,34) width 5: " " -- RenderButton {BUTTON} at (2,59) size 119x29 [color=#000000D8] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] -- RenderBlock (anonymous) at (8,2) size 103x24 -- RenderText {#text} at (0,0) size 103x24 -- text run at (0,0) width 103: "Test Button" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/date/date-input-rendering-basic-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/date/date-input-rendering-basic-expected.txt -deleted file mode 100644 -index 281158451a5bb6b90319605a4471a8067589591b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/date/date-input-rendering-basic-expected.txt -+++ /dev/null -@@ -1,48 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (83,4) size 5x18 -- text run at (83,4) width 5: " " -- RenderText {#text} at (0,0) size 0x0 --layer at (10,10) size 79x23 clip at (12,12) size 75x19 -- RenderFlexibleBox {INPUT} at (2,2) size 80x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (13,13) size 73x17 -- RenderBlock {DIV} at (3,3) size 74x17 -- RenderBlock {DIV} at (1,1) size 72x15 -- RenderBlock {DIV} at (0,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "04" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (16,1) size 5x13 -- text run at (16,1) width 5: "/" -- RenderBlock {DIV} at (20,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "01" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (36,1) size 5x13 -- text run at (36,1) width 5: "/" -- RenderBlock {DIV} at (40,0) size 32x15 -- RenderText {#text} at (1,1) size 29x13 -- text run at (1,1) width 29: "1976" --layer at (97,10) size 79x23 clip at (99,12) size 75x19 -- RenderFlexibleBox {INPUT} at (89,2) size 80x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (100,13) size 73x17 -- RenderBlock {DIV} at (3,3) size 74x17 -- RenderBlock {DIV} at (1,1) size 72x15 -- RenderBlock {DIV} at (54,0) size 18x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "04" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (50,1) size 5x13 -- text run at (50,1) width 5 RTL: "/" -- RenderBlock {DIV} at (34,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "01" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (30,1) size 5x13 -- text run at (30,1) width 5 RTL: "/" -- RenderBlock {DIV} at (0,0) size 31x15 -- RenderText {#text} at (1,1) size 29x13 -- text run at (1,1) width 29: "1976" -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/input-appearance-spinbutton-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/input-appearance-spinbutton-expected.txt -deleted file mode 100644 -index b6d4350e69c0faf3de8a4837e55d50d5f3e3cc1c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/input-appearance-spinbutton-expected.txt -+++ /dev/null -@@ -1,207 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 245x18 -- text run at (0,0) width 245: "Test appearances of outer-spin-button." -- RenderBlock {DIV} at (0,34) size 784x0 -- RenderBlock {DIV} at (0,34) size 784x528 -- RenderTable {TABLE} at (0,0) size 503x528 -- RenderTableSection {TBODY} at (0,0) size 503x528 -- RenderTableRow {TR} at (0,2) size 503x524 -- RenderTableCell {TD} at (2,83) size 198x362 [r=0 c=0 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 196x32 -- RenderTextControl {INPUT} at (0,0) size 112x16 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (111,-3) size 1x18 -- RenderTextControl {INPUT} at (0,16) size 112x16 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 106x16 -- RenderBlock {DIV} at (0,2) size 93x11 -- RenderBlock {DIV} at (1,33) size 196x34 -- RenderTextControl {INPUT} at (0,0) size 124x17 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (123,-2) size 1x18 -- RenderTextControl {INPUT} at (0,17) size 124x17 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 118x15 -- RenderBlock {DIV} at (0,2) size 105x11 -- RenderBlock {DIV} at (1,67) size 196x36 -- RenderTextControl {INPUT} at (0,0) size 136x18 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (135,-1) size 1x18 -- RenderTextControl {INPUT} at (0,18) size 136x18 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 130x16 -- RenderBlock {DIV} at (0,1) size 117x13 -- RenderBlock {DIV} at (1,103) size 196x46 -- RenderTextControl {INPUT} at (2,2) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (150,2) size 1x18 -- RenderTextControl {INPUT} at (2,25) size 147x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 141x17 -- RenderBlock {DIV} at (0,1) size 128x14 -- RenderBlock {DIV} at (1,149) size 196x50 -- RenderTextControl {INPUT} at (2,2) size 159x21 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (162,3) size 1x18 -- RenderTextControl {INPUT} at (2,27) size 159x21 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 153x19 -- RenderBlock {DIV} at (0,1) size 140x16 -- RenderBlock {DIV} at (1,199) size 196x52 -- RenderTextControl {INPUT} at (2,2) size 170x22 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (173,4) size 1x18 -- RenderTextControl {INPUT} at (2,28) size 170x22 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 164x20 -- RenderBlock {DIV} at (0,1) size 149x17 -- RenderBlock {DIV} at (1,251) size 196x54 -- RenderTextControl {INPUT} at (2,2) size 181x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (184,5) size 1x18 -- RenderTextControl {INPUT} at (2,29) size 181x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,1) size 175x21 -- RenderBlock {DIV} at (0,2) size 160x17 -- RenderBlock {DIV} at (1,305) size 196x56 -- RenderTextControl {INPUT} at (2,2) size 192x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (195,6) size 1x18 -- RenderTextControl {INPUT} at (2,30) size 192x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 186x24 -- RenderBlock {DIV} at (0,2) size 171x19 -- RenderTableCell {TD} at (201,2) size 300x524 [r=0 c=1 rs=1 cs=1] -- RenderBlock {DIV} at (1,1) size 297x56 -- RenderTextControl {INPUT} at (2,2) size 203x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (206,6) size 1x18 -- RenderTextControl {INPUT} at (2,30) size 203x24 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 197x24 -- RenderBlock {DIV} at (0,3) size 182x18 -- RenderBlock {DIV} at (1,57) size 297x60 -- RenderTextControl {INPUT} at (2,2) size 214x26 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (217,7) size 1x18 -- RenderTextControl {INPUT} at (2,32) size 214x26 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 208x26 -- RenderBlock {DIV} at (0,2) size 193x21 -- RenderBlock {DIV} at (1,117) size 297x62 -- RenderTextControl {INPUT} at (2,2) size 226x27 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (229,8) size 1x18 -- RenderTextControl {INPUT} at (2,33) size 226x27 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 220x27 -- RenderBlock {DIV} at (0,3) size 201x21 -- RenderBlock {DIV} at (1,179) size 297x64 -- RenderTextControl {INPUT} at (2,2) size 237x28 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (240,9) size 1x18 -- RenderTextControl {INPUT} at (2,34) size 237x28 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 231x28 -- RenderBlock {DIV} at (0,3) size 212x22 -- RenderBlock {DIV} at (1,243) size 297x66 -- RenderTextControl {INPUT} at (2,2) size 257x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (260,10) size 1x18 -- RenderTextControl {INPUT} at (2,35) size 257x29 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 251x29 -- RenderBlock {DIV} at (0,3) size 232x23 -- RenderBlock {DIV} at (1,309) size 297x68 -- RenderTextControl {INPUT} at (2,2) size 269x30 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (272,11) size 1x18 -- RenderTextControl {INPUT} at (2,36) size 269x30 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 263x30 -- RenderBlock {DIV} at (0,3) size 244x24 -- RenderBlock {DIV} at (1,377) size 297x72 -- RenderTextControl {INPUT} at (2,2) size 281x32 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (284,12) size 1x18 -- RenderTextControl {INPUT} at (2,38) size 281x32 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 275x32 -- RenderBlock {DIV} at (0,3) size 256x26 -- RenderBlock {DIV} at (1,449) size 297x74 -- RenderTextControl {INPUT} at (2,2) size 293x33 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (296,13) size 1x18 -- RenderTextControl {INPUT} at (2,39) size 293x33 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 287x33 -- RenderBlock {DIV} at (0,3) size 268x27 --layer at (14,129) size 106x10 -- RenderBlock {DIV} at (3,3) size 106x10 --layer at (14,145) size 93x10 -- RenderBlock {DIV} at (0,0) size 93x10 --layer at (14,161) size 118x11 -- RenderBlock {DIV} at (3,3) size 118x11 --layer at (14,178) size 105x11 -- RenderBlock {DIV} at (0,0) size 105x11 --layer at (14,195) size 129x12 -- RenderBlock {DIV} at (3,3) size 130x12 --layer at (14,213) size 116x12 -- RenderBlock {DIV} at (0,0) size 117x12 --layer at (16,233) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 --layer at (16,256) size 128x13 -- RenderBlock {DIV} at (0,0) size 128x13 --layer at (16,279) size 152x15 -- RenderBlock {DIV} at (3,3) size 153x15 --layer at (16,304) size 139x15 -- RenderBlock {DIV} at (0,0) size 140x15 --layer at (16,329) size 163x16 -- RenderBlock {DIV} at (3,3) size 164x16 --layer at (16,355) size 148x16 -- RenderBlock {DIV} at (0,0) size 149x16 --layer at (16,381) size 174x17 -- RenderBlock {DIV} at (3,3) size 175x17 --layer at (16,408) size 159x17 -- RenderBlock {DIV} at (0,0) size 160x17 --layer at (16,435) size 185x18 -- RenderBlock {DIV} at (3,3) size 186x18 --layer at (16,463) size 170x18 -- RenderBlock {DIV} at (0,0) size 171x18 --layer at (215,50) size 196x18 -- RenderBlock {DIV} at (3,3) size 197x18 --layer at (215,78) size 181x18 -- RenderBlock {DIV} at (0,0) size 182x18 --layer at (215,106) size 207x20 -- RenderBlock {DIV} at (3,3) size 208x20 --layer at (215,136) size 192x20 -- RenderBlock {DIV} at (0,0) size 193x20 --layer at (215,166) size 219x21 -- RenderBlock {DIV} at (3,3) size 220x21 --layer at (215,197) size 200x21 -- RenderBlock {DIV} at (0,0) size 201x21 --layer at (215,228) size 231x22 -- RenderBlock {DIV} at (3,3) size 231x22 --layer at (215,260) size 212x22 -- RenderBlock {DIV} at (0,0) size 212x22 --layer at (215,292) size 251x23 -- RenderBlock {DIV} at (3,3) size 251x23 --layer at (215,325) size 232x23 -- RenderBlock {DIV} at (0,0) size 232x23 --layer at (215,358) size 263x24 -- RenderBlock {DIV} at (3,3) size 263x24 --layer at (215,392) size 244x24 -- RenderBlock {DIV} at (0,0) size 244x24 --layer at (215,426) size 275x26 -- RenderBlock {DIV} at (3,3) size 275x26 --layer at (215,462) size 256x26 -- RenderBlock {DIV} at (0,0) size 256x26 --layer at (215,498) size 287x27 -- RenderBlock {DIV} at (3,3) size 287x27 --layer at (215,535) size 268x27 -- RenderBlock {DIV} at (0,0) size 268x27 --layer at (107,143) size 13x15 -- RenderBlock (relative positioned) {DIV} at (92,0) size 14x15 --layer at (119,176) size 13x15 -- RenderBlock (relative positioned) {DIV} at (104,0) size 14x15 --layer at (130,212) size 13x15 -- RenderBlock (relative positioned) {DIV} at (116,0) size 14x15 --layer at (144,254) size 13x17 -- RenderBlock (relative positioned) {DIV} at (127,0) size 14x17 --layer at (155,303) size 13x18 -- RenderBlock (relative positioned) {DIV} at (139,0) size 14x18 --layer at (164,353) size 15x20 -- RenderBlock (relative positioned) {DIV} at (148,0) size 16x20 --layer at (175,406) size 15x21 -- RenderBlock (relative positioned) {DIV} at (159,0) size 16x21 --layer at (186,461) size 15x23 -- RenderBlock (relative positioned) {DIV} at (170,0) size 16x23 --layer at (397,75) size 15x24 -- RenderBlock (relative positioned) {DIV} at (181,0) size 16x24 --layer at (408,133) size 15x26 -- RenderBlock (relative positioned) {DIV} at (192,0) size 16x26 --layer at (415,194) size 19x27 -- RenderBlock (relative positioned) {DIV} at (200,0) size 20x27 --layer at (427,257) size 19x28 -- RenderBlock (relative positioned) {DIV} at (211,-1) size 20x30 --layer at (447,322) size 19x30 -- RenderBlock (relative positioned) {DIV} at (231,-1) size 20x31 --layer at (459,388) size 19x32 -- RenderBlock (relative positioned) {DIV} at (243,-1) size 20x32 --layer at (471,459) size 19x33 -- RenderBlock (relative positioned) {DIV} at (255,-1) size 20x34 --layer at (483,531) size 19x35 -- RenderBlock (relative positioned) {DIV} at (267,-1) size 20x35 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/input-button-sizes-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/input-button-sizes-expected.txt -deleted file mode 100644 -index 482f95eb0fe315eb4a955f1a9eb088a616c5f9d9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/input-button-sizes-expected.txt -+++ /dev/null -@@ -1,106 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderButton {INPUT} at (0,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (66,1) size 5x18 -- text run at (66,1) width 5: " " -- RenderButton {INPUT} at (70,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (137,1) size 4x18 -- text run at (137,1) width 4: " " -- RenderButton {INPUT} at (141,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (207,1) size 5x18 -- text run at (207,1) width 5: " " -- RenderButton {INPUT} at (211,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (278,1) size 4x18 -- text run at (278,1) width 4: " " -- RenderButton {INPUT} at (282,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (348,1) size 5x18 -- text run at (348,1) width 5: " " -- RenderButton {INPUT} at (352,4) size 67x15 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 51x11 -- RenderText at (0,0) size 51x11 -- text run at (0,0) width 51: "Test Button" -- RenderText {#text} at (419,1) size 4x18 -- text run at (419,1) width 4: " " -- RenderButton {INPUT} at (425,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (503,1) size 5x18 -- text run at (503,1) width 5: " " -- RenderButton {INPUT} at (509,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (587,1) size 5x18 -- text run at (587,1) width 5: " " -- RenderButton {INPUT} at (593,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (671,1) size 5x18 -- text run at (671,1) width 5: " " -- RenderButton {INPUT} at (677,2) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (755,1) size 5x18 -- text run at (755,1) width 5: " " -- RenderButton {INPUT} at (2,26) size 77x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 61x13 -- RenderText at (0,0) size 61x13 -- text run at (0,0) width 61: "Test Button" -- RenderText {#text} at (80,25) size 5x18 -- text run at (80,25) width 5: " " -- RenderButton {INPUT} at (86,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (173,25) size 5x18 -- text run at (173,25) width 5: " " -- RenderButton {INPUT} at (179,24) size 87x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (267,25) size 5x18 -- text run at (267,25) width 5: " " -- RenderButton {INPUT} at (273,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (360,25) size 5x18 -- text run at (360,25) width 5: " " -- RenderButton {INPUT} at (366,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (454,25) size 4x18 -- text run at (454,25) width 4: " " -- RenderButton {INPUT} at (460,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (547,25) size 5x18 -- text run at (547,25) width 5: " " -- RenderButton {INPUT} at (553,24) size 86x21 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 70x16 -- RenderText at (0,0) size 70x16 -- text run at (0,0) width 70: "Test Button" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/input-disabled-color-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/input-disabled-color-expected.txt -deleted file mode 100644 -index d4e5ebbbf4d98464726a706eaf8b330f2aa90a79..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/input-disabled-color-expected.txt -+++ /dev/null -@@ -1,190 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 521x18 -- text run at (0,0) width 521: "This tests that the text color changes appropriately when the text field is disabled." -- RenderBR {BR} at (520,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (149,20) size 5x18 -- text run at (149,20) width 5: " " -- RenderTextControl {INPUT} at (155,20) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderBR {BR} at (304,20) size 1x18 -- RenderTextControl {INPUT} at (2,43) size 146x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,43) size 5x18 -- text run at (149,43) width 5: " " -- RenderTextControl {INPUT} at (155,43) size 148x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,43) size 1x18 -- RenderTextControl {INPUT} at (2,66) size 146x19 [bgcolor=#0000FF] [border: (2px inset #000000)] -- RenderText {#text} at (149,66) size 5x18 -- text run at (149,66) width 5: " " -- RenderTextControl {INPUT} at (155,66) size 148x19 [bgcolor=#0000FF] [border: (2px inset #000000)] -- RenderBR {BR} at (304,66) size 1x18 -- RenderTextControl {INPUT} at (2,89) size 146x19 [color=#FF0000] [bgcolor=#0000FF] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,89) size 5x18 -- text run at (149,89) width 5: " " -- RenderTextControl {INPUT} at (155,89) size 148x19 [color=#FF0000] [bgcolor=#0000FF] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,89) size 1x18 -- RenderTextControl {INPUT} at (2,112) size 146x19 [bgcolor=#000000] [border: (2px inset #000000)] -- RenderText {#text} at (149,112) size 5x18 -- text run at (149,112) width 5: " " -- RenderTextControl {INPUT} at (155,112) size 148x19 [bgcolor=#000000] [border: (2px inset #000000)] -- RenderBR {BR} at (304,112) size 1x18 -- RenderTextControl {INPUT} at (2,135) size 146x19 [color=#FFFFFF] [bgcolor=#000000] [border: (2px inset #FFFFFF)] -- RenderText {#text} at (149,135) size 5x18 -- text run at (149,135) width 5: " " -- RenderTextControl {INPUT} at (155,135) size 148x19 [color=#FFFFFF] [bgcolor=#000000] [border: (2px inset #FFFFFF)] -- RenderBR {BR} at (304,135) size 1x18 -- RenderTextControl {INPUT} at (2,158) size 146x19 [bgcolor=#808080] [border: (2px inset #000000)] -- RenderText {#text} at (149,158) size 5x18 -- text run at (149,158) width 5: " " -- RenderTextControl {INPUT} at (155,158) size 148x19 [bgcolor=#808080] [border: (2px inset #000000)] -- RenderBR {BR} at (304,158) size 1x18 -- RenderTextControl {INPUT} at (2,181) size 146x19 [color=#FFFFFF] [bgcolor=#A9A9A9] [border: (2px inset #FFFFFF)] -- RenderText {#text} at (149,181) size 5x18 -- text run at (149,181) width 5: " " -- RenderTextControl {INPUT} at (155,181) size 148x19 [color=#FFFFFF] [bgcolor=#A9A9A9] [border: (2px inset #FFFFFF)] -- RenderBR {BR} at (304,181) size 1x18 -- RenderTextControl {INPUT} at (2,204) size 146x19 [color=#808080] [bgcolor=#000000] [border: (2px inset #808080)] -- RenderText {#text} at (149,204) size 5x18 -- text run at (149,204) width 5: " " -- RenderTextControl {INPUT} at (155,204) size 148x19 [color=#808080] [bgcolor=#000000] [border: (2px inset #808080)] -- RenderBR {BR} at (304,204) size 1x18 -- RenderTextControl {INPUT} at (2,227) size 146x19 [color=#FF0000] [bgcolor=#808080] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,227) size 5x18 -- text run at (149,227) width 5: " " -- RenderTextControl {INPUT} at (155,227) size 148x19 [color=#FF0000] [bgcolor=#808080] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,227) size 1x18 -- RenderTextControl {INPUT} at (2,250) size 146x19 [color=#808080] [bgcolor=#FF0000] [border: (2px inset #808080)] -- RenderText {#text} at (149,250) size 5x18 -- text run at (149,250) width 5: " " -- RenderTextControl {INPUT} at (155,250) size 148x19 [color=#808080] [bgcolor=#FF0000] [border: (2px inset #808080)] -- RenderBR {BR} at (304,250) size 1x18 -- RenderTextControl {INPUT} at (2,273) size 146x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,273) size 5x18 -- text run at (149,273) width 5: " " -- RenderTextControl {INPUT} at (155,273) size 148x19 [color=#FF0000] [bgcolor=#FFFFFF] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,273) size 1x18 -- RenderTextControl {INPUT} at (2,296) size 146x19 [color=#FF0000] [border: (2px inset #FF0000)] -- RenderText {#text} at (149,296) size 5x18 -- text run at (149,296) width 5: " " -- RenderTextControl {INPUT} at (155,296) size 148x19 [color=#FF0000] [border: (2px inset #FF0000)] -- RenderBR {BR} at (304,296) size 1x18 -- RenderTextControl {INPUT} at (2,319) size 146x19 [color=#ACACAC] [bgcolor=#F2F2F2] [border: (2px inset #ACACAC)] -- RenderText {#text} at (149,319) size 5x18 -- text run at (149,319) width 5: " " -- RenderTextControl {INPUT} at (155,319) size 148x19 [color=#ACACAC] [bgcolor=#F2F2F2] [border: (2px inset #ACACAC)] -- RenderBR {BR} at (304,319) size 1x18 --layer at (13,31) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,31) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,54) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,54) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,77) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,77) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,100) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,100) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,123) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,123) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,146) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#ABABAB] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,146) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,169) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#545454] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,169) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,192) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,192) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,215) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#2C2C2C] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,215) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,238) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,238) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,261) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 [color=#2C2C2C] -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,261) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,284) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,284) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,307) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,307) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" --layer at (13,330) size 140x13 scrollWidth 344 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 344x13 -- text run at (0,0) width 344: "The text in this disabled field should displayed as dimmed or grey" --layer at (167,330) size 141x13 scrollWidth 152 -- RenderBlock {DIV} at (3,3) size 141x13 -- RenderText {#text} at (0,0) size 151x13 -- text run at (0,0) width 151: "This text field is not disabled" -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/input-readonly-dimmed-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/input-readonly-dimmed-expected.txt -deleted file mode 100644 -index 66ecf7c1b280d608c4ea043b9ee50f9b0696ce50..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/input-readonly-dimmed-expected.txt -+++ /dev/null -@@ -1,14 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 461x18 -- text run at (0,0) width 461: "This tests that the border of a readonly text field should appear dimmed." -- RenderBR {BR} at (460,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (13,31) size 140x13 scrollWidth 160 -- RenderBlock {DIV} at (3,3) size 140x13 -- RenderText {#text} at (0,0) size 161x13 -- text run at (0,0) width 161: "This border should be dimmed" -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/input-text-word-wrap-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/input-text-word-wrap-expected.txt -deleted file mode 100644 -index 4d077ac7b01c9ff9e2ecbf0cc9093ea2f3332df2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/input-text-word-wrap-expected.txt -+++ /dev/null -@@ -1,20 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 117x18 -- text run at (0,0) width 117: "This tests that the " -- RenderInline {CODE} at (0,0) size 71x15 -- RenderText {#text} at (116,2) size 71x15 -- text run at (116,2) width 71: "word-wrap" -- RenderText {#text} at (186,0) size 309x18 -- text run at (186,0) width 309: " property is ignored for single-line text controls." -- RenderBlock (anonymous) at (0,34) size 784x33 -- RenderTextControl {INPUT} at (2,0) size 147x33 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (13,52) size 141x13 scrollWidth 256 -- RenderBlock {DIV} at (3,10) size 141x13 -- RenderText {#text} at (0,0) size 255x13 -- text run at (0,0) width 255: "This sentence should not wrap into the next line." -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/listbox-bidi-align-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/listbox-bidi-align-expected.txt -deleted file mode 100644 -index a8ecac1461a2efde62ba523174b6493f5bf7eba7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/listbox-bidi-align-expected.txt -+++ /dev/null -@@ -1,74 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x504 -- RenderBlock {HTML} at (0,0) size 800x504 -- RenderBody {BODY} at (8,8) size 784x488 -- RenderBlock (anonymous) at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 614x18 -- text run at (0,0) width 614: "This test verifies the visual alignment of items in a select element while changing text direction." -- RenderBR {BR} at (613,0) size 1x18 -- RenderText {#text} at (0,18) size 438x18 -- text run at (0,18) width 438: "All the items in the following select elements should be left-aligned." -- RenderTable {TABLE} at (0,36) size 658x132 -- RenderTableSection {TBODY} at (0,0) size 658x132 -- RenderTableRow {TR} at (0,2) size 658x63 -- RenderTableCell {TD} at (2,2) size 157x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 151x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (161,2) size 167x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 161x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (330,2) size 157x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 151x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (489,2) size 167x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 161x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableRow {TR} at (0,67) size 658x63 -- RenderTableCell {TD} at (2,67) size 157x63 [r=1 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 151x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (161,67) size 167x63 [r=1 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 161x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderBlock (anonymous) at (0,168) size 784x18 -- RenderText {#text} at (0,0) size 447x18 -- text run at (0,0) width 447: "All the items in the following select elements should be right-aligned." -- RenderTable {TABLE} at (0,186) size 652x132 -- RenderTableSection {TBODY} at (0,0) size 652x132 -- RenderTableRow {TR} at (0,2) size 652x63 -- RenderTableCell {TD} at (2,2) size 165x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 159x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (169,2) size 156x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 150x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (327,2) size 165x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 159x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (494,2) size 156x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 150x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableRow {TR} at (0,67) size 652x63 -- RenderTableCell {TD} at (2,67) size 165x63 [r=1 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 159x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (169,67) size 156x63 [r=1 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 150x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderBlock (anonymous) at (0,318) size 784x18 -- RenderText {#text} at (0,0) size 456x18 -- text run at (0,0) width 456: "All the items in the following select elements should be center-aligned." -- RenderTable {TABLE} at (0,336) size 690x67 -- RenderTableSection {TBODY} at (0,0) size 690x67 -- RenderTableRow {TR} at (0,2) size 690x63 -- RenderTableCell {TD} at (2,2) size 174x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 168x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (178,2) size 166x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 160x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (346,2) size 174x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 168x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (522,2) size 166x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 160x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderBlock (anonymous) at (0,403) size 784x18 -- RenderText {#text} at (0,0) size 296x18 -- text run at (0,0) width 296: "The following tables check mixed alignments." -- RenderTable {TABLE} at (0,421) size 732x67 -- RenderTableSection {TBODY} at (0,0) size 732x67 -- RenderTableRow {TR} at (0,2) size 732x63 -- RenderTableCell {TD} at (2,2) size 169x63 [r=0 c=0 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 163x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (173,2) size 169x63 [r=0 c=1 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 163x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (344,2) size 192x63 [r=0 c=2 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 186x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderTableCell {TD} at (538,2) size 192x63 [r=0 c=3 rs=1 cs=1] -- RenderListBox {SELECT} at (3,3) size 186x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/listbox-width-change-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/listbox-width-change-expected.txt -deleted file mode 100644 -index c762ed433c8cd8d70f8e7ff0301badd869ad3ac9..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/listbox-width-change-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 661x18 -- text run at (0,0) width 661: "This tests that when a list box's options get updated, the list box will recalculate its width, and relayout." -- RenderBR {BR} at (660,0) size 1x18 -- RenderListBox {SELECT} at (2,20) size 189x57 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/option-text-clip-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/option-text-clip-expected.txt -deleted file mode 100644 -index f3d99b81ebde07d5772f2be7a8425961dcec9b86..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/option-text-clip-expected.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 713x18 -- text run at (0,0) width 713: "This tests that the option text is clipped properly, and doesn't spill over into the arrow part of the popup control." -- RenderBR {BR} at (712,0) size 1x18 -- RenderMenuList {SELECT} at (0,20) size 150x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 150x18 -- RenderText at (8,2) size 131x13 -- text run at (8,2) width 131: "12345 6789 ABCD EFGH" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/plaintext-mode-2-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/plaintext-mode-2-expected.txt -deleted file mode 100644 -index 243c7ce1ba5a2f5a2e798d0f7eb856e4c0a81def..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/plaintext-mode-2-expected.txt -+++ /dev/null -@@ -1,41 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock (anonymous) at (0,0) size 784x23 -- RenderTextControl {INPUT} at (0,2) size 600x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (600,2) size 4x18 -- text run at (600,2) width 4: " " -- RenderBR {BR} at (604,2) size 0x18 -- RenderBlock {DIV} at (0,23) size 784x18 -- RenderText {#text} at (0,0) size 33x18 -- text run at (0,0) width 33: "This " -- RenderInline {B} at (0,0) size 72x18 -- RenderText {#text} at (32,0) size 45x18 -- text run at (32,0) width 45: "styled " -- RenderInline {I} at (0,0) size 28x18 -- RenderText {#text} at (76,0) size 28x18 -- text run at (76,0) width 28: "text" -- RenderText {#text} at (103,0) size 36x18 -- text run at (103,0) width 36: ", and " -- RenderInline {A} at (0,0) size 26x18 [color=#0000EE] -- RenderText {#text} at (138,0) size 26x18 -- text run at (138,0) width 26: "link" -- RenderText {#text} at (163,0) size 413x18 -- text run at (163,0) width 211: " will be pasted into the textfield. " -- text run at (373,0) width 203: "All richness should be stripped." -- RenderBlock {OL} at (0,57) size 784x36 -- RenderListItem {LI} at (40,0) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "1" -- RenderText {#text} at (0,0) size 332x18 -- text run at (0,0) width 332: "Success: document.execCommand(\"Copy\") == true" -- RenderListItem {LI} at (40,18) size 744x18 -- RenderListMarker at (-20,0) size 16x18: "2" -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Success: document.execCommand(\"Paste\") == true" --layer at (11,13) size 594x13 -- RenderBlock {DIV} at (3,3) size 594x13 -- RenderText {#text} at (0,0) size 465x13 -- text run at (0,0) width 465: "This styled text, and link will be pasted into the textfield. All richness should be stripped." --caret: position 94 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 0 {INPUT} of body -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/search-rtl-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/search-rtl-expected.txt -deleted file mode 100644 -index 183ae8a007ab1bb0318ed9172a7559e5d648726a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/search-rtl-expected.txt -+++ /dev/null -@@ -1,58 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 54x18 -- text run at (0,0) width 54: "Test for " -- RenderInline {I} at (0,0) size 702x18 -- RenderInline {A} at (0,0) size 304x18 [color=#0000EE] -- RenderText {#text} at (53,0) size 304x18 -- text run at (53,0) width 304: "http://bugs.webkit.org/show_bug.cgi?id=11916" -- RenderText {#text} at (356,0) size 399x18 -- text run at (356,0) width 5: " " -- text run at (360,0) width 395: "REGRESSION (SearchField): RTL search fields are mixed up" -- RenderText {#text} at (754,0) size 5x18 -- text run at (754,0) width 5: "." -- RenderBlock {P} at (0,34) size 784x69 -- RenderTextControl {INPUT} at (2,2) size 187x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 181x19 -- RenderBlock {DIV} at (158,0) size 23x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderBR {BR} at (190,2) size 1x18 -- RenderTextControl {INPUT} at (2,25) size 257x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 251x19 -- RenderBlock {DIV} at (228,0) size 23x19 -- RenderBlock {DIV} at (19,3) size 210x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderBR {BR} at (260,25) size 1x18 -- RenderTextControl {INPUT} at (2,48) size 187x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 181x19 -- RenderBlock {DIV} at (158,0) size 23x19 -- RenderBlock {DIV} at (19,3) size 140x13 -- RenderBlock {DIV} at (0,0) size 19x19 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,119) size 784x18 -- RenderText {#text} at (0,0) size 37x18 -- text run at (0,0) width 37: "PASS" --layer at (32,47) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 -- RenderText {#text} at (7,0) size 133x13 -- text run at (7,0) width 22 RTL: " \x{5D5}\x{5D6}\x{5D4}\x{5D5}" -- text run at (28,0) width 20: "she" -- text run at (47,0) width 44 RTL: " \x{5D5}\x{5D4}\x{5D9}\x{5D0} \x{5D6}\x{5D4} " -- text run at (90,0) width 14: "he" -- text run at (103,0) width 37 RTL: "\x{5D4}\x{5D5}\x{5D0} \x{5D6}\x{5D4} " --layer at (32,70) size 210x13 -- RenderBlock {DIV} at (0,0) size 210x13 -- RenderText {#text} at (76,0) size 134x13 -- text run at (76,0) width 23 RTL: " \x{5D5}\x{5D6}\x{5D4}\x{5D5}" -- text run at (98,0) width 20: "she" -- text run at (117,0) width 44 RTL: " \x{5D5}\x{5D4}\x{5D9}\x{5D0} \x{5D6}\x{5D4} " -- text run at (160,0) width 14: "he" -- text run at (173,0) width 37 RTL: "\x{5D4}\x{5D5}\x{5D0} \x{5D6}\x{5D4} " --layer at (32,93) size 140x13 -- RenderBlock {DIV} at (0,0) size 140x13 --caret: position 0 of child 0 {DIV} of child 1 {DIV} of child 0 {DIV} of {#document-fragment} of child 7 {INPUT} of child 3 {P} of body -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/search/search-size-with-decorations-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/search/search-size-with-decorations-expected.txt -deleted file mode 100644 -index 7adee50489e8c4b4c47c31582cd5acb53311b23c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/search/search-size-with-decorations-expected.txt -+++ /dev/null -@@ -1,69 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x177 -- RenderBlock {HTML} at (0,0) size 800x177 -- RenderBody {BODY} at (8,8) size 784x161 -- RenderTextControl {INPUT} at (2,2) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderBR {BR} at (177,2) size 1x18 -- RenderTextControl {INPUT} at (2,25) size 174x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 168x19 -- RenderBlock {DIV} at (0,0) size 8x19 -- RenderBlock {DIV} at (8,3) size 141x13 -- RenderBlock {DIV} at (148,0) size 20x19 -- RenderBR {BR} at (177,25) size 1x18 -- RenderTextControl {INPUT} at (2,48) size 183x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 177x19 -- RenderBlock {DIV} at (0,0) size 17x19 -- RenderBlock {DIV} at (17,3) size 141x13 -- RenderBlock {DIV} at (157,0) size 20x19 -- RenderBR {BR} at (186,48) size 1x18 -- RenderTextControl {INPUT} at (2,71) size 183x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 177x19 -- RenderBlock {DIV} at (0,0) size 17x19 -- RenderBlock {DIV} at (17,3) size 141x13 -- RenderBlock {DIV} at (157,0) size 20x19 -- RenderBR {BR} at (186,71) size 1x18 -- RenderTextControl {INPUT} at (2,94) size 188x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 182x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 141x13 -- RenderBlock {DIV} at (162,0) size 20x19 -- RenderBR {BR} at (191,94) size 1x18 -- RenderTextControl {INPUT} at (2,117) size 188x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 182x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 141x13 -- RenderBlock {DIV} at (162,0) size 20x19 -- RenderBR {BR} at (191,117) size 1x18 -- RenderTextControl {INPUT} at (2,140) size 328x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderFlexibleBox {DIV} at (3,0) size 322x19 -- RenderBlock {DIV} at (0,0) size 22x19 -- RenderBlock {DIV} at (22,3) size 281x13 -- RenderBlock {DIV} at (302,0) size 20x19 -- RenderText {#text} at (0,0) size 0x0 --layer at (21,13) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (21,36) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 135x13 -- text run at (0,0) width 135: "12345678901234567890" --layer at (30,59) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (30,82) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 135x13 -- text run at (0,0) width 135: "12345678901234567890" --layer at (35,105) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 --layer at (35,128) size 141x13 -- RenderBlock {DIV} at (0,0) size 141x13 -- RenderText {#text} at (0,0) size 135x13 -- text run at (0,0) width 135: "12345678901234567890" --layer at (35,151) size 281x13 -- RenderBlock {DIV} at (0,0) size 281x13 -- RenderText {#text} at (0,0) size 270x13 -- text run at (0,0) width 270: "1234567890123456789012345678901234567890" -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/select-change-listbox-to-popup-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/select-change-listbox-to-popup-expected.txt -deleted file mode 100644 -index eeee40faad064d0f888b4a853402afb0d67251e4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/select-change-listbox-to-popup-expected.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 450x18 -- text run at (0,0) width 450: "This tests that you can dynamically change a list box to a popup menu" -- RenderBR {BR} at (449,0) size 1x18 -- RenderMenuList {SELECT} at (2,20) size 218x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 218x18 -- RenderText at (8,2) size 187x13 -- text run at (8,2) width 187: "This should turn into a popup menu" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/select-change-popup-to-listbox-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/select-change-popup-to-listbox-expected.txt -deleted file mode 100644 -index 440a1d3b31ebeca3eebd4013fd0c0ccae75205e1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/select-change-popup-to-listbox-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 454x18 -- text run at (0,0) width 454: "This tests that you can dynamically change a popup menu to a list box." -- RenderBR {BR} at (453,0) size 1x18 -- RenderListBox {SELECT} at (2,20) size 176x71 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/select-selected-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/select-selected-expected.txt -deleted file mode 100644 -index bb0ac0eabcc6ddff98cd8f5e1f39c74cf48d0277..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/select-selected-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderMenuList {SELECT} at (2,2) size 259x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 259x18 -- RenderText at (8,2) size 164x13 -- text run at (8,2) width 164: "should see this option selected" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/select/optgroup-rendering-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/select/optgroup-rendering-expected.txt -deleted file mode 100644 -index a6f3033c365ef98019cbb4ee337bed1b3aa8a90f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/select/optgroup-rendering-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x323 -- RenderBlock {HTML} at (0,0) size 800x323 -- RenderBody {BODY} at (8,8) size 784x307 -- RenderBlock {FORM} at (0,0) size 784x307 -- RenderListBox {SELECT} at (2,2) size 70x281 [bgcolor=#FFFFFF] [border: (1px inset #808080)] -- RenderText {#text} at (74,264) size 4x18 -- text run at (74,264) width 4: " " -- RenderBR {BR} at (78,264) size 0x18 -- RenderMenuList {SELECT} at (2,287) size 75x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 75x18 -- RenderText at (8,2) size 31x13 -- text run at (8,2) width 31: "Three" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/textfield-outline-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/textfield-outline-expected.txt -deleted file mode 100644 -index a513235df3fb993879d4117400449bfca42940f2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/textfield-outline-expected.txt -+++ /dev/null -@@ -1,15 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 563x18 -- text run at (0,0) width 563: "This tests that a negative outline-offset won't get in the way of a cursor in a text control." -- RenderBR {BR} at (562,0) size 1x18 -- RenderTextControl {INPUT} at (2,20) size 255x27 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderText {#text} at (0,0) size 0x0 --layer at (12,30) size 251x23 -- RenderBlock {DIV} at (2,2) size 251x23 -- RenderText {#text} at (0,0) size 33x23 -- text run at (0,0) width 33: "abc" --caret: position 3 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 3 {INPUT} of body -diff --git a/LayoutTests/platform/mac-mojave/fast/forms/time/time-input-rendering-basic-expected.txt b/LayoutTests/platform/mac-mojave/fast/forms/time/time-input-rendering-basic-expected.txt -deleted file mode 100644 -index f9f1bfafa4a9f8d0637c5f9b68426ba2e7bde0d2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/forms/time/time-input-rendering-basic-expected.txt -+++ /dev/null -@@ -1,48 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (68,4) size 5x18 -- text run at (68,4) width 5: " " -- RenderText {#text} at (0,0) size 0x0 --layer at (10,10) size 64x23 clip at (12,12) size 60x19 -- RenderFlexibleBox {INPUT} at (2,2) size 65x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (13,13) size 58x17 -- RenderBlock {DIV} at (3,3) size 59x17 -- RenderBlock {DIV} at (1,1) size 57x15 -- RenderBlock {DIV} at (0,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "09" -- RenderInline {DIV} at (0,0) size 4x13 -- RenderText {#text} at (16,1) size 4x13 -- text run at (16,1) width 4: ":" -- RenderBlock {DIV} at (19,0) size 18x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "41" -- RenderInline {DIV} at (0,0) size 4x13 -- RenderText {#text} at (35,1) size 4x13 -- text run at (35,1) width 4: " " -- RenderBlock {DIV} at (37,0) size 20x15 -- RenderText {#text} at (1,1) size 18x13 -- text run at (1,1) width 18: "AM" --layer at (82,10) size 65x23 clip at (84,12) size 61x19 -- RenderFlexibleBox {INPUT} at (74,2) size 65x23 [bgcolor=#FFFFFF] [border: (2px inset #000000)] --layer at (85,13) size 58x17 -- RenderBlock {DIV} at (3,3) size 59x17 -- RenderBlock {DIV} at (1,1) size 57x15 -- RenderBlock {DIV} at (40,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "09" -- RenderInline {DIV} at (0,0) size 5x13 -- RenderText {#text} at (36,1) size 5x13 -- text run at (36,1) width 5 RTL: ":" -- RenderBlock {DIV} at (20,0) size 17x15 -- RenderText {#text} at (1,1) size 15x13 -- text run at (1,1) width 15: "41" -- RenderInline {DIV} at (0,0) size 4x13 -- RenderText {#text} at (18,1) size 4x13 -- text run at (18,1) width 4 RTL: " " -- RenderBlock {DIV} at (0,0) size 20x15 -- RenderText {#text} at (1,1) size 18x13 -- text run at (1,1) width 18: "AM" -diff --git a/LayoutTests/platform/mac-mojave/fast/images/image-controls-basic-expected.png b/LayoutTests/platform/mac-mojave/fast/images/image-controls-basic-expected.png -deleted file mode 100644 -index bfca92c27333de61644a8c571b683fe158e5e36e..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/images/image-controls-basic-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/indic-expected.txt b/LayoutTests/platform/mac-mojave/fast/indic-expected.txt -deleted file mode 100644 -index f5957ab56e15aa12f8de628de7d7b09458af4333..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/indic-expected.txt -+++ /dev/null -@@ -1,11 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 636x18 -- text run at (0,0) width 636: "This page renders some indic text and makes sure that the text metrics match the expected metrics. " -- RenderBR {BR} at (635,14) size 1x0 -- RenderText {#text} at (0,22) size 753x43 -- text run at (0,22) width 753: "\x{AA0}\x{AB3}\x{AA8}\x{ABE} \x{A87}\x{AB0}\x{ABE}\x{A95}\x{AC0} \x{AAA}\x{ACD}\x{AB0}\x{AA6}\x{AC7}\x{AB6}\x{ACB}\x{AA8}\x{AC7} \x{A87}\x{AB8}\x{ACD}\x{AB2}\x{ABE}\x{AAE}\x{ABF}\x{A95} \x{AB0}\x{ABE}\x{AB7}\x{ACD}\x{A9F}\x{ACD}\x{AB0} \x{A9C}\x{ABE}\x{AB9}\x{AC7}\x{AB0} \x{A95}\x{AB0}\x{ACD}\x{AAF}\x{AC1}\x{A82} \x{A9B}\x{AC7} \x{A85}\x{AA8}\x{AC7} \x{AAA}\x{ACB}\x{AA4}\x{ABE}\x{AA8}\x{ACB} \x{AB5}\x{ACD}\x{AAF}\x{ABE}\x{AAA} \x{AB5}\x{AA7}\x{ABE}\x{AB0}\x{AB5}\x{ABE} \x{AA4}\x{AC7}\x{AAE}\x{AA8}\x{ABE} \x{AB5}\x{AA1}\x{ABE} \x{AAA}\x{ACD}\x{AB0}\x{AA4}\x{ACD}\x{AAF}\x{AC7} \x{AB5}\x{AAB}\x{ABE}\x{AA6}\x{ABE}\x{AB0}\x{AC0}\x{AA8}\x{AC1}\x{A82} \x{AB5}\x{ABF}\x{AB6}\x{ACD}\x{AB5}\x{AAD}\x{AB0}\x{AA8}\x{ABE} \x{AAE}\x{AC1}\x{AB8}\x{ACD}\x{AB2}\x{ABF}\x{AAE}\x{ACB}\x{AA8}\x{AC7}" -- text run at (0,47) width 325: "\x{A86}\x{AB9}\x{ACD}\x{AB5}\x{ABE}\x{AA8} \x{A95}\x{AB0}\x{ACD}\x{AAF}\x{AC1}\x{A82} \x{A9B}\x{AC7}. \x{A87}\x{AB8}\x{ACD}\x{AB2}\x{ABE}\x{AAE}\x{ABF}\x{A95} \x{AB8}\x{ACD}\x{A9F}\x{AC7}\x{A9F} \x{A93}\x{AAB} \x{A87}\x{AB0}\x{ABE}\x{A95} \x{A8F}\x{AA8}\x{ACD}\x{AA1} \x{AB8}\x{ABF}\x{AB0}\x{ABF}\x{AAF}\x{ABE}" -diff --git a/LayoutTests/platform/mac-mojave/fast/invalid/003-expected.txt b/LayoutTests/platform/mac-mojave/fast/invalid/003-expected.txt -deleted file mode 100644 -index 1419bd697d862030bcf60b84c9590e6df7b22886..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/invalid/003-expected.txt -+++ /dev/null -@@ -1,58 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock (anonymous) at (0,0) size 784x18 -- RenderInline {FONT} at (0,0) size 91x18 [color=#FF0000] -- RenderInline {I} at (0,0) size 91x18 -- RenderText {#text} at (0,0) size 91x18 -- text run at (0,0) width 91: "Italic and Red" -- RenderInline {I} at (0,0) size 1x18 -- RenderBlock (anonymous) at (0,34) size 784x18 -- RenderBlock {P} at (0,0) size 784x18 -- RenderInline {FONT} at (0,0) size 95x18 [color=#FF0000] -- RenderText {#text} at (0,0) size 95x18 -- text run at (0,0) width 95: "Italic and Red " -- RenderText {#text} at (94,0) size 68x18 -- text run at (94,0) width 68: "Just italic." -- RenderBlock (anonymous) at (0,68) size 784x18 -- RenderInline {I} at (0,0) size 69x18 -- RenderText {#text} at (0,0) size 69x18 -- text run at (0,0) width 69: "Italic only." -- RenderText {#text} at (68,0) size 38x18 -- text run at (68,0) width 38: " Plain" -- RenderBlock {P} at (0,102) size 784x18 -- RenderText {#text} at (0,0) size 128x18 -- text run at (0,0) width 128: "I should not be red. " -- RenderInline {FONT} at (0,0) size 126x18 [color=#FF0000] -- RenderText {#text} at (127,0) size 35x18 -- text run at (127,0) width 35: "Red. " -- RenderInline {I} at (0,0) size 92x18 -- RenderText {#text} at (161,0) size 92x18 -- text run at (161,0) width 92: "Italic and red." -- RenderBlock (anonymous) at (0,136) size 784x0 -- RenderInline {FONT} at (0,0) size 0x0 [color=#FF0000] -- RenderInline {I} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,136) size 784x18 -- RenderInline {FONT} at (0,0) size 125x18 [color=#FF0000] -- RenderInline {I} at (0,0) size 95x18 -- RenderText {#text} at (0,0) size 95x18 -- text run at (0,0) width 95: "Italic and red. " -- RenderText {#text} at (94,0) size 31x18 -- text run at (94,0) width 31: "Red." -- RenderText {#text} at (124,0) size 129x18 -- text run at (124,0) width 129: " I should not be red." -- RenderBlock (anonymous) at (0,170) size 784x18 -- RenderInline {B} at (0,0) size 147x18 -- RenderText {#text} at (0,0) size 37x18 -- text run at (0,0) width 37: "Bold " -- RenderInline {I} at (0,0) size 111x18 -- RenderText {#text} at (36,0) size 111x18 -- text run at (36,0) width 111: "Bold and italic" -- RenderInline {I} at (0,0) size 77x18 -- RenderText {#text} at (146,0) size 77x18 -- text run at (146,0) width 77: " Only Italic " -- RenderText {#text} at (222,0) size 34x18 -- text run at (222,0) width 34: "Plain" -diff --git a/LayoutTests/platform/mac-mojave/fast/invalid/004-expected.txt b/LayoutTests/platform/mac-mojave/fast/invalid/004-expected.txt -deleted file mode 100644 -index a7283e2482f991957ad86250f8d7927b03a18c80..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/invalid/004-expected.txt -+++ /dev/null -@@ -1,28 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x55 -- RenderInline {FONT} at (0,0) size 304x55 -- RenderText {#text} at (0,0) size 304x55 -- text run at (0,0) width 304: "First paragraph." -- RenderBlock (anonymous) at (0,71) size 784x0 -- RenderInline {FONT} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock (anonymous) at (0,103) size 784x55 -- RenderBlock {P} at (0,0) size 784x55 -- RenderText {#text} at (0,0) size 358x55 -- text run at (0,0) width 358: "Second paragraph." -- RenderBlock (anonymous) at (0,206) size 784x0 -- RenderInline {FONT} at (0,0) size 0x0 -- RenderText {#text} at (0,0) size 0x0 -- RenderInline {B} at (0,0) size 0x0 -- RenderBlock {P} at (0,206) size 784x18 -- RenderInline {B} at (0,0) size 111x18 -- RenderInline {I} at (0,0) size 111x18 -- RenderText {#text} at (0,0) size 111x18 -- text run at (0,0) width 111: "Bold and Italic" -- RenderInline {I} at (0,0) size 39x18 -- RenderText {#text} at (110,0) size 39x18 -- text run at (110,0) width 39: " Italic" -diff --git a/LayoutTests/platform/mac-mojave/fast/invalid/nestedh3s-expected.txt b/LayoutTests/platform/mac-mojave/fast/invalid/nestedh3s-expected.txt -deleted file mode 100644 -index c343b9fcfe6b2204dc5988cceea80458be2a298d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/invalid/nestedh3s-expected.txt -+++ /dev/null -@@ -1,36 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x574 -- RenderBlock (anonymous) at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 574x18 -- text run at (0,0) width 574: "In this sample, the H3s should be nested. This matches Firefox, IE, and the HTML5 spec." -- RenderBlock {H3} at (0,36) size 784x303 [border: (2px solid #FF0000)] -- RenderBlock (anonymous) at (4,4) size 776x22 -- RenderInline {I} at (0,0) size 35x22 -- RenderText {#text} at (0,0) size 35x22 -- text run at (0,0) width 35: "One" -- RenderBlock (anonymous) at (4,47) size 776x230 -- RenderBlock {H3} at (0,0) size 776x229 [border: (2px solid #FF0000)] -- RenderBlock (anonymous) at (4,4) size 768x26 -- RenderInline {I} at (0,0) size 40x26 -- RenderText {#text} at (0,0) size 40x26 -- text run at (0,0) width 40: "Two" -- RenderBlock (anonymous) at (4,55) size 768x144 -- RenderBlock {H3} at (0,0) size 768x143 [border: (2px solid #FF0000)] -- RenderBlock (anonymous) at (4,4) size 760x31 -- RenderInline {I} at (0,0) size 65x31 -- RenderText {#text} at (0,0) size 65x31 -- text run at (0,0) width 65: "Three" -- RenderBlock (anonymous) at (4,64) size 760x45 -- RenderBlock {H3} at (0,0) size 760x44 [border: (2px solid #FF0000)] -- RenderInline {I} at (0,0) size 64x36 -- RenderText {#text} at (4,4) size 64x36 -- text run at (4,4) width 64: "Four" -- RenderBlock (anonymous) at (4,138) size 760x0 -- RenderInline {I} at (0,0) size 0x0 -- RenderBlock (anonymous) at (4,224) size 768x0 -- RenderInline {I} at (0,0) size 0x0 -- RenderBlock (anonymous) at (4,297) size 776x0 -- RenderInline {I} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/overflow/007-expected.png b/LayoutTests/platform/mac-mojave/fast/overflow/007-expected.png -deleted file mode 100644 -index 9669be531fa88ea3627222c0d646ca144c5012e6..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/overflow/007-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/overflow/007-expected.txt b/LayoutTests/platform/mac-mojave/fast/overflow/007-expected.txt -deleted file mode 100644 -index c76725c4dcd2451e5806ae89253ad967d7f724b6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/overflow/007-expected.txt -+++ /dev/null -@@ -1,84 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x388 -- RenderBlock {HTML} at (0,0) size 800x388 -- RenderBody {BODY} at (32,32) size 736x324 [bgcolor=#CCCCCC] --layer at (143,32) size 514x146 clip at (144,33) size 497x144 scrollHeight 313 -- RenderBlock {DIV} at (111,0) size 514x146 [bgcolor=#FFFFFF] [border: (1px solid #999999)] -- RenderBlock {P} at (17,17) size 465x72 -- RenderText {#text} at (0,0) size 225x18 -- text run at (0,0) width 225: "This page is to test the behavior of " -- RenderInline {CODE} at (0,0) size 134x15 -- RenderText {#text} at (224,2) size 134x15 -- text run at (224,2) width 134: "position:absolute" -- RenderText {#text} at (357,0) size 452x36 -- text run at (357,0) width 95: " content which" -- text run at (0,18) width 294: "is a child of an overflowed parent object with " -- RenderInline {CODE} at (0,0) size 103x15 -- RenderText {#text} at (293,20) size 103x15 -- text run at (293,20) width 103: "overflow:auto" -- RenderText {#text} at (395,18) size 432x36 -- text run at (395,18) width 37: ", both" -- text run at (0,36) width 176: "when the parent element is " -- RenderInline {CODE} at (0,0) size 118x15 -- RenderText {#text} at (175,38) size 118x15 -- text run at (175,38) width 118: "position:static" -- RenderText {#text} at (292,36) size 95x18 -- text run at (292,36) width 95: " (top case) and" -- RenderInline {CODE} at (0,0) size 133x15 -- RenderText {#text} at (0,56) size 133x15 -- text run at (0,56) width 133: "position:relative" -- RenderText {#text} at (132,54) size 97x18 -- text run at (132,54) width 97: " (bottom case)." -- RenderBlock {P} at (17,105) size 465x180 [color=#999999] -- RenderText {#text} at (0,0) size 461x180 -- text run at (0,0) width 448: "Following extra content exists to ensure that the parent box overflows properly. Sed ut" -- text run at (0,15) width 417: "perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque" -- text run at (0,30) width 435: "laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi" -- text run at (0,45) width 461: "architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas" -- text run at (0,60) width 446: "sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione" -- text run at (0,75) width 456: "voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit" -- text run at (0,90) width 451: "amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut" -- text run at (0,105) width 457: "labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis" -- text run at (0,120) width 418: "nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea" -- text run at (0,135) width 452: "commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit" -- text run at (0,150) width 447: "esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas" -- text run at (0,165) width 80: "nulla pariatur?" --layer at (0,0) size 40x34 -- RenderBlock (positioned) {P} at (0,0) size 41x34 [bgcolor=#FF0000] -- RenderText {#text} at (8,8) size 25x18 -- text run at (8,8) width 25: "hi 1" --layer at (143,210) size 514x146 clip at (144,211) size 497x144 scrollHeight 365 -- RenderBlock (relative positioned) {DIV} at (111,178) size 514x146 [bgcolor=#FFFFFF] [border: (1px solid #999999)] -- RenderBlock {P} at (17,17) size 465x36 -- RenderText {#text} at (0,0) size 459x36 -- text run at (0,0) width 459: "Safari v1.2.2 incorrectly scrolls the 'hi 1' div when its parent is scrolled." -- text run at (0,18) width 350: "If you resize the page even a little, this bug fixes itself." -- RenderBlock {P} at (17,69) size 465x72 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Safari v1.2.2 also (really odd) causes the entire second div to be" -- RenderInline {CODE} at (0,0) size 86x15 -- RenderText {#text} at (0,20) size 86x15 -- text run at (0,20) width 86: "opacity:0.5" -- RenderText {#text} at (85,18) size 450x54 -- text run at (85,18) width 358: ", despite the fact that this property is only applied to the" -- text run at (0,36) width 450: "child item. This problem fixes itself if you resize the window and then" -- text run at (0,54) width 87: "scroll the div." -- RenderBlock {P} at (17,157) size 465x180 [color=#999999] -- RenderText {#text} at (0,0) size 461x180 -- text run at (0,0) width 448: "Following extra content exists to ensure that the parent box overflows properly. Sed ut" -- text run at (0,15) width 417: "perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque" -- text run at (0,30) width 435: "laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi" -- text run at (0,45) width 461: "architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas" -- text run at (0,60) width 446: "sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione" -- text run at (0,75) width 456: "voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit" -- text run at (0,90) width 451: "amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut" -- text run at (0,105) width 457: "labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis" -- text run at (0,120) width 418: "nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea" -- text run at (0,135) width 452: "commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit" -- text run at (0,150) width 447: "esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas" -- text run at (0,165) width 80: "nulla pariatur?" --layer at (144,211) size 40x34 -- RenderBlock (positioned) {P} at (1,1) size 41x34 [bgcolor=#FF0000] -- RenderText {#text} at (8,8) size 25x18 -- text run at (8,8) width 25: "hi 2" -diff --git a/LayoutTests/platform/mac-mojave/fast/parser/document-write-option-expected.txt b/LayoutTests/platform/mac-mojave/fast/parser/document-write-option-expected.txt -deleted file mode 100644 -index cac7ff8eff08a7557f5460db734030f1ce3ffc73..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/parser/document-write-option-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderMenuList {SELECT} at (2,2) size 317x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 317x18 -- RenderText at (8,2) size 286x13 -- text run at (8,2) width 286: "This is a very long string so it makes the select bigger." -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/sandbox/mac/sandbox-mach-lookup-expected.txt b/LayoutTests/platform/mac-mojave/fast/sandbox/mac/sandbox-mach-lookup-expected.txt -deleted file mode 100644 -index c6d8adc976cd5b361b2e2dd95326c9509575aa4b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/sandbox/mac/sandbox-mach-lookup-expected.txt -+++ /dev/null -@@ -1,19 +0,0 @@ --Regression tests for mach lookup sandbox changes on macOS -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --FAIL internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.cfprefsd.agent") should be false. Was true. --FAIL internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.cfprefsd.daemon") should be false. Was true. --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.nehelper") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.nesessionmanager") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.nesessionmanager.content-filter") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.system.logger") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.awdd") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.cookied") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.audio.SystemSoundServer-OSX") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.iconservices") is false --PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.iconservices.store") is false --PASS internals.hasSandboxMachLookupAccessToXPCServiceName("com.apple.WebKit.WebContent", "com.apple.PerformanceAnalysis.animationperfd") is false --PASS internals.hasSandboxMachLookupAccessToXPCServiceName("com.apple.WebKit.WebContent", "com.apple.hiservices-xpcservice") is false -- -diff --git a/LayoutTests/platform/mac-mojave/fast/selectors/018-expected.txt b/LayoutTests/platform/mac-mojave/fast/selectors/018-expected.txt -deleted file mode 100644 -index 5e09a9e447b212a146cda7045729de5b14b9b959..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/selectors/018-expected.txt -+++ /dev/null -@@ -1,119 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x299 -- RenderBlock {HTML} at (0,0) size 800x299 -- RenderBody {BODY} at (8,16) size 784x275 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 687x18 -- text run at (0,0) width 429: "The background color of this paragraph should turn to green when " -- text run at (428,0) width 259: "the mouse pointer hovers either its text (" -- RenderInline {STRONG} at (0,0) size 31x18 -- RenderText {#text} at (686,0) size 31x18 -- text run at (686,0) width 31: "here" -- RenderText {#text} at (716,0) size 759x36 -- text run at (716,0) width 43: ") or its" -- text run at (0,18) width 159: "whitespace background, " -- RenderInline {STRONG} at (0,0) size 31x18 -- RenderText {#text} at (158,18) size 31x18 -- text run at (158,18) width 31: "here" -- RenderText {#text} at (188,18) size 5x18 -- text run at (188,18) width 5: ":" -- RenderBlock {ADDRESS} at (0,52) size 784x18 -- RenderText {#text} at (0,0) size 163x18 -- text run at (0,0) width 163: "The background color of " -- RenderInline {A} at (0,0) size 120x18 [color=#0000EE] -- RenderText {#text} at (162,0) size 82x18 -- text run at (162,0) width 82: "this anchor (" -- RenderInline {STRONG} at (0,0) size 33x18 -- RenderText {#text} at (243,0) size 33x18 -- text run at (243,0) width 33: "here" -- RenderText {#text} at (275,0) size 7x18 -- text run at (275,0) width 7: ")" -- RenderText {#text} at (281,0) size 394x18 -- text run at (281,0) width 394: " should turn to green when the pointing device hovers over it." -- RenderTable {TABLE} at (0,70) size 314x205 -- RenderTableSection {TBODY} at (0,0) size 314x205 -- RenderTableRow {TR} at (0,5) size 314x20 -- RenderTableCell {TD} at (5,5) size 102x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 75x18 -- text run at (1,1) width 75: "The cells in" -- RenderTableCell {TD} at (111,5) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 59x18 -- text run at (1,1) width 59: "this table" -- RenderTableCell {TD} at (207,5) size 102x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 63x18 -- text run at (1,1) width 63: "should go" -- RenderTableRow {TR} at (0,30) size 314x20 -- RenderTableCell {TD} at (5,30) size 102x20 [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 75x18 -- text run at (1,1) width 75: "green when" -- RenderTableCell {TD} at (111,30) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 65x18 -- text run at (1,1) width 65: "you hover" -- RenderTableCell {TD} at (207,30) size 102x20 [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 77x18 -- text run at (1,1) width 77: "the pointing" -- RenderTableRow {TR} at (0,55) size 314x20 -- RenderTableCell {TD} at (5,55) size 102x20 [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 75x18 -- text run at (1,1) width 75: "device over" -- RenderTableCell {TD} at (111,55) size 92x20 [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 42x18 -- text run at (1,1) width 42: "them (" -- RenderInline {STRONG} at (0,0) size 31x18 -- RenderText {#text} at (42,1) size 31x18 -- text run at (42,1) width 31: "here" -- RenderText {#text} at (72,1) size 10x18 -- text run at (72,1) width 10: ")." -- RenderTableCell {TD} at (207,64) size 102x2 [r=2 c=2 rs=1 cs=1] -- RenderTableRow {TR} at (0,80) size 314x20 -- RenderTableCell {TD} at (5,80) size 102x20 [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 77x18 -- text run at (1,1) width 77: "The rows in" -- RenderTableCell {TD} at (111,80) size 92x20 [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 59x18 -- text run at (1,1) width 59: "this table" -- RenderTableCell {TD} at (207,80) size 102x20 [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 63x18 -- text run at (1,1) width 63: "should go" -- RenderTableRow {TR} at (0,105) size 314x20 -- RenderTableCell {TD} at (5,105) size 102x20 [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 68x18 -- text run at (1,1) width 68: "dark green" -- RenderTableCell {TD} at (111,105) size 92x20 [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 59x18 -- text run at (1,1) width 59: "when the" -- RenderTableCell {TD} at (207,105) size 102x20 [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 100x18 -- text run at (1,1) width 100: "pointing device" -- RenderTableRow {TR} at (0,130) size 314x20 -- RenderTableCell {TD} at (5,130) size 102x20 [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 67x18 -- text run at (1,1) width 67: "is over the" -- RenderTableCell {TD} at (111,130) size 92x20 [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 60x18 -- text run at (1,1) width 60: "five pixel" -- RenderTableCell {TD} at (207,130) size 102x20 [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 95x18 -- text run at (1,1) width 95: "border spacing" -- RenderTableRow {TR} at (0,155) size 314x20 -- RenderTableCell {TD} at (5,155) size 102x20 [r=6 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 90x18 -- text run at (1,1) width 90: "and when it is" -- RenderTableCell {TD} at (111,155) size 92x20 [r=6 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 90x18 -- text run at (1,1) width 90: "over the cells." -- RenderTableCell {TD} at (207,164) size 102x2 [r=6 c=2 rs=1 cs=1] -- RenderTableRow {TR} at (0,180) size 314x20 -- RenderTableCell {TD} at (5,180) size 102x20 [r=7 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 66x18 -- text run at (1,1) width 66: "Including " -- RenderInline {STRONG} at (0,0) size 31x18 -- RenderText {#text} at (66,1) size 31x18 -- text run at (66,1) width 31: "here" -- RenderText {#text} at (96,1) size 5x18 -- text run at (96,1) width 5: "," -- RenderTableCell {TD} at (111,189) size 92x2 [r=7 c=1 rs=1 cs=1] -- RenderTableCell {TD} at (207,180) size 102x20 [r=7 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 73x18 -- text run at (1,1) width 73: "blank cells." -diff --git a/LayoutTests/platform/mac-mojave/fast/table/frame-and-rules-expected.txt b/LayoutTests/platform/mac-mojave/fast/table/frame-and-rules-expected.txt -deleted file mode 100644 -index 2a070be401cdb5fd89db93d57e20901162dda2d1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/table/frame-and-rules-expected.txt -+++ /dev/null -@@ -1,2472 +0,0 @@ --layer at (0,0) size 785x7842 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x7842 -- RenderBlock {HTML} at (0,0) size 785x7842 -- RenderBody {BODY} at (8,8) size 769x7786 -- RenderTable {TABLE} at (0,0) size 273x118 -- RenderBlock {CAPTION} at (0,0) size 273x18 -- RenderInline {A} at (0,0) size 256x18 -- RenderText {#text} at (5,0) size 256x18 -- text run at (5,0) width 256: "Frame=\x{201C}void\x{201D} and Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (260,0) size 8x18 -- text run at (260,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 273x60 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 273x20 -- RenderTableCell {TD} at (90,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 273x20 -- RenderTableCell {TD} at (0,40) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,166) size 273x137 -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 155x36 -- RenderText {#text} at (59,0) size 155x36 -- text run at (59,0) width 155: "Frame=\x{201C}above\x{201D} and" -- text run at (79,18) width 108: "Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (186,18) size 8x18 -- text run at (186,18) width 8: ":" -- RenderTableSection {THEAD} at (0,36) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 273x60 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 273x20 -- RenderTableCell {TD} at (90,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 273x20 -- RenderTableCell {TD} at (0,40) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,117) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,351) size 273x137 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 155x36 -- RenderText {#text} at (59,0) size 155x36 -- text run at (59,0) width 155: "Frame=\x{201C}below\x{201D} and" -- text run at (79,18) width 108: "Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (186,18) size 8x18 -- text run at (186,18) width 8: ":" -- RenderTableSection {THEAD} at (0,36) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,56) size 273x60 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 273x20 -- RenderTableCell {TD} at (90,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 273x20 -- RenderTableCell {TD} at (0,40) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,116) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,536) size 273x138 [border: none none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 158x36 -- RenderText {#text} at (57,0) size 158x36 -- text run at (57,0) width 158: "Frame=\x{201C}hsides\x{201D} and" -- text run at (79,18) width 108: "Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (186,18) size 8x18 -- text run at (186,18) width 8: ":" -- RenderTableSection {THEAD} at (0,36) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 273x60 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 273x20 -- RenderTableCell {TD} at (90,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 273x20 -- RenderTableCell {TD} at (0,40) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,117) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,722) size 275x136 [border: none (1px solid #808080) none none] -- RenderBlock {CAPTION} at (0,0) size 275x36 -- RenderInline {A} at (0,0) size 157x36 -- RenderText {#text} at (59,0) size 157x36 -- text run at (59,0) width 157: "Frame=\x{201C}vsides\x{201D} and" -- text run at (80,18) width 108: "Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (187,18) size 8x18 -- text run at (187,18) width 8: ":" -- RenderTableSection {THEAD} at (0,36) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,56) size 274x60 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 274x20 -- RenderTableCell {TD} at (91,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 274x20 -- RenderTableCell {TD} at (0,40) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,116) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,906) size 274x118 -- RenderBlock {CAPTION} at (0,0) size 274x18 -- RenderInline {A} at (0,0) size 246x18 -- RenderText {#text} at (11,0) size 246x18 -- text run at (11,0) width 246: "Frame=\x{201C}lhs\x{201D} and Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (256,0) size 7x18 -- text run at (256,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 274x60 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 274x20 -- RenderTableCell {TD} at (91,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 274x20 -- RenderTableCell {TD} at (0,40) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,1072) size 274x118 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 274x18 -- RenderInline {A} at (0,0) size 248x18 -- RenderText {#text} at (10,0) size 248x18 -- text run at (10,0) width 248: "Frame=\x{201C}rhs\x{201D} and Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (257,0) size 7x18 -- text run at (257,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 273x60 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 273x20 -- RenderTableCell {TD} at (90,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 273x20 -- RenderTableCell {TD} at (0,40) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,1238) size 275x120 [border: none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 250x18 -- RenderText {#text} at (9,0) size 250x18 -- text run at (9,0) width 250: "Frame=\x{201C}box\x{201D} and Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (258,0) size 8x18 -- text run at (258,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 274x60 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 274x20 -- RenderTableCell {TD} at (91,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 274x20 -- RenderTableCell {TD} at (0,40) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,1406) size 275x138 [border: none] -- RenderBlock {CAPTION} at (0,0) size 275x36 -- RenderInline {A} at (0,0) size 161x36 -- RenderText {#text} at (57,0) size 161x36 -- text run at (57,0) width 161: "Frame=\x{201C}border\x{201D} and" -- text run at (80,18) width 108: "Rules=\x{201C}none\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (187,18) size 8x18 -- text run at (187,18) width 8: ":" -- RenderTableSection {THEAD} at (0,36) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 274x60 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x20 [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 274x20 -- RenderTableCell {TD} at (91,20) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 274x20 -- RenderTableCell {TD} at (0,40) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,117) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,1592) size 273x138 -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 144x36 -- RenderText {#text} at (64,0) size 144x36 -- text run at (64,0) width 144: "Frame=\x{201C}void\x{201D} and" -- text run at (72,18) width 123: "Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (194,18) size 7x18 -- text run at (194,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 273x20 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,56) size 273x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x20 -- RenderTableCell {TD} at (90,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 273x20 -- RenderTableCell {TD} at (0,41) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,117) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,1778) size 273x139 -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 155x36 -- RenderText {#text} at (59,0) size 155x36 -- text run at (59,0) width 155: "Frame=\x{201C}above\x{201D} and" -- text run at (72,18) width 123: "Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (194,18) size 7x18 -- text run at (194,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 273x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x20 -- RenderTableCell {TD} at (90,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 273x20 -- RenderTableCell {TD} at (0,41) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,118) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,1965) size 273x139 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 155x36 -- RenderText {#text} at (59,0) size 155x36 -- text run at (59,0) width 155: "Frame=\x{201C}below\x{201D} and" -- text run at (72,18) width 123: "Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (194,18) size 7x18 -- text run at (194,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 273x20 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,56) size 273x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x20 -- RenderTableCell {TD} at (90,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 273x20 -- RenderTableCell {TD} at (0,41) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,117) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,2152) size 273x140 [border: none none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 158x36 -- RenderText {#text} at (57,0) size 158x36 -- text run at (57,0) width 158: "Frame=\x{201C}hsides\x{201D} and" -- text run at (72,18) width 123: "Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (194,18) size 7x18 -- text run at (194,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 273x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x20 -- RenderTableCell {TD} at (90,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 273x20 -- RenderTableCell {TD} at (0,41) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,118) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,2340) size 275x138 [border: none (1px solid #808080) none none] -- RenderBlock {CAPTION} at (0,0) size 275x36 -- RenderInline {A} at (0,0) size 157x36 -- RenderText {#text} at (59,0) size 157x36 -- text run at (59,0) width 157: "Frame=\x{201C}vsides\x{201D} and" -- text run at (73,18) width 123: "Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (195,18) size 7x18 -- text run at (195,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 274x20 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,56) size 274x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x20 -- RenderTableCell {TD} at (91,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 274x20 -- RenderTableCell {TD} at (0,41) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,117) size 274x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,2526) size 274x120 -- RenderBlock {CAPTION} at (0,0) size 274x18 -- RenderInline {A} at (0,0) size 261x18 -- RenderText {#text} at (3,0) size 261x18 -- text run at (3,0) width 261: "Frame=\x{201C}lhs\x{201D} and Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (263,0) size 7x18 -- text run at (263,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 274x20 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 274x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x20 -- RenderTableCell {TD} at (91,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 274x20 -- RenderTableCell {TD} at (0,41) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 274x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,2694) size 274x120 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 274x18 -- RenderInline {A} at (0,0) size 263x18 -- RenderText {#text} at (2,0) size 263x18 -- text run at (2,0) width 263: "Frame=\x{201C}rhs\x{201D} and Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (264,0) size 7x18 -- text run at (264,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 273x20 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 273x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x20 -- RenderTableCell {TD} at (90,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 273x20 -- RenderTableCell {TD} at (0,41) size 182x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 273x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,2862) size 275x122 [border: none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 266x18 -- RenderText {#text} at (1,0) size 266x18 -- text run at (1,0) width 266: "Frame=\x{201C}box\x{201D} and Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (266,0) size 7x18 -- text run at (266,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 274x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 274x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x20 -- RenderTableCell {TD} at (91,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 274x20 -- RenderTableCell {TD} at (0,41) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,100) size 274x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,3032) size 275x140 [border: none] -- RenderBlock {CAPTION} at (0,0) size 275x36 -- RenderInline {A} at (0,0) size 161x36 -- RenderText {#text} at (57,0) size 161x36 -- text run at (57,0) width 161: "Frame=\x{201C}border\x{201D} and" -- text run at (73,18) width 123: "Rules=\x{201C}groups\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (195,18) size 7x18 -- text run at (195,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 274x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 274x61 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x20 -- RenderTableCell {TD} at (91,21) size 92x20 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x20 [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,41) size 274x20 -- RenderTableCell {TD} at (0,41) size 183x20 [border: none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,118) size 274x21 [border: (1px solid #808080) none (1px solid #808080) none] -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px none #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px none #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,3220) size 273x122 -- RenderBlock {CAPTION} at (0,0) size 273x18 -- RenderInline {A} at (0,0) size 256x18 -- RenderText {#text} at (5,0) size 256x18 -- text run at (5,0) width 256: "Frame=\x{201C}void\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (260,0) size 7x18 -- text run at (260,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 273x63 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080) none none none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x21 -- RenderTableCell {TD} at (90,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 273x21 -- RenderTableCell {TD} at (0,42) size 182x21 [border: (1px solid #808080) none none none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,3390) size 273x123 -- RenderBlock {CAPTION} at (0,0) size 273x18 -- RenderInline {A} at (0,0) size 267x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Frame=\x{201C}above\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (266,0) size 7x18 -- text run at (266,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 273x63 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080) none none none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x21 -- RenderTableCell {TD} at (90,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 273x21 -- RenderTableCell {TD} at (0,42) size 182x21 [border: (1px solid #808080) none none none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,102) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,3561) size 273x123 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 273x18 -- RenderInline {A} at (0,0) size 267x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Frame=\x{201C}below\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (266,0) size 7x18 -- text run at (266,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 273x63 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080) none none none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x21 -- RenderTableCell {TD} at (90,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 273x21 -- RenderTableCell {TD} at (0,42) size 182x21 [border: (1px solid #808080) none none none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,3732) size 273x142 [border: none none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 273x36 -- RenderInline {A} at (0,0) size 158x36 -- RenderText {#text} at (57,0) size 158x36 -- text run at (57,0) width 158: "Frame=\x{201C}hsides\x{201D} and" -- text run at (79,18) width 108: "Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (186,18) size 7x18 -- text run at (186,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 273x63 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080) none none none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x21 -- RenderTableCell {TD} at (90,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 273x21 -- RenderTableCell {TD} at (0,42) size 182x21 [border: (1px solid #808080) none none none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,120) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,3922) size 275x122 [border: none (1px solid #808080) none none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 269x18 -- RenderText {#text} at (0,0) size 269x18 -- text run at (0,0) width 269: "Frame=\x{201C}vsides\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (268,0) size 7x18 -- text run at (268,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 274x63 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x21 -- RenderTableCell {TD} at (91,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 274x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080) none none (1px none #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,4092) size 274x122 -- RenderBlock {CAPTION} at (0,0) size 274x18 -- RenderInline {A} at (0,0) size 245x18 -- RenderText {#text} at (11,0) size 245x18 -- text run at (11,0) width 245: "Frame=\x{201C}lhs\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (255,0) size 8x18 -- text run at (255,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 274x20 -- RenderTableRow {TR} at (0,0) size 274x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 274x63 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x21 -- RenderTableCell {TD} at (91,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 274x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080) none none (1px none #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,4262) size 274x122 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 274x18 -- RenderInline {A} at (0,0) size 247x18 -- RenderText {#text} at (10,0) size 247x18 -- text run at (10,0) width 247: "Frame=\x{201C}rhs\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (256,0) size 8x18 -- text run at (256,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 273x20 -- RenderTableRow {TR} at (0,0) size 273x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x20 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x20 [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 273x63 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080) none none none] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 273x21 -- RenderTableCell {TD} at (90,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (181,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 273x21 -- RenderTableCell {TD} at (0,42) size 182x21 [border: (1px solid #808080) none none none] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 273x21 -- RenderTableRow {TR} at (0,0) size 273x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (181,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,4432) size 275x124 [border: none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 250x18 -- RenderText {#text} at (9,0) size 250x18 -- text run at (9,0) width 250: "Frame=\x{201C}box\x{201D} and Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (258,0) size 8x18 -- text run at (258,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 274x63 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x21 -- RenderTableCell {TD} at (91,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 274x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080) none none (1px none #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,102) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,4604) size 275x142 [border: none] -- RenderBlock {CAPTION} at (0,0) size 275x36 -- RenderInline {A} at (0,0) size 161x36 -- RenderText {#text} at (57,0) size 161x36 -- text run at (57,0) width 161: "Frame=\x{201C}border\x{201D} and" -- text run at (80,18) width 108: "Rules=\x{201C}rows\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (187,18) size 7x18 -- text run at (187,18) width 7: ":" -- RenderTableSection {THEAD} at (0,36) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,57) size 274x63 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 183x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 274x21 -- RenderTableCell {TD} at (91,21) size 92x21 [border: (1px solid #808080) none none none] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 92x22 [border: (1px solid #808080) none none none] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 274x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080) none none (1px none #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,120) size 274x21 -- RenderTableRow {TR} at (0,0) size 274x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080) none none (1px none #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 92x21 [border: (1px solid #808080) none none none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,4794) size 275x118 -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 251x18 -- RenderText {#text} at (9,0) size 251x18 -- text run at (9,0) width 251: "Frame=\x{201C}void\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (259,0) size 7x18 -- text run at (259,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 275x60 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 275x20 -- RenderTableCell {TD} at (90,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 275x20 -- RenderTableCell {TD} at (0,40) size 183x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,4960) size 275x119 -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 262x18 -- RenderText {#text} at (3,0) size 262x18 -- text run at (3,0) width 262: "Frame=\x{201C}above\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (264,0) size 8x18 -- text run at (264,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 275x60 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 275x20 -- RenderTableCell {TD} at (90,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 275x20 -- RenderTableCell {TD} at (0,40) size 183x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,5127) size 275x119 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 262x18 -- RenderText {#text} at (3,0) size 262x18 -- text run at (3,0) width 262: "Frame=\x{201C}below\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (264,0) size 8x18 -- text run at (264,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 275x60 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 275x20 -- RenderTableCell {TD} at (90,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 275x20 -- RenderTableCell {TD} at (0,40) size 183x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,5294) size 275x120 [border: none none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 265x18 -- RenderText {#text} at (2,0) size 265x18 -- text run at (2,0) width 265: "Frame=\x{201C}hsides\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (266,0) size 7x18 -- text run at (266,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px none #808080) none none none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 275x60 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 275x20 -- RenderTableCell {TD} at (90,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 275x20 -- RenderTableCell {TD} at (0,40) size 183x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,5462) size 277x118 [border: none (1px solid #808080) none none] -- RenderBlock {CAPTION} at (0,0) size 277x18 -- RenderInline {A} at (0,0) size 264x18 -- RenderText {#text} at (3,0) size 264x18 -- text run at (3,0) width 264: "Frame=\x{201C}vsides\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (266,0) size 8x18 -- text run at (266,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 276x60 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 276x20 -- RenderTableCell {TD} at (91,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 276x20 -- RenderTableCell {TD} at (0,40) size 184x20 [border: none none none (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,5628) size 276x118 -- RenderBlock {CAPTION} at (0,0) size 276x18 -- RenderInline {A} at (0,0) size 241x18 -- RenderText {#text} at (14,0) size 241x18 -- text run at (14,0) width 241: "Frame=\x{201C}lhs\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (254,0) size 7x18 -- text run at (254,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 276x60 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 276x20 -- RenderTableCell {TD} at (91,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 276x20 -- RenderTableCell {TD} at (0,40) size 184x20 [border: none none none (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,5794) size 276x118 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 276x18 -- RenderInline {A} at (0,0) size 242x18 -- RenderText {#text} at (14,0) size 242x18 -- text run at (14,0) width 242: "Frame=\x{201C}rhs\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (255,0) size 7x18 -- text run at (255,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 275x60 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,10) size 91x20 [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 275x20 -- RenderTableCell {TD} at (90,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 275x20 -- RenderTableCell {TD} at (0,40) size 183x20 [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,98) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,5960) size 277x120 [border: none] -- RenderBlock {CAPTION} at (0,0) size 277x18 -- RenderInline {A} at (0,0) size 245x18 -- RenderText {#text} at (13,0) size 245x18 -- text run at (13,0) width 245: "Frame=\x{201C}box\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (257,0) size 7x18 -- text run at (257,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 276x60 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 276x20 -- RenderTableCell {TD} at (91,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 276x20 -- RenderTableCell {TD} at (0,40) size 184x20 [border: none none none (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,6128) size 277x120 [border: none] -- RenderBlock {CAPTION} at (0,0) size 277x18 -- RenderInline {A} at (0,0) size 268x18 -- RenderText {#text} at (1,0) size 268x18 -- text run at (1,0) width 268: "Frame=\x{201C}border\x{201D} and Rules=\x{201C}cols\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (268,0) size 8x18 -- text run at (268,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px none #808080) none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 276x60 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,10) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,20) size 276x20 -- RenderTableCell {TD} at (91,20) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,30) size 93x20 [border: none none none (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,40) size 276x20 -- RenderTableCell {TD} at (0,40) size 184x20 [border: none none none (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,99) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none none none (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none none none (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,6296) size 275x122 -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 241x18 -- RenderText {#text} at (14,0) size 241x18 -- text run at (14,0) width 241: "Frame=\x{201C}void\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (254,0) size 7x18 -- text run at (254,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 275x63 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 275x21 -- RenderTableCell {TD} at (90,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 275x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,6466) size 275x123 -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 252x18 -- RenderText {#text} at (8,0) size 252x18 -- text run at (8,0) width 252: "Frame=\x{201C}above\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (259,0) size 8x18 -- text run at (259,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 275x63 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 275x21 -- RenderTableCell {TD} at (90,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 275x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,102) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,6637) size 275x123 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 252x18 -- RenderText {#text} at (8,0) size 252x18 -- text run at (8,0) width 252: "Frame=\x{201C}below\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (259,0) size 8x18 -- text run at (259,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 275x63 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 275x21 -- RenderTableCell {TD} at (90,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 275x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,6808) size 275x124 [border: none none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 275x18 -- RenderInline {A} at (0,0) size 255x18 -- RenderText {#text} at (7,0) size 255x18 -- text run at (7,0) width 255: "Frame=\x{201C}hsides\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (261,0) size 7x18 -- text run at (261,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 275x63 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 275x21 -- RenderTableCell {TD} at (90,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 275x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,102) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,6980) size 277x122 [border: none (1px solid #808080) none none] -- RenderBlock {CAPTION} at (0,0) size 277x18 -- RenderInline {A} at (0,0) size 254x18 -- RenderText {#text} at (8,0) size 254x18 -- text run at (8,0) width 254: "Frame=\x{201C}vsides\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (261,0) size 8x18 -- text run at (261,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 276x63 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 276x21 -- RenderTableCell {TD} at (91,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 276x21 -- RenderTableCell {TD} at (0,42) size 184x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,7150) size 276x122 -- RenderBlock {CAPTION} at (0,0) size 276x18 -- RenderInline {A} at (0,0) size 231x18 -- RenderText {#text} at (19,0) size 231x18 -- text run at (19,0) width 231: "Frame=\x{201C}lhs\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (249,0) size 7x18 -- text run at (249,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 276x20 -- RenderTableRow {TR} at (0,0) size 276x20 -- RenderTableCell {TD} at (0,0) size 92x20 [border: none] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x20 [border: none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x20 [border: none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 276x63 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 276x21 -- RenderTableCell {TD} at (91,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 276x21 -- RenderTableCell {TD} at (0,42) size 184x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,7320) size 276x122 [border: none (1px solid #808080) none] -- RenderBlock {CAPTION} at (0,0) size 276x18 -- RenderInline {A} at (0,0) size 233x18 -- RenderText {#text} at (18,0) size 233x18 -- text run at (18,0) width 233: "Frame=\x{201C}rhs\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (250,0) size 7x18 -- text run at (250,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 275x20 -- RenderTableRow {TR} at (0,0) size 275x20 -- RenderTableCell {TD} at (0,0) size 91x20 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,1) size 89x18 -- text run at (1,1) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x20 [border: none] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x20 [border: none] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,1) size 89x18 -- text run at (2,1) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,38) size 275x63 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,10) size 91x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (1,2) size 89x19 -- text run at (1,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (90,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 275x21 -- RenderTableCell {TD} at (90,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (182,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 275x21 -- RenderTableCell {TD} at (0,42) size 183x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,101) size 275x21 -- RenderTableRow {TR} at (0,0) size 275x21 -- RenderTableCell {TD} at (0,0) size 91x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (1,2) size 89x18 -- text run at (1,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (90,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (182,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,7490) size 277x124 [border: none] -- RenderBlock {CAPTION} at (0,0) size 277x18 -- RenderInline {A} at (0,0) size 236x18 -- RenderText {#text} at (17,0) size 236x18 -- text run at (17,0) width 236: "Frame=\x{201C}box\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (252,0) size 7x18 -- text run at (252,0) width 7: ":" -- RenderTableSection {THEAD} at (0,18) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 276x63 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 276x21 -- RenderTableCell {TD} at (91,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 276x21 -- RenderTableCell {TD} at (0,42) size 184x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,102) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" -- RenderTable {TABLE} at (0,7662) size 277x124 [border: none] -- RenderBlock {CAPTION} at (0,0) size 277x18 -- RenderInline {A} at (0,0) size 258x18 -- RenderText {#text} at (6,0) size 258x18 -- text run at (6,0) width 258: "Frame=\x{201C}border\x{201D} and Rules=\x{201C}all\x{201D}" -- RenderInline (generated) at (0,0) size 8x18 -- RenderText at (263,0) size 8x18 -- text run at (263,0) width 8: ":" -- RenderTableSection {THEAD} at (0,18) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 1, Cell 3" -- RenderTableSection {TBODY} at (0,39) size 276x63 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,10) size 92x22 [border: (1px solid #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 2, Cell 1" -- RenderTableCell {TD} at (91,0) size 185x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 2, Cell 2" -- RenderTableRow {TR} at (0,21) size 276x21 -- RenderTableCell {TD} at (91,21) size 93x21 [border: (1px solid #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 3, Cell 2" -- RenderTableCell {TD} at (183,31) size 93x22 [border: (1px solid #808080)] [r=1 c=2 rs=2 cs=1] -- RenderText {#text} at (2,2) size 89x19 -- text run at (2,3) width 89: "Row 3, Cell 3" -- RenderTableRow {TR} at (0,42) size 276x21 -- RenderTableCell {TD} at (0,42) size 184x21 [border: (1px solid #808080)] [r=2 c=0 rs=1 cs=2] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 4, Cell 1" -- RenderTableSection {TFOOT} at (0,102) size 276x21 -- RenderTableRow {TR} at (0,0) size 276x21 -- RenderTableCell {TD} at (0,0) size 92x21 [border: (1px solid #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 1" -- RenderTableCell {TD} at (91,0) size 93x21 [border: (1px solid #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 2" -- RenderTableCell {TD} at (183,0) size 93x21 [border: (1px solid #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 89x18 -- text run at (2,2) width 89: "Row 5, Cell 3" --layer at (393,24) size 392x150 -- RenderBlock (positioned) {TABLE} at (392,24) size 393x150 -- RenderTable at (0,0) size 347x153 -- RenderBlock {CAPTION} at (0,0) size 347x18 -- RenderText {#text} at (33,0) size 274x18 -- text run at (33,0) width 274: "Local links to specific testcase tables" -- RenderInline (generated) at (0,0) size 7x18 -- RenderText at (306,0) size 7x18 -- text run at (306,0) width 7: ":" -- RenderTableCol {COLGROUP} at (0,0) size 0x0 -- RenderTableCol {COLGROUP} at (0,0) size 0x0 -- RenderTableSection {THEAD} at (0,18) size 347x40 -- RenderTableRow {TR} at (0,2) size 347x17 -- RenderTableCell {TH} at (2,19) size 72x2 [r=0 c=0 rs=2 cs=2] -- RenderTableCell {TH} at (75,2) size 270x17 [r=0 c=2 rs=1 cs=9] -- RenderText {#text} at (118,1) size 34x15 -- text run at (118,1) width 34: "Frame" -- RenderTableRow {TR} at (0,21) size 347x17 -- RenderTableCell {TH} at (75,21) size 26x17 [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 24x15 -- text run at (1,1) width 24: "void" -- RenderTableCell {TH} at (102,21) size 34x17 [r=1 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 32x15 -- text run at (1,1) width 32: "above" -- RenderTableCell {TH} at (137,21) size 34x17 [r=1 c=4 rs=1 cs=1] -- RenderText {#text} at (1,1) size 32x15 -- text run at (1,1) width 32: "below" -- RenderTableCell {TH} at (172,21) size 36x17 [r=1 c=5 rs=1 cs=1] -- RenderText {#text} at (1,1) size 33x15 -- text run at (1,1) width 33: "hsides" -- RenderTableCell {TH} at (209,21) size 35x17 [r=1 c=6 rs=1 cs=1] -- RenderText {#text} at (1,1) size 33x15 -- text run at (1,1) width 33: "vsides" -- RenderTableCell {TH} at (245,21) size 19x17 [r=1 c=7 rs=1 cs=1] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,1) width 16: "lhs" -- RenderTableCell {TH} at (265,21) size 19x17 [r=1 c=8 rs=1 cs=1] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,1) width 16: "rhs" -- RenderTableCell {TH} at (285,21) size 22x17 [r=1 c=9 rs=1 cs=1] -- RenderText {#text} at (1,1) size 20x15 -- text run at (1,1) width 20: "box" -- RenderTableCell {TH} at (308,21) size 37x17 [r=1 c=10 rs=1 cs=1] -- RenderText {#text} at (1,1) size 34x15 -- text run at (1,1) width 34: "border" -- RenderTableSection {TBODY} at (0,58) size 347x95 -- RenderTableRow {TR} at (0,0) size 347x17 -- RenderTableCell {TH} at (2,38) size 32x17 [r=0 c=0 rs=5 cs=1] -- RenderText {#text} at (1,1) size 30x15 -- text run at (1,1) width 30: "Rules" -- RenderTableCell {TH} at (35,0) size 39x17 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (11,1) size 26x15 -- text run at (11,1) width 26: "none" -- RenderTableCell {TD} at (75,0) size 26x17 [bgcolor=#CCCCCC] [r=0 c=2 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (5,1) size 15x15 -- text run at (5,2) width 15: "Go" -- RenderTableCell {TD} at (102,0) size 34x17 [bgcolor=#CCCCCC] [r=0 c=3 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 15x15 -- text run at (9,2) width 15: "Go" -- RenderTableCell {TD} at (137,0) size 34x17 [bgcolor=#CCCCCC] [r=0 c=4 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (172,0) size 36x17 [bgcolor=#CCCCCC] [r=0 c=5 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (209,0) size 35x17 [bgcolor=#CCCCCC] [r=0 c=6 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (245,0) size 19x17 [bgcolor=#CCCCCC] [r=0 c=7 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 15x15 -- text run at (1,2) width 15: "Go" -- RenderTableCell {TD} at (265,0) size 19x17 [bgcolor=#CCCCCC] [r=0 c=8 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,2) width 16: "Go" -- RenderTableCell {TD} at (285,0) size 22x17 [bgcolor=#CCCCCC] [r=0 c=9 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (3,1) size 16x15 -- text run at (3,2) width 16: "Go" -- RenderTableCell {TD} at (308,0) size 37x17 [bgcolor=#CCCCCC] [r=0 c=10 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (10,1) size 16x15 -- text run at (10,2) width 16: "Go" -- RenderTableRow {TR} at (0,19) size 347x17 -- RenderTableCell {TH} at (35,19) size 39x17 [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 36x15 -- text run at (1,1) width 36: "groups" -- RenderTableCell {TD} at (75,19) size 26x17 [bgcolor=#CCCCCC] [r=1 c=2 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (5,1) size 15x15 -- text run at (5,2) width 15: "Go" -- RenderTableCell {TD} at (102,19) size 34x17 [bgcolor=#CCCCCC] [r=1 c=3 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 15x15 -- text run at (9,2) width 15: "Go" -- RenderTableCell {TD} at (137,19) size 34x17 [bgcolor=#CCCCCC] [r=1 c=4 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (172,19) size 36x17 [bgcolor=#CCCCCC] [r=1 c=5 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (209,19) size 35x17 [bgcolor=#CCCCCC] [r=1 c=6 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (245,19) size 19x17 [bgcolor=#CCCCCC] [r=1 c=7 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 15x15 -- text run at (1,2) width 15: "Go" -- RenderTableCell {TD} at (265,19) size 19x17 [bgcolor=#CCCCCC] [r=1 c=8 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,2) width 16: "Go" -- RenderTableCell {TD} at (285,19) size 22x17 [bgcolor=#CCCCCC] [r=1 c=9 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (3,1) size 16x15 -- text run at (3,2) width 16: "Go" -- RenderTableCell {TD} at (308,19) size 37x17 [bgcolor=#CCCCCC] [r=1 c=10 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (10,1) size 16x15 -- text run at (10,2) width 16: "Go" -- RenderTableRow {TR} at (0,38) size 347x17 -- RenderTableCell {TH} at (35,38) size 39x17 [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (11,1) size 26x15 -- text run at (11,1) width 26: "rows" -- RenderTableCell {TD} at (75,38) size 26x17 [bgcolor=#CCCCCC] [r=2 c=2 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (5,1) size 15x15 -- text run at (5,2) width 15: "Go" -- RenderTableCell {TD} at (102,38) size 34x17 [bgcolor=#CCCCCC] [r=2 c=3 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 15x15 -- text run at (9,2) width 15: "Go" -- RenderTableCell {TD} at (137,38) size 34x17 [bgcolor=#CCCCCC] [r=2 c=4 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (172,38) size 36x17 [bgcolor=#CCCCCC] [r=2 c=5 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (209,38) size 35x17 [bgcolor=#CCCCCC] [r=2 c=6 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (245,38) size 19x17 [bgcolor=#CCCCCC] [r=2 c=7 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 15x15 -- text run at (1,2) width 15: "Go" -- RenderTableCell {TD} at (265,38) size 19x17 [bgcolor=#CCCCCC] [r=2 c=8 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,2) width 16: "Go" -- RenderTableCell {TD} at (285,38) size 22x17 [bgcolor=#CCCCCC] [r=2 c=9 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (3,1) size 16x15 -- text run at (3,2) width 16: "Go" -- RenderTableCell {TD} at (308,38) size 37x17 [bgcolor=#CCCCCC] [r=2 c=10 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (10,1) size 16x15 -- text run at (10,2) width 16: "Go" -- RenderTableRow {TR} at (0,57) size 347x17 -- RenderTableCell {TH} at (35,57) size 39x17 [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (15,1) size 22x15 -- text run at (15,1) width 22: "cols" -- RenderTableCell {TD} at (75,57) size 26x17 [bgcolor=#CCCCCC] [r=3 c=2 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (5,1) size 15x15 -- text run at (5,2) width 15: "Go" -- RenderTableCell {TD} at (102,57) size 34x17 [bgcolor=#CCCCCC] [r=3 c=3 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 15x15 -- text run at (9,2) width 15: "Go" -- RenderTableCell {TD} at (137,57) size 34x17 [bgcolor=#CCCCCC] [r=3 c=4 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (172,57) size 36x17 [bgcolor=#CCCCCC] [r=3 c=5 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (209,57) size 35x17 [bgcolor=#CCCCCC] [r=3 c=6 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (245,57) size 19x17 [bgcolor=#CCCCCC] [r=3 c=7 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 15x15 -- text run at (1,2) width 15: "Go" -- RenderTableCell {TD} at (265,57) size 19x17 [bgcolor=#CCCCCC] [r=3 c=8 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,2) width 16: "Go" -- RenderTableCell {TD} at (285,57) size 22x17 [bgcolor=#CCCCCC] [r=3 c=9 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (3,1) size 16x15 -- text run at (3,2) width 16: "Go" -- RenderTableCell {TD} at (308,57) size 37x17 [bgcolor=#CCCCCC] [r=3 c=10 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (10,1) size 16x15 -- text run at (10,2) width 16: "Go" -- RenderTableRow {TR} at (0,76) size 347x17 -- RenderTableCell {TH} at (35,76) size 39x17 [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (23,1) size 14x15 -- text run at (23,1) width 14: "all" -- RenderTableCell {TD} at (75,76) size 26x17 [bgcolor=#CCCCCC] [r=4 c=2 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (5,1) size 15x15 -- text run at (5,2) width 15: "Go" -- RenderTableCell {TD} at (102,76) size 34x17 [bgcolor=#CCCCCC] [r=4 c=3 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 15x15 -- text run at (9,2) width 15: "Go" -- RenderTableCell {TD} at (137,76) size 34x17 [bgcolor=#CCCCCC] [r=4 c=4 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (172,76) size 36x17 [bgcolor=#CCCCCC] [r=4 c=5 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (209,76) size 35x17 [bgcolor=#CCCCCC] [r=4 c=6 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (9,1) size 16x15 -- text run at (9,2) width 16: "Go" -- RenderTableCell {TD} at (245,76) size 19x17 [bgcolor=#CCCCCC] [r=4 c=7 rs=1 cs=1] -- RenderInline {A} at (0,0) size 15x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 15x15 -- text run at (1,2) width 15: "Go" -- RenderTableCell {TD} at (265,76) size 19x17 [bgcolor=#CCCCCC] [r=4 c=8 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (1,1) size 16x15 -- text run at (1,2) width 16: "Go" -- RenderTableCell {TD} at (285,76) size 22x17 [bgcolor=#CCCCCC] [r=4 c=9 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (3,1) size 16x15 -- text run at (3,2) width 16: "Go" -- RenderTableCell {TD} at (308,76) size 37x17 [bgcolor=#CCCCCC] [r=4 c=10 rs=1 cs=1] -- RenderInline {A} at (0,0) size 16x14 [color=#0000EE] -- RenderText {#text} at (10,1) size 16x15 -- text run at (10,2) width 16: "Go" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/atsui-multiple-renderers-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/atsui-multiple-renderers-expected.txt -deleted file mode 100644 -index 6cc4053ddcc968df77e2f17e2d55a695d00097f6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/atsui-multiple-renderers-expected.txt -+++ /dev/null -@@ -1,101 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 108x18 -- text run at (0,0) width 108: "This is a test for " -- RenderInline {I} at (0,0) size 767x36 -- RenderText {#text} at (107,0) size 767x36 -- text run at (107,0) width 660: "http://bugzilla.opendarwin.org/show_bug.cgi?id=6139 ATSUI code path should implement small caps," -- text run at (0,18) width 412: "synthetic bold and oblique and correct metrics for fallback fonts" -- RenderText {#text} at (411,18) size 5x18 -- text run at (411,18) width 5: "." -- RenderBlock {HR} at (0,52) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,70) size 784x18 -- RenderText {#text} at (0,0) size 611x18 -- text run at (0,0) width 611: "The two columns should be identical except for the accent over the e and the umlaut over the u." -- RenderTable {TABLE} at (0,104) size 260x147 [border: none] -- RenderTableSection {TBODY} at (0,0) size 259x146 -- RenderTableRow {TR} at (0,0) size 259x30 -- RenderTableCell {TD} at (0,0) size 130x30 [border: (1px solid #008000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,3) size 68x25 -- text run at (2,3) width 68: "Lore\x{300}m " -- RenderInline {SPAN} at (0,0) size 50x23 -- RenderText {#text} at (69,5) size 50x23 -- text run at (69,5) width 50: "ipsu\x{308}m" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableCell {TD} at (129,0) size 130x30 [border: (1px solid #008000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,3) size 68x25 -- text run at (2,3) width 68: "Lorem " -- RenderInline {SPAN} at (0,0) size 50x23 -- RenderText {#text} at (69,5) size 50x23 -- text run at (69,5) width 50: "ipsum" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableRow {TR} at (0,30) size 259x30 -- RenderTableCell {TD} at (0,30) size 130x30 [border: (1px solid #008000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,3) size 74x25 -- text run at (2,3) width 74: "Lore\x{300}m " -- RenderInline {SPAN} at (0,0) size 53x23 -- RenderText {#text} at (75,5) size 53x23 -- text run at (75,5) width 53: "ipsu\x{308}m" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableCell {TD} at (129,30) size 130x30 [border: (1px solid #008000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,3) size 74x25 -- text run at (2,3) width 74: "Lorem " -- RenderInline {SPAN} at (0,0) size 53x23 -- RenderText {#text} at (75,5) size 53x23 -- text run at (75,5) width 53: "ipsum" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableRow {TR} at (0,60) size 259x30 -- RenderTableCell {TD} at (0,60) size 130x30 [border: (1px solid #008000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,3) size 68x25 -- text run at (2,3) width 68: "Lore\x{300}m " -- RenderInline {SPAN} at (0,0) size 49x23 -- RenderText {#text} at (69,5) size 49x23 -- text run at (69,5) width 49: "ipsu\x{308}m" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableCell {TD} at (129,60) size 130x30 [border: (1px solid #008000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,3) size 68x25 -- text run at (2,3) width 68: "Lorem " -- RenderInline {SPAN} at (0,0) size 49x23 -- RenderText {#text} at (69,5) size 49x23 -- text run at (69,5) width 49: "ipsum" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableRow {TR} at (0,90) size 259x30 -- RenderTableCell {TD} at (0,90) size 130x30 [border: (1px solid #008000)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,3) size 74x25 -- text run at (2,3) width 74: "Lore\x{300}m " -- RenderInline {SPAN} at (0,0) size 54x23 -- RenderText {#text} at (75,5) size 54x23 -- text run at (75,5) width 54: "ipsu\x{308}m" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableCell {TD} at (129,90) size 130x30 [border: (1px solid #008000)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,3) size 74x25 -- text run at (2,3) width 74: "Lorem " -- RenderInline {SPAN} at (0,0) size 54x23 -- RenderText {#text} at (75,5) size 54x23 -- text run at (75,5) width 54: "ipsum" -- RenderText {#text} at (0,0) size 0x0 -- RenderTableRow {TR} at (0,120) size 259x26 -- RenderTableCell {TD} at (0,120) size 130x26 [border: (1px solid #008000)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 101x23 -- text run at (2,2) width 101: "Lore\x{300}m ipsu\x{308}m" -- RenderTableCell {TD} at (129,120) size 130x26 [border: (1px solid #008000)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 101x23 -- text run at (2,2) width 101: "Lorem ipsum" -- RenderBlock {HR} at (0,259) size 784x2 [border: (1px inset #000000)] -- RenderBlock {P} at (0,277) size 784x18 -- RenderText {#text} at (0,0) size 283x18 -- text run at (0,0) width 283: "The following two lines should be identical." -- RenderBlock {P} at (0,311) size 784x24 -- RenderInline {SPAN} at (0,0) size 337x24 [border: (1px solid #008000)] -- RenderText {#text} at (1,2) size 335x22 -- text run at (1,2) width 335: "\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,351) size 784x24 -- RenderInline {SPAN} at (0,0) size 337x23 [border: (1px solid #008000)] -- RenderText {#text} at (1,2) size 335x21 -- text run at (1,2) width 335: "\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}\x{E01}\x{E02}\x{E03}\x{E04}\x{E05}\x{E06}\x{E07}\x{E08}" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/text/bidi-embedding-pop-and-push-same-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/bidi-embedding-pop-and-push-same-expected.txt -deleted file mode 100644 -index 17651ef8373be4f5566f18697f5b1e6c6531e386..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/bidi-embedding-pop-and-push-same-expected.txt -+++ /dev/null -@@ -1,143 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 520x18 -- text run at (0,0) width 520: "In each box below, the words or letters should be in the same order on every line." -- RenderBlock {DIV} at (8,34) size 768x64 [border: (1px solid #ADD8E6)] -- RenderBlock {DIV} at (5,5) size 758x18 -- RenderText {#text} at (0,0) size 47x18 -- text run at (0,0) width 47: "Lorem " -- RenderInline {SPAN} at (0,0) size 78x18 -- RenderText {#text} at (46,0) size 78x18 -- text run at (46,0) width 78: "ipsum dolor" -- RenderText {#text} at (123,0) size 59x18 -- text run at (123,0) width 59: " sit amet." -- RenderBlock {DIV} at (5,23) size 758x18 -- RenderText {#text} at (0,0) size 47x18 -- text run at (0,0) width 47: "Lorem " -- RenderInline {SPAN} at (0,0) size 40x18 -- RenderText {#text} at (46,0) size 40x18 -- text run at (46,0) width 40: "ipsum" -- RenderInline {SPAN} at (0,0) size 39x18 -- RenderText {#text} at (85,0) size 39x18 -- text run at (85,0) width 39: " dolor" -- RenderText {#text} at (123,0) size 59x18 -- text run at (123,0) width 59: " sit amet." -- RenderBlock {DIV} at (5,41) size 758x18 -- RenderText {#text} at (0,0) size 47x18 -- text run at (0,0) width 47: "Lorem " -- RenderInline {SPAN} at (0,0) size 44x18 -- RenderText {#text} at (46,0) size 44x18 -- text run at (46,0) width 44: "ipsum " -- RenderInline {B} at (0,0) size 98x18 -- RenderInline {SPAN} at (0,0) size 38x18 -- RenderText {#text} at (89,0) size 38x18 -- text run at (89,0) width 38: "dolor" -- RenderText {#text} at (126,0) size 5x18 -- text run at (126,0) width 5: " " -- RenderInline {I} at (0,0) size 19x18 -- RenderText {#text} at (130,0) size 19x18 -- text run at (130,0) width 19: "sit" -- RenderText {#text} at (148,0) size 39x18 -- text run at (148,0) width 39: " amet" -- RenderText {#text} at (186,0) size 5x18 -- text run at (186,0) width 5: "." -- RenderBlock {DIV} at (8,106) size 768x67 [border: (1px solid #ADD8E6)] -- RenderBlock {DIV} at (5,5) size 758x19 -- RenderText {#text} at (0,1) size 47x18 -- text run at (0,1) width 47: "Lorem " -- RenderInline {SPAN} at (0,0) size 66x18 -- RenderText {#text} at (46,1) size 66x18 -- text run at (46,1) width 23 RTL: " \x{5DB}\x{5DC}" -- text run at (68,1) width 11: "if" -- text run at (78,1) width 34 RTL: "\x{5D9}\x{5D5}\x{5EA}\x{5E8} " -- RenderText {#text} at (111,1) size 59x18 -- text run at (111,1) width 59: " sit amet." -- RenderBlock {DIV} at (5,24) size 758x19 -- RenderText {#text} at (0,1) size 47x18 -- text run at (0,1) width 47: "Lorem " -- RenderInline {SPAN} at (0,0) size 34x18 -- RenderText {#text} at (78,1) size 34x18 -- text run at (78,1) width 34 RTL: "\x{5D9}\x{5D5}\x{5EA}\x{5E8} " -- RenderInline {SPAN} at (0,0) size 33x18 -- RenderText {#text} at (46,1) size 33x18 -- text run at (46,1) width 23 RTL: " \x{5DB}\x{5DC}" -- text run at (68,1) width 11: "if" -- RenderText {#text} at (111,1) size 59x18 -- text run at (111,1) width 59: " sit amet." -- RenderBlock {DIV} at (5,43) size 758x19 -- RenderText {#text} at (0,1) size 47x18 -- text run at (0,1) width 47: "Lorem " -- RenderInline {SPAN} at (0,0) size 34x18 -- RenderText {#text} at (78,1) size 34x18 -- text run at (78,1) width 34 RTL: "\x{5D9}\x{5D5}\x{5EA}\x{5E8} " -- RenderInline {B} at (0,0) size 126x18 -- RenderInline {SPAN} at (0,0) size 33x18 -- RenderText {#text} at (46,1) size 33x18 -- text run at (46,1) width 23 RTL: " \x{5DB}\x{5DC}" -- text run at (68,1) width 11: "if" -- RenderText {#text} at (111,1) size 5x18 -- text run at (111,1) width 5: " " -- RenderInline {I} at (0,0) size 19x18 -- RenderText {#text} at (115,1) size 19x18 -- text run at (115,1) width 19: "sit" -- RenderText {#text} at (133,1) size 39x18 -- text run at (133,1) width 39: " amet" -- RenderText {#text} at (171,1) size 5x18 -- text run at (171,1) width 5: "." -- RenderBlock {DIV} at (8,181) size 768x46 [border: (1px solid #ADD8E6)] -- RenderBlock {DIV} at (5,5) size 758x18 -- RenderInline {SPAN} at (0,0) size 20x18 -- RenderText {#text} at (0,0) size 20x18 -- text run at (0,0) width 20: "a b" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (5,23) size 758x18 -- RenderInline {SPAN} at (0,0) size 8x18 -- RenderText {#text} at (0,0) size 8x18 -- text run at (0,0) width 8: "a" -- RenderInline {SPAN} at (0,0) size 13x18 -- RenderText {#text} at (7,0) size 13x18 -- text run at (7,0) width 13: " b" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {DIV} at (8,235) size 768x67 [border: (1px solid #ADD8E6)] -- RenderBlock {DIV} at (5,5) size 758x19 -- RenderText {#text} at (721,1) size 37x18 -- text run at (721,1) width 37 RTL: "\x{5D0}\x{5D7}\x{5EA} " -- RenderInline {SPAN} at (0,0) size 86x18 -- RenderText {#text} at (636,1) size 86x18 -- text run at (636,1) width 86 RTL: "\x{5E9}\x{5EA}\x{5D9}\x{5D9}\x{5DD} \x{5E9}\x{5DC}\x{5D5}\x{5E9}" -- RenderText {#text} at (553,1) size 84x18 -- text run at (553,1) width 84 RTL: " \x{5D0}\x{5E8}\x{5D1}\x{5E2} \x{5D7}\x{5DE}\x{5E9}." -- RenderBlock {DIV} at (5,24) size 758x19 -- RenderText {#text} at (721,1) size 37x18 -- text run at (721,1) width 37 RTL: "\x{5D0}\x{5D7}\x{5EA} " -- RenderInline {SPAN} at (0,0) size 45x18 -- RenderText {#text} at (677,1) size 45x18 -- text run at (677,1) width 45 RTL: "\x{5E9}\x{5EA}\x{5D9}\x{5D9}\x{5DD}" -- RenderInline {SPAN} at (0,0) size 42x18 -- RenderText {#text} at (636,1) size 42x18 -- text run at (636,1) width 42 RTL: " \x{5E9}\x{5DC}\x{5D5}\x{5E9}" -- RenderText {#text} at (553,1) size 84x18 -- text run at (553,1) width 84 RTL: " \x{5D0}\x{5E8}\x{5D1}\x{5E2} \x{5D7}\x{5DE}\x{5E9}." -- RenderBlock {DIV} at (5,43) size 758x19 -- RenderText {#text} at (721,1) size 37x18 -- text run at (721,1) width 37 RTL: "\x{5D0}\x{5D7}\x{5EA} " -- RenderInline {SPAN} at (0,0) size 49x18 -- RenderText {#text} at (673,1) size 49x18 -- text run at (673,1) width 49 RTL: "\x{5E9}\x{5EA}\x{5D9}\x{5D9}\x{5DD} " -- RenderInline {B} at (0,0) size 122x18 -- RenderInline {SPAN} at (0,0) size 39x18 -- RenderText {#text} at (635,1) size 39x18 -- text run at (635,1) width 39 RTL: "\x{5E9}\x{5DC}\x{5D5}\x{5E9}" -- RenderText {#text} at (631,1) size 5x18 -- text run at (631,1) width 5 RTL: " " -- RenderInline {I} at (0,0) size 42x18 -- RenderText {#text} at (590,1) size 42x18 -- text run at (590,1) width 42 RTL: "\x{5D0}\x{5E8}\x{5D1}\x{5E2}" -- RenderText {#text} at (552,1) size 39x18 -- text run at (552,1) width 39 RTL: " \x{5D7}\x{5DE}\x{5E9}" -- RenderText {#text} at (548,1) size 5x18 -- text run at (548,1) width 5 RTL: "." -diff --git a/LayoutTests/platform/mac-mojave/fast/text/font-weights-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/font-weights-expected.txt -deleted file mode 100644 -index 8b06add5a580ee5a49c28d6b916862ae6ffc5862..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/font-weights-expected.txt -+++ /dev/null -@@ -1,1097 +0,0 @@ --layer at (0,0) size 785x6747 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x6747 -- RenderBlock {HTML} at (0,0) size 785x6747 -- RenderBody {BODY} at (8,8) size 769x6731 -- RenderBlock (anonymous) at (0,0) size 769x144 -- RenderText {#text} at (0,0) size 769x72 -- text run at (0,0) width 746: "This test is designed to test the interaction between font-family and font-weight. In particular, our implementation of" -- text run at (0,18) width 759: "font-family accepts PostScript names, which may name a font with a particular weight. However, there is another CSS" -- text run at (0,36) width 769: "property, font-weight, in which the author may also name a particular weight. Our font selection algorithm takes both of" -- text run at (0,54) width 305: "these signals into account when choosing fonts." -- RenderBR {BR} at (304,54) size 1x18 -- RenderBR {BR} at (0,72) size 0x18 -- RenderText {#text} at (0,90) size 767x54 -- text run at (0,90) width 767: "There is currently no good way in JavaScript to find the actual font chosen for some text. Therefore, the best way to test" -- text run at (0,108) width 732: "this aspect of the font selection algorithm is to dump the render tree, therefore testing glyph advances (which are a" -- text run at (0,126) width 159: "property of font weight)." -- RenderBlock {DIV} at (0,144) size 769x18 -- RenderText {#text} at (0,0) size 303x18 -- text run at (0,0) width 303: "Font: Helvetica Neue Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,162) size 769x18 -- RenderText {#text} at (0,0) size 315x18 -- text run at (0,0) width 315: "Font: Helvetica Neue Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,180) size 769x18 -- RenderText {#text} at (0,0) size 325x18 -- text run at (0,0) width 325: "Font: Helvetica Neue Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,198) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: Helvetica Neue Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,216) size 769x19 -- RenderText {#text} at (0,0) size 347x19 -- text run at (0,0) width 347: "Font: Helvetica Neue Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,235) size 769x19 -- RenderText {#text} at (0,0) size 355x19 -- text run at (0,0) width 355: "Font: Helvetica Neue Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,254) size 769x19 -- RenderText {#text} at (0,0) size 355x19 -- text run at (0,0) width 355: "Font: Helvetica Neue Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,273) size 769x19 -- RenderText {#text} at (0,0) size 355x19 -- text run at (0,0) width 355: "Font: Helvetica Neue Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,292) size 769x19 -- RenderText {#text} at (0,0) size 355x19 -- text run at (0,0) width 355: "Font: Helvetica Neue Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,311) size 769x18 -- RenderText {#text} at (0,0) size 362x18 -- text run at (0,0) width 362: "Font: HelveticaNeue-UltraLight Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,329) size 769x18 -- RenderText {#text} at (0,0) size 362x18 -- text run at (0,0) width 362: "Font: HelveticaNeue-UltraLight Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,347) size 769x18 -- RenderText {#text} at (0,0) size 362x18 -- text run at (0,0) width 362: "Font: HelveticaNeue-UltraLight Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,365) size 769x18 -- RenderText {#text} at (0,0) size 362x18 -- text run at (0,0) width 362: "Font: HelveticaNeue-UltraLight Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,383) size 769x18 -- RenderText {#text} at (0,0) size 362x18 -- text run at (0,0) width 362: "Font: HelveticaNeue-UltraLight Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,401) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-UltraLight Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,420) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-UltraLight Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,439) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-UltraLight Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,458) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-UltraLight Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,477) size 769x18 -- RenderText {#text} at (0,0) size 361x18 -- text run at (0,0) width 361: "Font: HelveticaNeue-Light Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,495) size 769x18 -- RenderText {#text} at (0,0) size 361x18 -- text run at (0,0) width 361: "Font: HelveticaNeue-Light Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,513) size 769x18 -- RenderText {#text} at (0,0) size 361x18 -- text run at (0,0) width 361: "Font: HelveticaNeue-Light Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,531) size 769x18 -- RenderText {#text} at (0,0) size 361x18 -- text run at (0,0) width 361: "Font: HelveticaNeue-Light Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,549) size 769x18 -- RenderText {#text} at (0,0) size 361x18 -- text run at (0,0) width 361: "Font: HelveticaNeue-Light Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,567) size 769x19 -- RenderText {#text} at (0,0) size 396x19 -- text run at (0,0) width 396: "Font: HelveticaNeue-Light Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,586) size 769x19 -- RenderText {#text} at (0,0) size 396x19 -- text run at (0,0) width 396: "Font: HelveticaNeue-Light Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,605) size 769x19 -- RenderText {#text} at (0,0) size 396x19 -- text run at (0,0) width 396: "Font: HelveticaNeue-Light Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,624) size 769x19 -- RenderText {#text} at (0,0) size 396x19 -- text run at (0,0) width 396: "Font: HelveticaNeue-Light Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,643) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: HelveticaNeue Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,661) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: HelveticaNeue Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,679) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: HelveticaNeue Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,697) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: HelveticaNeue Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,715) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: HelveticaNeue Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,733) size 769x19 -- RenderText {#text} at (0,0) size 351x19 -- text run at (0,0) width 351: "Font: HelveticaNeue Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,752) size 769x19 -- RenderText {#text} at (0,0) size 351x19 -- text run at (0,0) width 351: "Font: HelveticaNeue Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,771) size 769x19 -- RenderText {#text} at (0,0) size 351x19 -- text run at (0,0) width 351: "Font: HelveticaNeue Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,790) size 769x19 -- RenderText {#text} at (0,0) size 351x19 -- text run at (0,0) width 351: "Font: HelveticaNeue Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,809) size 769x19 -- RenderText {#text} at (0,0) size 409x19 -- text run at (0,0) width 409: "Font: HelveticaNeue-Medium Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,828) size 769x19 -- RenderText {#text} at (0,0) size 409x19 -- text run at (0,0) width 409: "Font: HelveticaNeue-Medium Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,847) size 769x19 -- RenderText {#text} at (0,0) size 409x19 -- text run at (0,0) width 409: "Font: HelveticaNeue-Medium Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,866) size 769x19 -- RenderText {#text} at (0,0) size 409x19 -- text run at (0,0) width 409: "Font: HelveticaNeue-Medium Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,885) size 769x19 -- RenderText {#text} at (0,0) size 409x19 -- text run at (0,0) width 409: "Font: HelveticaNeue-Medium Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,904) size 769x19 -- RenderText {#text} at (0,0) size 419x19 -- text run at (0,0) width 419: "Font: HelveticaNeue-Medium Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,923) size 769x19 -- RenderText {#text} at (0,0) size 419x19 -- text run at (0,0) width 419: "Font: HelveticaNeue-Medium Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,942) size 769x19 -- RenderText {#text} at (0,0) size 419x19 -- text run at (0,0) width 419: "Font: HelveticaNeue-Medium Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,961) size 769x19 -- RenderText {#text} at (0,0) size 419x19 -- text run at (0,0) width 419: "Font: HelveticaNeue-Medium Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,980) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,999) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,1018) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,1037) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,1056) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,1075) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,1094) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,1113) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,1132) size 769x19 -- RenderText {#text} at (0,0) size 392x19 -- text run at (0,0) width 392: "Font: HelveticaNeue-Bold Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,1151) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: HelveticaNeue-UltraLightItalic Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,1169) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: HelveticaNeue-UltraLightItalic Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,1187) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: HelveticaNeue-UltraLightItalic Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,1205) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: HelveticaNeue-UltraLightItalic Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,1223) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: HelveticaNeue-UltraLightItalic Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,1241) size 769x19 -- RenderText {#text} at (0,0) size 470x19 -- text run at (0,0) width 470: "Font: HelveticaNeue-UltraLightItalic Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,1260) size 769x19 -- RenderText {#text} at (0,0) size 470x19 -- text run at (0,0) width 470: "Font: HelveticaNeue-UltraLightItalic Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,1279) size 769x19 -- RenderText {#text} at (0,0) size 470x19 -- text run at (0,0) width 470: "Font: HelveticaNeue-UltraLightItalic Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,1298) size 769x19 -- RenderText {#text} at (0,0) size 470x19 -- text run at (0,0) width 470: "Font: HelveticaNeue-UltraLightItalic Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,1317) size 769x18 -- RenderText {#text} at (0,0) size 391x18 -- text run at (0,0) width 391: "Font: HelveticaNeue-LightItalic Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,1335) size 769x18 -- RenderText {#text} at (0,0) size 391x18 -- text run at (0,0) width 391: "Font: HelveticaNeue-LightItalic Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,1353) size 769x18 -- RenderText {#text} at (0,0) size 391x18 -- text run at (0,0) width 391: "Font: HelveticaNeue-LightItalic Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,1371) size 769x18 -- RenderText {#text} at (0,0) size 391x18 -- text run at (0,0) width 391: "Font: HelveticaNeue-LightItalic Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,1389) size 769x18 -- RenderText {#text} at (0,0) size 391x18 -- text run at (0,0) width 391: "Font: HelveticaNeue-LightItalic Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,1407) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-LightItalic Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,1426) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-LightItalic Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,1445) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-LightItalic Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,1464) size 769x19 -- RenderText {#text} at (0,0) size 433x19 -- text run at (0,0) width 433: "Font: HelveticaNeue-LightItalic Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,1483) size 769x18 -- RenderText {#text} at (0,0) size 371x18 -- text run at (0,0) width 371: "Font: HelveticaNeue-Italic Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,1501) size 769x18 -- RenderText {#text} at (0,0) size 371x18 -- text run at (0,0) width 371: "Font: HelveticaNeue-Italic Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,1519) size 769x18 -- RenderText {#text} at (0,0) size 371x18 -- text run at (0,0) width 371: "Font: HelveticaNeue-Italic Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,1537) size 769x18 -- RenderText {#text} at (0,0) size 371x18 -- text run at (0,0) width 371: "Font: HelveticaNeue-Italic Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,1555) size 769x18 -- RenderText {#text} at (0,0) size 371x18 -- text run at (0,0) width 371: "Font: HelveticaNeue-Italic Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,1573) size 769x19 -- RenderText {#text} at (0,0) size 394x19 -- text run at (0,0) width 394: "Font: HelveticaNeue-Italic Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,1592) size 769x19 -- RenderText {#text} at (0,0) size 394x19 -- text run at (0,0) width 394: "Font: HelveticaNeue-Italic Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,1611) size 769x19 -- RenderText {#text} at (0,0) size 394x19 -- text run at (0,0) width 394: "Font: HelveticaNeue-Italic Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,1630) size 769x19 -- RenderText {#text} at (0,0) size 394x19 -- text run at (0,0) width 394: "Font: HelveticaNeue-Italic Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,1649) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,1668) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,1687) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,1706) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,1725) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,1744) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,1763) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,1782) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,1801) size 769x19 -- RenderText {#text} at (0,0) size 431x19 -- text run at (0,0) width 431: "Font: HelveticaNeue-BoldItalic Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,1820) size 769x18 -- RenderText {#text} at (0,0) size 287x18 -- text run at (0,0) width 287: "Font: Helvetica Neue Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,1838) size 769x18 -- RenderText {#text} at (0,0) size 299x18 -- text run at (0,0) width 299: "Font: Helvetica Neue Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,1856) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: Helvetica Neue Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,1874) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: Helvetica Neue Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,1892) size 769x19 -- RenderText {#text} at (0,0) size 329x19 -- text run at (0,0) width 329: "Font: Helvetica Neue Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,1911) size 769x19 -- RenderText {#text} at (0,0) size 340x19 -- text run at (0,0) width 340: "Font: Helvetica Neue Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,1930) size 769x19 -- RenderText {#text} at (0,0) size 340x19 -- text run at (0,0) width 340: "Font: Helvetica Neue Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,1949) size 769x19 -- RenderText {#text} at (0,0) size 340x19 -- text run at (0,0) width 340: "Font: Helvetica Neue Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,1968) size 769x19 -- RenderText {#text} at (0,0) size 340x19 -- text run at (0,0) width 340: "Font: Helvetica Neue Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,1987) size 769x18 -- RenderText {#text} at (0,0) size 345x18 -- text run at (0,0) width 345: "Font: HelveticaNeue-UltraLight Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,2005) size 769x18 -- RenderText {#text} at (0,0) size 361x18 -- text run at (0,0) width 361: "Font: HelveticaNeue-UltraLight Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,2023) size 769x18 -- RenderText {#text} at (0,0) size 376x18 -- text run at (0,0) width 376: "Font: HelveticaNeue-UltraLight Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,2041) size 769x18 -- RenderText {#text} at (0,0) size 391x18 -- text run at (0,0) width 391: "Font: HelveticaNeue-UltraLight Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,2059) size 769x19 -- RenderText {#text} at (0,0) size 404x19 -- text run at (0,0) width 404: "Font: HelveticaNeue-UltraLight Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,2078) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-UltraLight Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,2097) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-UltraLight Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,2116) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-UltraLight Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,2135) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-UltraLight Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,2154) size 769x18 -- RenderText {#text} at (0,0) size 317x18 -- text run at (0,0) width 317: "Font: HelveticaNeue-Light Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,2172) size 769x18 -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Font: HelveticaNeue-Light Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,2190) size 769x18 -- RenderText {#text} at (0,0) size 344x18 -- text run at (0,0) width 344: "Font: HelveticaNeue-Light Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,2208) size 769x18 -- RenderText {#text} at (0,0) size 357x18 -- text run at (0,0) width 357: "Font: HelveticaNeue-Light Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,2226) size 769x19 -- RenderText {#text} at (0,0) size 368x19 -- text run at (0,0) width 368: "Font: HelveticaNeue-Light Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,2245) size 769x19 -- RenderText {#text} at (0,0) size 381x19 -- text run at (0,0) width 381: "Font: HelveticaNeue-Light Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,2264) size 769x19 -- RenderText {#text} at (0,0) size 381x19 -- text run at (0,0) width 381: "Font: HelveticaNeue-Light Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,2283) size 769x19 -- RenderText {#text} at (0,0) size 381x19 -- text run at (0,0) width 381: "Font: HelveticaNeue-Light Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,2302) size 769x19 -- RenderText {#text} at (0,0) size 381x19 -- text run at (0,0) width 381: "Font: HelveticaNeue-Light Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,2321) size 769x18 -- RenderText {#text} at (0,0) size 282x18 -- text run at (0,0) width 282: "Font: HelveticaNeue Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,2339) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: HelveticaNeue Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,2357) size 769x18 -- RenderText {#text} at (0,0) size 304x18 -- text run at (0,0) width 304: "Font: HelveticaNeue Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,2375) size 769x18 -- RenderText {#text} at (0,0) size 315x18 -- text run at (0,0) width 315: "Font: HelveticaNeue Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,2393) size 769x19 -- RenderText {#text} at (0,0) size 325x19 -- text run at (0,0) width 325: "Font: HelveticaNeue Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,2412) size 769x19 -- RenderText {#text} at (0,0) size 336x19 -- text run at (0,0) width 336: "Font: HelveticaNeue Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,2431) size 769x19 -- RenderText {#text} at (0,0) size 336x19 -- text run at (0,0) width 336: "Font: HelveticaNeue Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,2450) size 769x19 -- RenderText {#text} at (0,0) size 336x19 -- text run at (0,0) width 336: "Font: HelveticaNeue Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,2469) size 769x19 -- RenderText {#text} at (0,0) size 336x19 -- text run at (0,0) width 336: "Font: HelveticaNeue Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,2488) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: HelveticaNeue-Medium Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,2506) size 769x18 -- RenderText {#text} at (0,0) size 354x18 -- text run at (0,0) width 354: "Font: HelveticaNeue-Medium Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,2524) size 769x18 -- RenderText {#text} at (0,0) size 366x18 -- text run at (0,0) width 366: "Font: HelveticaNeue-Medium Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,2542) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: HelveticaNeue-Medium Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,2560) size 769x19 -- RenderText {#text} at (0,0) size 391x19 -- text run at (0,0) width 391: "Font: HelveticaNeue-Medium Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,2579) size 769x19 -- RenderText {#text} at (0,0) size 404x19 -- text run at (0,0) width 404: "Font: HelveticaNeue-Medium Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,2598) size 769x19 -- RenderText {#text} at (0,0) size 404x19 -- text run at (0,0) width 404: "Font: HelveticaNeue-Medium Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,2617) size 769x19 -- RenderText {#text} at (0,0) size 404x19 -- text run at (0,0) width 404: "Font: HelveticaNeue-Medium Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,2636) size 769x19 -- RenderText {#text} at (0,0) size 404x19 -- text run at (0,0) width 404: "Font: HelveticaNeue-Medium Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,2655) size 769x18 -- RenderText {#text} at (0,0) size 316x18 -- text run at (0,0) width 316: "Font: HelveticaNeue-Bold Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,2673) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: HelveticaNeue-Bold Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,2691) size 769x18 -- RenderText {#text} at (0,0) size 342x18 -- text run at (0,0) width 342: "Font: HelveticaNeue-Bold Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,2709) size 769x18 -- RenderText {#text} at (0,0) size 355x18 -- text run at (0,0) width 355: "Font: HelveticaNeue-Bold Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,2727) size 769x19 -- RenderText {#text} at (0,0) size 365x19 -- text run at (0,0) width 365: "Font: HelveticaNeue-Bold Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,2746) size 769x19 -- RenderText {#text} at (0,0) size 377x19 -- text run at (0,0) width 377: "Font: HelveticaNeue-Bold Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,2765) size 769x19 -- RenderText {#text} at (0,0) size 377x19 -- text run at (0,0) width 377: "Font: HelveticaNeue-Bold Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,2784) size 769x19 -- RenderText {#text} at (0,0) size 377x19 -- text run at (0,0) width 377: "Font: HelveticaNeue-Bold Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,2803) size 769x19 -- RenderText {#text} at (0,0) size 377x19 -- text run at (0,0) width 377: "Font: HelveticaNeue-Bold Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,2822) size 769x18 -- RenderText {#text} at (0,0) size 372x18 -- text run at (0,0) width 372: "Font: HelveticaNeue-UltraLightItalic Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,2840) size 769x18 -- RenderText {#text} at (0,0) size 372x18 -- text run at (0,0) width 372: "Font: HelveticaNeue-UltraLightItalic Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,2858) size 769x18 -- RenderText {#text} at (0,0) size 372x18 -- text run at (0,0) width 372: "Font: HelveticaNeue-UltraLightItalic Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,2876) size 769x18 -- RenderText {#text} at (0,0) size 372x18 -- text run at (0,0) width 372: "Font: HelveticaNeue-UltraLightItalic Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,2894) size 769x18 -- RenderText {#text} at (0,0) size 372x18 -- text run at (0,0) width 372: "Font: HelveticaNeue-UltraLightItalic Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,2912) size 769x19 -- RenderText {#text} at (0,0) size 455x19 -- text run at (0,0) width 455: "Font: HelveticaNeue-UltraLightItalic Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,2931) size 769x19 -- RenderText {#text} at (0,0) size 455x19 -- text run at (0,0) width 455: "Font: HelveticaNeue-UltraLightItalic Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,2950) size 769x19 -- RenderText {#text} at (0,0) size 455x19 -- text run at (0,0) width 455: "Font: HelveticaNeue-UltraLightItalic Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,2969) size 769x19 -- RenderText {#text} at (0,0) size 455x19 -- text run at (0,0) width 455: "Font: HelveticaNeue-UltraLightItalic Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,2988) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: HelveticaNeue-LightItalic Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,3006) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: HelveticaNeue-LightItalic Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,3024) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: HelveticaNeue-LightItalic Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,3042) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: HelveticaNeue-LightItalic Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,3060) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: HelveticaNeue-LightItalic Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,3078) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-LightItalic Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,3097) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-LightItalic Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,3116) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-LightItalic Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,3135) size 769x19 -- RenderText {#text} at (0,0) size 418x19 -- text run at (0,0) width 418: "Font: HelveticaNeue-LightItalic Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,3154) size 769x18 -- RenderText {#text} at (0,0) size 355x18 -- text run at (0,0) width 355: "Font: HelveticaNeue-Italic Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,3172) size 769x18 -- RenderText {#text} at (0,0) size 355x18 -- text run at (0,0) width 355: "Font: HelveticaNeue-Italic Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,3190) size 769x18 -- RenderText {#text} at (0,0) size 355x18 -- text run at (0,0) width 355: "Font: HelveticaNeue-Italic Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,3208) size 769x18 -- RenderText {#text} at (0,0) size 355x18 -- text run at (0,0) width 355: "Font: HelveticaNeue-Italic Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,3226) size 769x18 -- RenderText {#text} at (0,0) size 355x18 -- text run at (0,0) width 355: "Font: HelveticaNeue-Italic Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,3244) size 769x19 -- RenderText {#text} at (0,0) size 379x19 -- text run at (0,0) width 379: "Font: HelveticaNeue-Italic Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,3263) size 769x19 -- RenderText {#text} at (0,0) size 379x19 -- text run at (0,0) width 379: "Font: HelveticaNeue-Italic Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,3282) size 769x19 -- RenderText {#text} at (0,0) size 379x19 -- text run at (0,0) width 379: "Font: HelveticaNeue-Italic Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,3301) size 769x19 -- RenderText {#text} at (0,0) size 379x19 -- text run at (0,0) width 379: "Font: HelveticaNeue-Italic Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,3320) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,3339) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,3358) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,3377) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,3396) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,3415) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,3434) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,3453) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,3472) size 769x19 -- RenderText {#text} at (0,0) size 414x19 -- text run at (0,0) width 414: "Font: HelveticaNeue-BoldItalic Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,3491) size 769x18 -- RenderText {#text} at (0,0) size 254x18 -- text run at (0,0) width 254: "Font: Avenir Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,3509) size 769x18 -- RenderText {#text} at (0,0) size 254x18 -- text run at (0,0) width 254: "Font: Avenir Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,3527) size 769x18 -- RenderText {#text} at (0,0) size 254x18 -- text run at (0,0) width 254: "Font: Avenir Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,3545) size 769x18 -- RenderText {#text} at (0,0) size 254x18 -- text run at (0,0) width 254: "Font: Avenir Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,3563) size 769x18 -- RenderText {#text} at (0,0) size 254x18 -- text run at (0,0) width 254: "Font: Avenir Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,3581) size 769x18 -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "Font: Avenir Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,3599) size 769x18 -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "Font: Avenir Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,3617) size 769x18 -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "Font: Avenir Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,3635) size 769x18 -- RenderText {#text} at (0,0) size 271x18 -- text run at (0,0) width 271: "Font: Avenir Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,3653) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Light Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,3671) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Light Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,3689) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Light Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,3707) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Light Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,3725) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Light Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,3743) size 769x18 -- RenderText {#text} at (0,0) size 313x18 -- text run at (0,0) width 313: "Font: Avenir-Light Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,3761) size 769x18 -- RenderText {#text} at (0,0) size 313x18 -- text run at (0,0) width 313: "Font: Avenir-Light Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,3779) size 769x18 -- RenderText {#text} at (0,0) size 313x18 -- text run at (0,0) width 313: "Font: Avenir-Light Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,3797) size 769x18 -- RenderText {#text} at (0,0) size 313x18 -- text run at (0,0) width 313: "Font: Avenir-Light Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,3815) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Book Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,3833) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Book Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,3851) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Book Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,3869) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Book Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,3887) size 769x18 -- RenderText {#text} at (0,0) size 294x18 -- text run at (0,0) width 294: "Font: Avenir-Book Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,3905) size 769x18 -- RenderText {#text} at (0,0) size 311x18 -- text run at (0,0) width 311: "Font: Avenir-Book Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,3923) size 769x18 -- RenderText {#text} at (0,0) size 311x18 -- text run at (0,0) width 311: "Font: Avenir-Book Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,3941) size 769x18 -- RenderText {#text} at (0,0) size 311x18 -- text run at (0,0) width 311: "Font: Avenir-Book Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,3959) size 769x18 -- RenderText {#text} at (0,0) size 311x18 -- text run at (0,0) width 311: "Font: Avenir-Book Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,3977) size 769x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "Font: Avenir-Medium Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,3995) size 769x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "Font: Avenir-Medium Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4013) size 769x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "Font: Avenir-Medium Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,4031) size 769x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "Font: Avenir-Medium Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,4049) size 769x18 -- RenderText {#text} at (0,0) size 314x18 -- text run at (0,0) width 314: "Font: Avenir-Medium Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,4067) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-Medium Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,4085) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-Medium Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,4103) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-Medium Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,4121) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-Medium Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,4139) size 769x18 -- RenderText {#text} at (0,0) size 297x18 -- text run at (0,0) width 297: "Font: Avenir-Black Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,4157) size 769x18 -- RenderText {#text} at (0,0) size 297x18 -- text run at (0,0) width 297: "Font: Avenir-Black Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4175) size 769x18 -- RenderText {#text} at (0,0) size 297x18 -- text run at (0,0) width 297: "Font: Avenir-Black Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,4193) size 769x18 -- RenderText {#text} at (0,0) size 297x18 -- text run at (0,0) width 297: "Font: Avenir-Black Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,4211) size 769x18 -- RenderText {#text} at (0,0) size 297x18 -- text run at (0,0) width 297: "Font: Avenir-Black Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,4229) size 769x18 -- RenderText {#text} at (0,0) size 315x18 -- text run at (0,0) width 315: "Font: Avenir-Black Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,4247) size 769x18 -- RenderText {#text} at (0,0) size 315x18 -- text run at (0,0) width 315: "Font: Avenir-Black Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,4265) size 769x18 -- RenderText {#text} at (0,0) size 315x18 -- text run at (0,0) width 315: "Font: Avenir-Black Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,4283) size 769x18 -- RenderText {#text} at (0,0) size 315x18 -- text run at (0,0) width 315: "Font: Avenir-Black Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,4301) size 769x18 -- RenderText {#text} at (0,0) size 301x18 -- text run at (0,0) width 301: "Font: Avenir-Heavy Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,4319) size 769x18 -- RenderText {#text} at (0,0) size 301x18 -- text run at (0,0) width 301: "Font: Avenir-Heavy Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4337) size 769x18 -- RenderText {#text} at (0,0) size 301x18 -- text run at (0,0) width 301: "Font: Avenir-Heavy Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,4355) size 769x18 -- RenderText {#text} at (0,0) size 301x18 -- text run at (0,0) width 301: "Font: Avenir-Heavy Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,4373) size 769x18 -- RenderText {#text} at (0,0) size 301x18 -- text run at (0,0) width 301: "Font: Avenir-Heavy Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,4391) size 769x18 -- RenderText {#text} at (0,0) size 319x18 -- text run at (0,0) width 319: "Font: Avenir-Heavy Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,4409) size 769x18 -- RenderText {#text} at (0,0) size 319x18 -- text run at (0,0) width 319: "Font: Avenir-Heavy Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,4427) size 769x18 -- RenderText {#text} at (0,0) size 319x18 -- text run at (0,0) width 319: "Font: Avenir-Heavy Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,4445) size 769x18 -- RenderText {#text} at (0,0) size 319x18 -- text run at (0,0) width 319: "Font: Avenir-Heavy Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,4463) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-LightOblique Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,4481) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-LightOblique Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4499) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-LightOblique Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,4517) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-LightOblique Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,4535) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-LightOblique Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,4553) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: Avenir-LightOblique Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,4571) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: Avenir-LightOblique Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,4589) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: Avenir-LightOblique Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,4607) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: Avenir-LightOblique Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,4625) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-BookOblique Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,4643) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-BookOblique Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4661) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-BookOblique Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,4679) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-BookOblique Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,4697) size 769x18 -- RenderText {#text} at (0,0) size 346x18 -- text run at (0,0) width 346: "Font: Avenir-BookOblique Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,4715) size 769x18 -- RenderText {#text} at (0,0) size 366x18 -- text run at (0,0) width 366: "Font: Avenir-BookOblique Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,4733) size 769x18 -- RenderText {#text} at (0,0) size 366x18 -- text run at (0,0) width 366: "Font: Avenir-BookOblique Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,4751) size 769x18 -- RenderText {#text} at (0,0) size 366x18 -- text run at (0,0) width 366: "Font: Avenir-BookOblique Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,4769) size 769x18 -- RenderText {#text} at (0,0) size 366x18 -- text run at (0,0) width 366: "Font: Avenir-BookOblique Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,4787) size 769x18 -- RenderText {#text} at (0,0) size 365x18 -- text run at (0,0) width 365: "Font: Avenir-MediumOblique Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,4805) size 769x18 -- RenderText {#text} at (0,0) size 365x18 -- text run at (0,0) width 365: "Font: Avenir-MediumOblique Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4823) size 769x18 -- RenderText {#text} at (0,0) size 365x18 -- text run at (0,0) width 365: "Font: Avenir-MediumOblique Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,4841) size 769x18 -- RenderText {#text} at (0,0) size 365x18 -- text run at (0,0) width 365: "Font: Avenir-MediumOblique Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,4859) size 769x18 -- RenderText {#text} at (0,0) size 365x18 -- text run at (0,0) width 365: "Font: Avenir-MediumOblique Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,4877) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: Avenir-MediumOblique Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,4895) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: Avenir-MediumOblique Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,4913) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: Avenir-MediumOblique Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,4931) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: Avenir-MediumOblique Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,4949) size 769x18 -- RenderText {#text} at (0,0) size 348x18 -- text run at (0,0) width 348: "Font: Avenir-BlackOblique Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,4967) size 769x18 -- RenderText {#text} at (0,0) size 348x18 -- text run at (0,0) width 348: "Font: Avenir-BlackOblique Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,4985) size 769x18 -- RenderText {#text} at (0,0) size 348x18 -- text run at (0,0) width 348: "Font: Avenir-BlackOblique Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,5003) size 769x18 -- RenderText {#text} at (0,0) size 348x18 -- text run at (0,0) width 348: "Font: Avenir-BlackOblique Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,5021) size 769x18 -- RenderText {#text} at (0,0) size 348x18 -- text run at (0,0) width 348: "Font: Avenir-BlackOblique Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,5039) size 769x18 -- RenderText {#text} at (0,0) size 370x18 -- text run at (0,0) width 370: "Font: Avenir-BlackOblique Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,5057) size 769x18 -- RenderText {#text} at (0,0) size 370x18 -- text run at (0,0) width 370: "Font: Avenir-BlackOblique Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,5075) size 769x18 -- RenderText {#text} at (0,0) size 370x18 -- text run at (0,0) width 370: "Font: Avenir-BlackOblique Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,5093) size 769x18 -- RenderText {#text} at (0,0) size 370x18 -- text run at (0,0) width 370: "Font: Avenir-BlackOblique Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,5111) size 769x18 -- RenderText {#text} at (0,0) size 240x18 -- text run at (0,0) width 240: "Font: Avenir Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5129) size 769x18 -- RenderText {#text} at (0,0) size 240x18 -- text run at (0,0) width 240: "Font: Avenir Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5147) size 769x18 -- RenderText {#text} at (0,0) size 240x18 -- text run at (0,0) width 240: "Font: Avenir Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5165) size 769x18 -- RenderText {#text} at (0,0) size 240x18 -- text run at (0,0) width 240: "Font: Avenir Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5183) size 769x18 -- RenderText {#text} at (0,0) size 240x18 -- text run at (0,0) width 240: "Font: Avenir Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5201) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5219) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5237) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5255) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5273) size 769x18 -- RenderText {#text} at (0,0) size 279x18 -- text run at (0,0) width 279: "Font: Avenir-Light Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5291) size 769x18 -- RenderText {#text} at (0,0) size 279x18 -- text run at (0,0) width 279: "Font: Avenir-Light Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5309) size 769x18 -- RenderText {#text} at (0,0) size 279x18 -- text run at (0,0) width 279: "Font: Avenir-Light Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5327) size 769x18 -- RenderText {#text} at (0,0) size 279x18 -- text run at (0,0) width 279: "Font: Avenir-Light Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5345) size 769x18 -- RenderText {#text} at (0,0) size 279x18 -- text run at (0,0) width 279: "Font: Avenir-Light Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5363) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: Avenir-Light Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5381) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: Avenir-Light Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5399) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: Avenir-Light Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5417) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: Avenir-Light Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5435) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir-Book Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5453) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir-Book Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5471) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir-Book Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5489) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir-Book Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5507) size 769x18 -- RenderText {#text} at (0,0) size 278x18 -- text run at (0,0) width 278: "Font: Avenir-Book Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5525) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: Avenir-Book Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5543) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: Avenir-Book Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5561) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: Avenir-Book Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5579) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: Avenir-Book Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5597) size 769x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "Font: Avenir-Medium Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5615) size 769x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "Font: Avenir-Medium Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5633) size 769x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "Font: Avenir-Medium Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5651) size 769x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "Font: Avenir-Medium Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5669) size 769x18 -- RenderText {#text} at (0,0) size 298x18 -- text run at (0,0) width 298: "Font: Avenir-Medium Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5687) size 769x18 -- RenderText {#text} at (0,0) size 343x18 -- text run at (0,0) width 343: "Font: Avenir-Medium Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5705) size 769x18 -- RenderText {#text} at (0,0) size 343x18 -- text run at (0,0) width 343: "Font: Avenir-Medium Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5723) size 769x18 -- RenderText {#text} at (0,0) size 343x18 -- text run at (0,0) width 343: "Font: Avenir-Medium Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5741) size 769x18 -- RenderText {#text} at (0,0) size 343x18 -- text run at (0,0) width 343: "Font: Avenir-Medium Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5759) size 769x18 -- RenderText {#text} at (0,0) size 282x18 -- text run at (0,0) width 282: "Font: Avenir-Black Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5777) size 769x18 -- RenderText {#text} at (0,0) size 282x18 -- text run at (0,0) width 282: "Font: Avenir-Black Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5795) size 769x18 -- RenderText {#text} at (0,0) size 282x18 -- text run at (0,0) width 282: "Font: Avenir-Black Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5813) size 769x18 -- RenderText {#text} at (0,0) size 282x18 -- text run at (0,0) width 282: "Font: Avenir-Black Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5831) size 769x18 -- RenderText {#text} at (0,0) size 282x18 -- text run at (0,0) width 282: "Font: Avenir-Black Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5849) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: Avenir-Black Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5867) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: Avenir-Black Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5885) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: Avenir-Black Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5903) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: Avenir-Black Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5921) size 769x18 -- RenderText {#text} at (0,0) size 286x18 -- text run at (0,0) width 286: "Font: Avenir-Heavy Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5939) size 769x18 -- RenderText {#text} at (0,0) size 286x18 -- text run at (0,0) width 286: "Font: Avenir-Heavy Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5957) size 769x18 -- RenderText {#text} at (0,0) size 286x18 -- text run at (0,0) width 286: "Font: Avenir-Heavy Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5975) size 769x18 -- RenderText {#text} at (0,0) size 286x18 -- text run at (0,0) width 286: "Font: Avenir-Heavy Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5993) size 769x18 -- RenderText {#text} at (0,0) size 286x18 -- text run at (0,0) width 286: "Font: Avenir-Heavy Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,6011) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-Heavy Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,6029) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-Heavy Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,6047) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-Heavy Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,6065) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-Heavy Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,6083) size 769x18 -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Font: Avenir-LightOblique Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,6101) size 769x18 -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Font: Avenir-LightOblique Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,6119) size 769x18 -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Font: Avenir-LightOblique Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,6137) size 769x18 -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Font: Avenir-LightOblique Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,6155) size 769x18 -- RenderText {#text} at (0,0) size 331x18 -- text run at (0,0) width 331: "Font: Avenir-LightOblique Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,6173) size 769x18 -- RenderText {#text} at (0,0) size 382x18 -- text run at (0,0) width 382: "Font: Avenir-LightOblique Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,6191) size 769x18 -- RenderText {#text} at (0,0) size 382x18 -- text run at (0,0) width 382: "Font: Avenir-LightOblique Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,6209) size 769x18 -- RenderText {#text} at (0,0) size 382x18 -- text run at (0,0) width 382: "Font: Avenir-LightOblique Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,6227) size 769x18 -- RenderText {#text} at (0,0) size 382x18 -- text run at (0,0) width 382: "Font: Avenir-LightOblique Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,6245) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-BookOblique Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,6263) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-BookOblique Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,6281) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-BookOblique Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,6299) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-BookOblique Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,6317) size 769x18 -- RenderText {#text} at (0,0) size 330x18 -- text run at (0,0) width 330: "Font: Avenir-BookOblique Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,6335) size 769x18 -- RenderText {#text} at (0,0) size 380x18 -- text run at (0,0) width 380: "Font: Avenir-BookOblique Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,6353) size 769x18 -- RenderText {#text} at (0,0) size 380x18 -- text run at (0,0) width 380: "Font: Avenir-BookOblique Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,6371) size 769x18 -- RenderText {#text} at (0,0) size 380x18 -- text run at (0,0) width 380: "Font: Avenir-BookOblique Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,6389) size 769x18 -- RenderText {#text} at (0,0) size 380x18 -- text run at (0,0) width 380: "Font: Avenir-BookOblique Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,6407) size 769x18 -- RenderText {#text} at (0,0) size 349x18 -- text run at (0,0) width 349: "Font: Avenir-MediumOblique Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,6425) size 769x18 -- RenderText {#text} at (0,0) size 349x18 -- text run at (0,0) width 349: "Font: Avenir-MediumOblique Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,6443) size 769x18 -- RenderText {#text} at (0,0) size 349x18 -- text run at (0,0) width 349: "Font: Avenir-MediumOblique Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,6461) size 769x18 -- RenderText {#text} at (0,0) size 349x18 -- text run at (0,0) width 349: "Font: Avenir-MediumOblique Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,6479) size 769x18 -- RenderText {#text} at (0,0) size 349x18 -- text run at (0,0) width 349: "Font: Avenir-MediumOblique Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,6497) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: Avenir-MediumOblique Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,6515) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: Avenir-MediumOblique Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,6533) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: Avenir-MediumOblique Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,6551) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: Avenir-MediumOblique Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,6569) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-BlackOblique Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,6587) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-BlackOblique Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,6605) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-BlackOblique Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,6623) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-BlackOblique Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,6641) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: Avenir-BlackOblique Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,6659) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: Avenir-BlackOblique Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,6677) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: Avenir-BlackOblique Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,6695) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: Avenir-BlackOblique Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,6713) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: Avenir-BlackOblique Weight: 900 Style: italic" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/font-weights-zh-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/font-weights-zh-expected.txt -deleted file mode 100644 -index 0f899851c18013a6d8af4d30cf90f8f6c11ffd70..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/font-weights-zh-expected.txt -+++ /dev/null -@@ -1,2285 +0,0 @@ --layer at (0,0) size 785x15064 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x15064 -- RenderBlock {HTML} at (0,0) size 785x15064 -- RenderBody {BODY} at (8,8) size 769x15048 -- RenderBlock (anonymous) at (0,0) size 769x144 -- RenderText {#text} at (0,0) size 769x72 -- text run at (0,0) width 746: "This test is designed to test the interaction between font-family and font-weight. In particular, our implementation of" -- text run at (0,18) width 759: "font-family accepts PostScript names, which may name a font with a particular weight. However, there is another CSS" -- text run at (0,36) width 769: "property, font-weight, in which the author may also name a particular weight. Our font selection algorithm takes both of" -- text run at (0,54) width 305: "these signals into account when choosing fonts." -- RenderBR {BR} at (304,54) size 1x18 -- RenderBR {BR} at (0,72) size 0x18 -- RenderText {#text} at (0,90) size 767x54 -- text run at (0,90) width 767: "There is currently no good way in JavaScript to find the actual font chosen for some text. Therefore, the best way to test" -- text run at (0,108) width 732: "this aspect of the font selection algorithm is to dump the render tree, therefore testing glyph advances (which are a" -- text run at (0,126) width 159: "property of font weight)." -- RenderBlock {DIV} at (0,144) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,162) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,178) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,196) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,212) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,230) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,246) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,264) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,280) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,298) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,314) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,332) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,348) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,366) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,382) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,400) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,416) size 769x18 -- RenderText {#text} at (0,0) size 267x18 -- text run at (0,0) width 267: "Font: Heiti SC Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,434) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,450) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,468) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,484) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,502) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,518) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,536) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,552) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,570) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,586) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,604) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,620) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,638) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,654) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,672) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,688) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,706) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,722) size 769x18 -- RenderText {#text} at (0,0) size 321x18 -- text run at (0,0) width 321: "Font: STHeitiSC-Light Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,740) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,756) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,774) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,790) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,808) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,824) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,842) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,858) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,876) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,892) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,910) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,926) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,944) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,960) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,978) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,994) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,1012) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1028) size 769x18 -- RenderText {#text} at (0,0) size 341x18 -- text run at (0,0) width 341: "Font: STHeitiSC-Medium Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,1046) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1062) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,1080) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1096) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,1114) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1130) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,1148) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1164) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,1182) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1198) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,1216) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1232) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,1250) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1266) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,1284) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1300) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,1318) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1334) size 769x18 -- RenderText {#text} at (0,0) size 253x18 -- text run at (0,0) width 253: "Font: Heiti SC Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,1352) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1368) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,1386) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1402) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,1420) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1436) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,1454) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1470) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,1488) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1504) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,1522) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1538) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,1556) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1572) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,1590) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1606) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,1624) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1640) size 769x18 -- RenderText {#text} at (0,0) size 308x18 -- text run at (0,0) width 308: "Font: STHeitiSC-Light Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,1658) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1674) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,1692) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1708) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,1726) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1742) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,1760) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1776) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,1794) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1810) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,1828) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1844) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,1862) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1878) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,1896) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1912) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,1930) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1946) size 769x18 -- RenderText {#text} at (0,0) size 328x18 -- text run at (0,0) width 328: "Font: STHeitiSC-Medium Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,1964) size 769x16 -- RenderText {#text} at (0,0) size 144x16 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,1980) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,1998) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2020) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,2038) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2060) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,2078) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2100) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,2118) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2140) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,2158) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2180) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,2198) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2220) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,2238) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2260) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,2278) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2300) size 769x18 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "Font: Songti SC Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,2318) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2340) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,2358) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2380) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,2398) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2420) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,2438) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2460) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,2478) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2500) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,2518) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2540) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,2558) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2580) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,2598) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2620) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,2638) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2660) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: STSongti-SC-Regular Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,2678) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2700) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,2718) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2740) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,2758) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2780) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,2798) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2820) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,2838) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2860) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,2878) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2900) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,2918) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2940) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,2958) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,2980) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,2998) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3020) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: STSongti-SC-Light Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,3038) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3060) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,3078) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3100) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,3118) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3140) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,3158) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3180) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,3198) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3220) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,3238) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3260) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,3278) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3300) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,3318) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3340) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,3358) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3380) size 769x18 -- RenderText {#text} at (0,0) size 333x18 -- text run at (0,0) width 333: "Font: STSongti-SC-Bold Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,3398) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3420) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,3438) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3460) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,3478) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3500) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,3518) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3540) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,3558) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3580) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,3598) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3620) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,3638) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3660) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,3678) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3700) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,3718) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3740) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Black Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,3758) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3780) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,3798) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3820) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,3838) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3860) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,3878) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3900) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,3918) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3940) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,3958) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,3980) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,3998) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4020) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,4038) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4060) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,4078) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4100) size 769x18 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "Font: Songti SC Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,4118) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4140) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,4158) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4180) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,4198) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4220) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,4238) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4260) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,4278) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4300) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,4318) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4340) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,4358) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4380) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,4398) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4420) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,4438) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4460) size 769x18 -- RenderText {#text} at (0,0) size 339x18 -- text run at (0,0) width 339: "Font: STSongti-SC-Regular Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,4478) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4500) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,4518) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4540) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,4558) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4580) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,4598) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4620) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,4638) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4660) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,4678) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4700) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,4718) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4740) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,4758) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4780) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,4798) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4820) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: STSongti-SC-Light Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,4838) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4860) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,4878) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4900) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,4918) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4940) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,4958) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,4980) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,4998) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5020) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5038) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5060) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5078) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5100) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5118) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5140) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5158) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5180) size 769x18 -- RenderText {#text} at (0,0) size 320x18 -- text run at (0,0) width 320: "Font: STSongti-SC-Bold Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5198) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5220) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,5238) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5260) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,5278) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5300) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,5318) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5340) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,5358) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5380) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,5398) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5420) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,5438) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5460) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,5478) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5500) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,5518) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5540) size 769x18 -- RenderText {#text} at (0,0) size 326x18 -- text run at (0,0) width 326: "Font: STSongti-SC-Black Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,5558) size 769x22 -- RenderText {#text} at (0,0) size 144x22 -- text run at (0,0) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5580) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,5598) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5622) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,5640) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5664) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,5682) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5706) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,5724) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5748) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,5766) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5790) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,5808) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5832) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,5850) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5874) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,5892) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5916) size 769x18 -- RenderText {#text} at (0,0) size 392x18 -- text run at (0,0) width 392: "Font: Hiragino Kaku Gothic ProN Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,5934) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,5958) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,5976) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6000) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,6018) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6042) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,6060) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6084) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,6102) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6126) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,6144) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6168) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,6186) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6210) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,6228) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6252) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,6270) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6294) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W3 Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,6312) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6336) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,6354) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6378) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,6396) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6420) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,6438) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6462) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,6480) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6504) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,6522) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6546) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,6564) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6588) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,6606) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6630) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,6648) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6672) size 769x18 -- RenderText {#text} at (0,0) size 337x18 -- text run at (0,0) width 337: "Font: HiraKakuProN-W6 Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,6690) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6714) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,6732) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6756) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,6774) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6798) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,6816) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6840) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,6858) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6882) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,6900) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6924) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,6942) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,6966) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,6984) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7008) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,7026) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7050) size 769x18 -- RenderText {#text} at (0,0) size 379x18 -- text run at (0,0) width 379: "Font: Hiragino Kaku Gothic ProN Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,7068) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7092) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,7110) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7134) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,7152) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7176) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,7194) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7218) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,7236) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7260) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,7278) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7302) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,7320) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7344) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,7362) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7386) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,7404) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7428) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W3 Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,7446) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7470) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,7488) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7512) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,7530) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7554) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,7572) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7596) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,7614) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7638) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,7656) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7680) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,7698) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7722) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,7740) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7764) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,7782) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7806) size 769x18 -- RenderText {#text} at (0,0) size 323x18 -- text run at (0,0) width 323: "Font: HiraKakuProN-W6 Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,7824) size 769x24 -- RenderText {#text} at (0,3) size 144x17 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7848) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,7866) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7888) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,7906) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7928) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,7946) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,7968) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,7986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8008) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,8026) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8048) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,8066) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8088) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,8106) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8128) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,8146) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8168) size 769x18 -- RenderText {#text} at (0,0) size 353x18 -- text run at (0,0) width 353: "Font: Apple SD Gothic Neo Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,8186) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8208) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,8226) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8248) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,8266) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8288) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,8306) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8328) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,8346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8368) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,8386) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8408) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,8426) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8448) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,8466) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8488) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,8506) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8528) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-Regular Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,8546) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8568) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,8586) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8608) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,8626) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8648) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,8666) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8688) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,8706) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8728) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,8746) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8768) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,8786) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8808) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,8826) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8848) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,8866) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8888) size 769x18 -- RenderText {#text} at (0,0) size 401x18 -- text run at (0,0) width 401: "Font: AppleSDGothicNeo-Medium Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,8906) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8928) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,8946) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,8968) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,8986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9008) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,9026) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9048) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,9066) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9088) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,9106) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9128) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,9146) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9168) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,9186) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9208) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,9226) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9248) size 769x18 -- RenderText {#text} at (0,0) size 381x18 -- text run at (0,0) width 381: "Font: AppleSDGothicNeo-Light Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,9266) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9288) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,9306) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9328) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,9346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9368) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,9386) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9408) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,9426) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9448) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,9466) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9488) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,9506) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9528) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,9546) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9568) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,9586) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9608) size 769x18 -- RenderText {#text} at (0,0) size 414x18 -- text run at (0,0) width 414: "Font: AppleSDGothicNeo-UltraLight Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,9626) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9648) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,9666) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9688) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,9706) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9728) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,9746) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9768) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,9786) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9808) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,9826) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9848) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,9866) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9888) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,9906) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9928) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,9946) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,9968) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Thin Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,9986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10008) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,10026) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10048) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,10066) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10088) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,10106) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10128) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,10146) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10168) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,10186) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10208) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,10226) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10248) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,10266) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10288) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,10306) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10328) size 769x18 -- RenderText {#text} at (0,0) size 410x18 -- text run at (0,0) width 410: "Font: AppleSDGothicNeo-SemiBold Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,10346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10368) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,10386) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10408) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,10426) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10448) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,10466) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10488) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,10506) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10528) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,10546) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10568) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,10586) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10608) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,10626) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10648) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,10666) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10688) size 769x18 -- RenderText {#text} at (0,0) size 377x18 -- text run at (0,0) width 377: "Font: AppleSDGothicNeo-Bold Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,10706) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10728) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,10746) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10768) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,10786) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10808) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,10826) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10848) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,10866) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10888) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,10906) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10928) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,10946) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,10968) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,10986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11008) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,11026) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11048) size 769x18 -- RenderText {#text} at (0,0) size 412x18 -- text run at (0,0) width 412: "Font: AppleSDGothicNeo-ExtraBold Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,11066) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11088) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 100 Style: normal" -- RenderBlock {DIV} at (0,11106) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11128) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 200 Style: normal" -- RenderBlock {DIV} at (0,11146) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11168) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 300 Style: normal" -- RenderBlock {DIV} at (0,11186) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11208) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 400 Style: normal" -- RenderBlock {DIV} at (0,11226) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11248) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 500 Style: normal" -- RenderBlock {DIV} at (0,11266) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11288) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 600 Style: normal" -- RenderBlock {DIV} at (0,11306) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11328) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 700 Style: normal" -- RenderBlock {DIV} at (0,11346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11368) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 800 Style: normal" -- RenderBlock {DIV} at (0,11386) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11408) size 769x18 -- RenderText {#text} at (0,0) size 388x18 -- text run at (0,0) width 388: "Font: AppleSDGothicNeo-Heavy Weight: 900 Style: normal" -- RenderBlock {DIV} at (0,11426) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11448) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,11466) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11488) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,11506) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11528) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,11546) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11568) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,11586) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11608) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,11626) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11648) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,11666) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11688) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,11706) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11728) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,11746) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11768) size 769x18 -- RenderText {#text} at (0,0) size 340x18 -- text run at (0,0) width 340: "Font: Apple SD Gothic Neo Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,11786) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11808) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,11826) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11848) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,11866) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11888) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,11906) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11928) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,11946) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,11968) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,11986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12008) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,12026) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12048) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,12066) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12088) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,12106) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12128) size 769x18 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "Font: AppleSDGothicNeo-Regular Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,12146) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12168) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,12186) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12208) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,12226) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12248) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,12266) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12288) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,12306) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12328) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,12346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12368) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,12386) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12408) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,12426) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12448) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,12466) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12488) size 769x18 -- RenderText {#text} at (0,0) size 387x18 -- text run at (0,0) width 387: "Font: AppleSDGothicNeo-Medium Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,12506) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12528) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,12546) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12568) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,12586) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12608) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,12626) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12648) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,12666) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12688) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,12706) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12728) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,12746) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12768) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,12786) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12808) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,12826) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12848) size 769x18 -- RenderText {#text} at (0,0) size 368x18 -- text run at (0,0) width 368: "Font: AppleSDGothicNeo-Light Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,12866) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12888) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,12906) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12928) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,12946) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,12968) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,12986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13008) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,13026) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13048) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,13066) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13088) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,13106) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13128) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,13146) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13168) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,13186) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13208) size 769x18 -- RenderText {#text} at (0,0) size 400x18 -- text run at (0,0) width 400: "Font: AppleSDGothicNeo-UltraLight Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,13226) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13248) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,13266) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13288) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,13306) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13328) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,13346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13368) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,13386) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13408) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,13426) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13448) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,13466) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13488) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,13506) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13528) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,13546) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13568) size 769x18 -- RenderText {#text} at (0,0) size 363x18 -- text run at (0,0) width 363: "Font: AppleSDGothicNeo-Thin Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,13586) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13608) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,13626) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13648) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,13666) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13688) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,13706) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13728) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,13746) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13768) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,13786) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13808) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,13826) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13848) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,13866) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13888) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,13906) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13928) size 769x18 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "Font: AppleSDGothicNeo-SemiBold Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,13946) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,13968) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,13986) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14008) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,14026) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14048) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,14066) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14088) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,14106) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14128) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,14146) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14168) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,14186) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14208) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,14226) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14248) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,14266) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14288) size 769x18 -- RenderText {#text} at (0,0) size 364x18 -- text run at (0,0) width 364: "Font: AppleSDGothicNeo-Bold Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,14306) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14328) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,14346) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14368) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,14386) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14408) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,14426) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14448) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,14466) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14488) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,14506) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14528) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,14546) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14568) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,14586) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14608) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,14626) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14648) size 769x18 -- RenderText {#text} at (0,0) size 399x18 -- text run at (0,0) width 399: "Font: AppleSDGothicNeo-ExtraBold Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,14666) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14688) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 100 Style: italic" -- RenderBlock {DIV} at (0,14706) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14728) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 200 Style: italic" -- RenderBlock {DIV} at (0,14746) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14768) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 300 Style: italic" -- RenderBlock {DIV} at (0,14786) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14808) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 400 Style: italic" -- RenderBlock {DIV} at (0,14826) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14848) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 500 Style: italic" -- RenderBlock {DIV} at (0,14866) size 769x22 -- RenderText {#text} at (0,3) size 144x18 -- text run at (0,3) width 144: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14888) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 600 Style: italic" -- RenderBlock {DIV} at (0,14906) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14928) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 700 Style: italic" -- RenderBlock {DIV} at (0,14946) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,14968) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 800 Style: italic" -- RenderBlock {DIV} at (0,14986) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -- RenderBlock {DIV} at (0,15008) size 769x18 -- RenderText {#text} at (0,0) size 375x18 -- text run at (0,0) width 375: "Font: AppleSDGothicNeo-Heavy Weight: 900 Style: italic" -- RenderBlock {DIV} at (0,15026) size 769x22 -- RenderText {#text} at (0,3) size 153x18 -- text run at (0,3) width 153: "\x{679C}\x{57CE}\x{7684}\x{7F8E}\x{8B7D}\x{3002}\x{4E2D}\x{56FD}\x{53E4}" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/hyphenate-avoid-orphaned-word-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/hyphenate-avoid-orphaned-word-expected.txt -deleted file mode 100644 -index 2131efb3f61ba352bb750c73796cbd8a5bdc389c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/hyphenate-avoid-orphaned-word-expected.txt -+++ /dev/null -@@ -1,93 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock (floating) {DIV} at (4,0) size 344x240 -- RenderBlock {P} at (0,16) size 344x18 -- RenderText {#text} at (0,0) size 208x18 -- text run at (0,0) width 208: "The initial value (should be like " -- RenderInline {TT} at (0,0) size 33x15 -- RenderText {#text} at (207,2) size 33x15 -- text run at (207,2) width 33: "auto" -- RenderText {#text} at (239,0) size 6x18 -- text run at (239,0) width 6: ")" -- RenderBlock {DIV} at (0,50) size 344x190 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x176 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "-" -- text run at (7,73) width 209: "ting its body tucked away, " -- text run at (215,73) width 37: "com" + hyphen string "-" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely" -- text run at (7,161) width 93: "straightened." -- RenderBlock (floating) {DIV} at (356,0) size 344x240 -- RenderBlock {P} at (0,16) size 344x18 -- RenderText {#text} at (0,0) size 83x18 -- text run at (0,0) width 83: "The default (" -- RenderInline {TT} at (0,0) size 196x15 -- RenderText {#text} at (82,2) size 196x15 -- text run at (82,2) width 196: "hyphenate-character: auto" -- RenderText {#text} at (277,0) size 6x18 -- text run at (277,0) width 6: ")" -- RenderBlock {DIV} at (0,50) size 344x190 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x176 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "-" -- text run at (7,73) width 209: "ting its body tucked away, " -- text run at (215,73) width 37: "com" + hyphen string "-" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely" -- text run at (7,161) width 93: "straightened." -- RenderBlock (floating) {DIV} at (4,240) size 344x240 -- RenderBlock {P} at (0,16) size 344x18 -- RenderText {#text} at (0,0) size 49x18 -- text run at (0,0) width 49: "Bullet (" -- RenderInline {TT} at (0,0) size 219x15 -- RenderText {#text} at (48,2) size 219x15 -- text run at (48,2) width 219: "hyphenate-character: \"\\2022\"" -- RenderText {#text} at (266,0) size 7x18 -- text run at (266,0) width 7: ")" -- RenderBlock {DIV} at (0,50) size 344x190 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x176 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "\x{2022}" -- text run at (7,73) width 208: "ting its body tucked away, " -- text run at (214,73) width 38: "com" + hyphen string "\x{2022}" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely" -- text run at (7,161) width 93: "straightened." -- RenderBlock (floating) {DIV} at (356,240) size 356x240 -- RenderBlock {P} at (0,16) size 356x18 -- RenderText {#text} at (0,0) size 140x18 -- text run at (0,0) width 140: "Middle dot and tilde (" -- RenderInline {TT} at (0,0) size 212x15 -- RenderText {#text} at (139,2) size 212x15 -- text run at (139,2) width 212: "hyphenate-character: \"\\B7~\"" -- RenderText {#text} at (350,0) size 6x18 -- text run at (350,0) width 6: ")" -- RenderBlock {DIV} at (0,50) size 344x190 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x176 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "\x{B7}~" -- text run at (7,73) width 200: "ting its body tucked away, " -- text run at (206,73) width 46: "com" + hyphen string "\x{B7}~" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely" -- text run at (7,161) width 93: "straightened." -diff --git a/LayoutTests/platform/mac-mojave/fast/text/hyphenate-character-expected.png b/LayoutTests/platform/mac-mojave/fast/text/hyphenate-character-expected.png -deleted file mode 100644 -index 551411e6ba2f42e44bc13baca2bd9658e82b9bd7..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/text/hyphenate-character-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/text/hyphenate-character-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/hyphenate-character-expected.txt -deleted file mode 100644 -index edb29f462314eaa4e4e61403b5fdae00dcb86f9d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/hyphenate-character-expected.txt -+++ /dev/null -@@ -1,109 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock (floating) {DIV} at (4,0) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderText {#text} at (0,0) size 208x18 -- text run at (0,0) width 208: "The initial value (should be like " -- RenderInline {TT} at (0,0) size 33x15 -- RenderText {#text} at (207,2) size 33x15 -- text run at (207,2) width 33: "auto" -- RenderText {#text} at (239,0) size 6x18 -- text run at (239,0) width 6: ")" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "-" -- text run at (7,73) width 209: "ting its body tucked away, " -- text run at (215,73) width 37: "com" + hyphen string "-" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely straight" + hyphen string "-" -- text run at (7,161) width 39: "ened " -- text run at (45,161) width 292: "out, and was going to give the hedgehog" -- text run at (7,183) width 196: "a blow with its head, it " -- text run at (202,183) width 135: "would twist itself" -- text run at (7,205) width 230: "round and look up in her face\x{2026}" -- RenderBlock (floating) {DIV} at (356,0) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderText {#text} at (0,0) size 83x18 -- text run at (0,0) width 83: "The default (" -- RenderInline {TT} at (0,0) size 196x15 -- RenderText {#text} at (82,2) size 196x15 -- text run at (82,2) width 196: "hyphenate-character: auto" -- RenderText {#text} at (277,0) size 6x18 -- text run at (277,0) width 6: ")" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "-" -- text run at (7,73) width 209: "ting its body tucked away, " -- text run at (215,73) width 37: "com" + hyphen string "-" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely straight" + hyphen string "-" -- text run at (7,161) width 39: "ened " -- text run at (45,161) width 292: "out, and was going to give the hedgehog" -- text run at (7,183) width 196: "a blow with its head, it " -- text run at (202,183) width 135: "would twist itself" -- text run at (7,205) width 230: "round and look up in her face\x{2026}" -- RenderBlock (floating) {DIV} at (4,284) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderText {#text} at (0,0) size 49x18 -- text run at (0,0) width 49: "Bullet (" -- RenderInline {TT} at (0,0) size 219x15 -- RenderText {#text} at (48,2) size 219x15 -- text run at (48,2) width 219: "hyphenate-character: \"\\2022\"" -- RenderText {#text} at (266,0) size 7x18 -- text run at (266,0) width 7: ")" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "\x{2022}" -- text run at (7,73) width 208: "ting its body tucked away, " -- text run at (214,73) width 38: "com" + hyphen string "\x{2022}" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely straight" + hyphen string "\x{2022}" -- text run at (7,161) width 39: "ened " -- text run at (45,161) width 292: "out, and was going to give the hedgehog" -- text run at (7,183) width 196: "a blow with its head, it " -- text run at (202,183) width 135: "would twist itself" -- text run at (7,205) width 230: "round and look up in her face\x{2026}" -- RenderBlock (floating) {DIV} at (356,284) size 356x284 -- RenderBlock {P} at (0,16) size 356x18 -- RenderText {#text} at (0,0) size 140x18 -- text run at (0,0) width 140: "Middle dot and tilde (" -- RenderInline {TT} at (0,0) size 212x15 -- RenderText {#text} at (139,2) size 212x15 -- text run at (139,2) width 212: "hyphenate-character: \"\\B7~\"" -- RenderText {#text} at (350,0) size 6x18 -- text run at (350,0) width 6: ")" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "\x{B7}~" -- text run at (7,73) width 200: "ting its body tucked away, " -- text run at (206,73) width 46: "com" + hyphen string "\x{B7}~" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely straight" + hyphen string "\x{B7}~" -- text run at (7,161) width 39: "ened " -- text run at (45,161) width 292: "out, and was going to give the hedgehog" -- text run at (7,183) width 196: "a blow with its head, it " -- text run at (202,183) width 135: "would twist itself" -- text run at (7,205) width 230: "round and look up in her face\x{2026}" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/hyphens-expected.png b/LayoutTests/platform/mac-mojave/fast/text/hyphens-expected.png -deleted file mode 100644 -index 781fd5403d0d4a6e120b6e5b01a67a0d52c06370..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/text/hyphens-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/text/hyphens-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/hyphens-expected.txt -deleted file mode 100644 -index 1c762c9b857cb40e6a5bd99004d01179552bf9b5..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/hyphens-expected.txt -+++ /dev/null -@@ -1,99 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock (floating) {DIV} at (4,0) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderInline {TT} at (0,0) size 118x15 -- RenderText {#text} at (0,2) size 118x15 -- text run at (0,2) width 118: "hyphens: manual" -- RenderText {#text} at (117,0) size 139x18 -- text run at (117,0) width 139: " without soft hyphens" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in" -- text run at (7,73) width 245: "getting its body tucked away," -- text run at (7,95) width 245: "comfortably enough, under her" -- text run at (7,117) width 307: "arm, with its legs hanging down, " -- text run at (313,117) width 24: "but" -- text run at (7,139) width 330: "generally, just as she had got its neck nicely" -- text run at (7,161) width 96: "straightened " -- text run at (102,161) width 235: "out, and was going to give the" -- text run at (7,183) width 246: "hedgehog a blow with its head, it " -- text run at (252,183) width 85: "would twist" -- text run at (7,205) width 271: "itself round and look up in her face\x{2026}" -- RenderBlock (floating) {DIV} at (356,0) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderInline {TT} at (0,0) size 102x15 -- RenderText {#text} at (0,2) size 102x15 -- text run at (0,2) width 102: "hyphens: none" -- RenderText {#text} at (101,0) size 119x18 -- text run at (101,0) width 119: " with soft hyphens" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in" -- text run at (7,73) width 245: "get\x{AD}ting its body tucked away," -- text run at (7,95) width 245: "com\x{AD}fortably enough, under her" -- text run at (7,117) width 307: "arm, with its legs hanging down, " -- text run at (313,117) width 24: "but" -- text run at (7,139) width 330: "generally, just as she had got its neck nicely" -- text run at (7,161) width 96: "straight\x{AD}ened " -- text run at (102,161) width 235: "out, and was going to give the" -- text run at (7,183) width 246: "hedge\x{AD}hog a blow with its head, it " -- text run at (252,183) width 85: "would twist" -- text run at (7,205) width 271: "itself round and look up in her face\x{2026}" -- RenderBlock (floating) {DIV} at (4,284) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderInline {TT} at (0,0) size 118x15 -- RenderText {#text} at (0,2) size 118x15 -- text run at (0,2) width 118: "hyphens: manual" -- RenderText {#text} at (117,0) size 118x18 -- text run at (117,0) width 118: " with soft hyphens" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get\x{AD}" + hyphen string "-" -- text run at (7,73) width 209: "ting its body tucked away, " -- text run at (215,73) width 37: "com\x{AD}" + hyphen string "-" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely straight\x{AD}" + hyphen string "-" -- text run at (7,161) width 39: "ened " -- text run at (45,161) width 292: "out, and was going to give the hedge\x{AD}hog" -- text run at (7,183) width 196: "a blow with its head, it " -- text run at (202,183) width 135: "would twist itself" -- text run at (7,205) width 230: "round and look up in her face\x{2026}" -- RenderBlock (floating) {DIV} at (356,284) size 344x284 -- RenderBlock {P} at (0,16) size 344x18 -- RenderInline {TT} at (0,0) size 102x15 -- RenderText {#text} at (0,2) size 102x15 -- text run at (0,2) width 102: "hyphens: auto" -- RenderText {#text} at (101,0) size 139x18 -- text run at (101,0) width 139: " without soft hyphens" -- RenderBlock {DIV} at (0,50) size 344x234 [border: (3px solid #000000)] -- RenderBlock (floating) {DIV} at (262,7) size 75x90 [bgcolor=#F0F8FF] -- RenderText {#text} at (7,7) size 330x220 -- text run at (7,7) width 245: "The chief difficulty Alice found" -- text run at (7,29) width 245: "at first was in managing her" -- text run at (7,51) width 245: "flamingo: she succeeded in get" + hyphen string "-" -- text run at (7,73) width 209: "ting its body tucked away, " -- text run at (215,73) width 37: "com" + hyphen string "-" -- text run at (7,95) width 245: "fortably enough, under her arm," -- text run at (7,117) width 228: "with its legs hanging down, " -- text run at (234,117) width 103: "but generally," -- text run at (7,139) width 330: "just as she had got its neck nicely straight" + hyphen string "-" -- text run at (7,161) width 39: "ened " -- text run at (45,161) width 292: "out, and was going to give the hedgehog" -- text run at (7,183) width 196: "a blow with its head, it " -- text run at (202,183) width 135: "would twist itself" -- text run at (7,205) width 230: "round and look up in her face\x{2026}" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/indic-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/indic-expected.txt -deleted file mode 100644 -index 735512b2e866fc7f67e21670b8415055da2171e4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/indic-expected.txt -+++ /dev/null -@@ -1,11 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderText {#text} at (0,0) size 632x18 -- text run at (0,0) width 632: "This page renders some indic text and makes sure that the text metrics match the expected metrics." -- RenderBR {BR} at (631,0) size 1x18 -- RenderText {#text} at (0,22) size 753x43 -- text run at (0,22) width 753: "\x{AA0}\x{AB3}\x{AA8}\x{ABE} \x{A87}\x{AB0}\x{ABE}\x{A95}\x{AC0} \x{AAA}\x{ACD}\x{AB0}\x{AA6}\x{AC7}\x{AB6}\x{ACB}\x{AA8}\x{AC7} \x{A87}\x{AB8}\x{ACD}\x{AB2}\x{ABE}\x{AAE}\x{ABF}\x{A95} \x{AB0}\x{ABE}\x{AB7}\x{ACD}\x{A9F}\x{ACD}\x{AB0} \x{A9C}\x{ABE}\x{AB9}\x{AC7}\x{AB0} \x{A95}\x{AB0}\x{ACD}\x{AAF}\x{AC1}\x{A82} \x{A9B}\x{AC7} \x{A85}\x{AA8}\x{AC7} \x{AAA}\x{ACB}\x{AA4}\x{ABE}\x{AA8}\x{ACB} \x{AB5}\x{ACD}\x{AAF}\x{ABE}\x{AAA} \x{AB5}\x{AA7}\x{ABE}\x{AB0}\x{AB5}\x{ABE} \x{AA4}\x{AC7}\x{AAE}\x{AA8}\x{ABE} \x{AB5}\x{AA1}\x{ABE} \x{AAA}\x{ACD}\x{AB0}\x{AA4}\x{ACD}\x{AAF}\x{AC7} \x{AB5}\x{AAB}\x{ABE}\x{AA6}\x{ABE}\x{AB0}\x{AC0}\x{AA8}\x{AC1}\x{A82} \x{AB5}\x{ABF}\x{AB6}\x{ACD}\x{AB5}\x{AAD}\x{AB0}\x{AA8}\x{ABE} \x{AAE}\x{AC1}\x{AB8}\x{ACD}\x{AB2}\x{ABF}\x{AAE}\x{ACB}\x{AA8}\x{AC7}" -- text run at (0,47) width 325: "\x{A86}\x{AB9}\x{ACD}\x{AB5}\x{ABE}\x{AA8} \x{A95}\x{AB0}\x{ACD}\x{AAF}\x{AC1}\x{A82} \x{A9B}\x{AC7}. \x{A87}\x{AB8}\x{ACD}\x{AB2}\x{ABE}\x{AAE}\x{ABF}\x{A95} \x{AB8}\x{ACD}\x{A9F}\x{AC7}\x{A9F} \x{A93}\x{AAB} \x{A87}\x{AB0}\x{ABE}\x{A95} \x{A8F}\x{AA8}\x{ACD}\x{AA1} \x{AB8}\x{ABF}\x{AB0}\x{ABF}\x{AAF}\x{ABE}" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/bidi-fallback-font-weight-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/bidi-fallback-font-weight-expected.txt -deleted file mode 100644 -index b9161c61f4da0240d89a724414ed8e922442307f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/bidi-fallback-font-weight-expected.txt -+++ /dev/null -@@ -1,41 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x173 -- RenderBlock {HTML} at (0,0) size 800x173 -- RenderBody {BODY} at (8,16) size 784x141 -- RenderBlock {P} at (0,0) size 784x37 -- RenderText {#text} at (0,1) size 777x36 -- text run at (0,1) width 318: "In each of the following lines, the Hebrew letters " -- text run at (317,1) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (351,1) width 426: " in the end should be in boldface (compare with the same letters in" -- text run at (0,19) width 147: "the middle of the line)." -- RenderBlock {P} at (0,53) size 784x18 -- RenderText {#text} at (0,0) size 82x18 -- text run at (0,0) width 43: "abcd " -- text run at (42,0) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (76,0) width 6: " " -- RenderInline {B} at (0,0) size 82x18 -- RenderText {#text} at (81,0) size 82x18 -- text run at (81,0) width 45: "abcd " -- text run at (125,0) width 38 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,87) size 784x19 -- RenderText {#text} at (0,1) size 92x18 -- text run at (0,1) width 49: "abcd " -- text run at (48,1) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (82,1) width 10: " " -- RenderInline {B} at (0,0) size 86x18 -- RenderText {#text} at (91,1) size 86x18 -- text run at (91,1) width 49: "abcd " -- text run at (139,1) width 38 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,122) size 784x19 -- RenderText {#text} at (0,1) size 73x18 -- text run at (0,1) width 35: "abcd " -- text run at (34,1) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (68,1) width 5: " " -- RenderInline {B} at (0,0) size 74x18 -- RenderText {#text} at (72,1) size 74x18 -- text run at (72,1) width 38: "abcd " -- text run at (109,1) width 37 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.png b/LayoutTests/platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.png -deleted file mode 100644 -index 9ca5c260b83559b0c23b3da42da8d7c87a9d6376..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.txt -deleted file mode 100644 -index f14d173146d8cb9438e93fd75a601fb772f3bd32..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/bidi-mirror-he-ar-expected.txt -+++ /dev/null -@@ -1,20 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (456,0) size 328x18 -- text run at (456,0) width 328: "This test tests bidi mirroring in Hebrew and Arabic" -- RenderBlock {P} at (0,34) size 784x18 -- RenderText {#text} at (317,0) size 467x18 -- text run at (317,0) width 467: "The parenthesis should be displayed as \"(...)...\" visually from left to right" -- RenderBlock {DIV} at (0,68) size 784x19 -- RenderText {#text} at (750,1) size 34x18 -- text run at (750,1) width 34 RTL: "\x{5E9}(\x{5E9})" -- RenderBlock {DIV} at (0,87) size 784x18 -- RenderText {#text} at (762,0) size 22x18 -- text run at (762,0) width 22 RTL: "\x{5C6}(\x{5C6})" -- RenderBlock {DIV} at (0,105) size 784x21 -- RenderText {#text} at (758,1) size 26x18 -- text run at (758,1) width 26 RTL: "\x{644}(\x{644})" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/danda-space-expected.png b/LayoutTests/platform/mac-mojave/fast/text/international/danda-space-expected.png -deleted file mode 100644 -index 00ae73d1cb3601109340472b9de3261cab02f563..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/fast/text/international/danda-space-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/danda-space-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/danda-space-expected.txt -deleted file mode 100644 -index f30cc9935c40b5d81d64a70fe45e5a084fae5b1f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/danda-space-expected.txt -+++ /dev/null -@@ -1,16 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 54x18 -- text run at (0,0) width 54: "Test for " -- RenderInline {A} at (0,0) size 69x18 [color=#0000EE] -- RenderText {#text} at (53,0) size 69x18 -- text run at (53,0) width 69: "bug 25464" -- RenderText {#text} at (121,0) size 389x18 -- text run at (121,0) width 389: ": Test for rendering of Danda (U+0964) followed by a space." -- RenderBlock {P} at (0,34) size 784x25 -- RenderText {#text} at (0,4) size 286x18 -- text run at (0,4) width 286: "\x{A39}\x{A41}\x{A70}\x{A26}\x{A40} \x{A39}\x{A48}\x{964} \x{A07}\x{A38} \x{A32}\x{A3F}\x{A2A}\x{A40} \x{A26}\x{A47} \x{A35}\x{A3F}\x{A1A} \x{A69}\x{A6B} (35) \x{A05}\x{A71}\x{A16}\x{A30} \x{A39}\x{A41}\x{A70}\x{A26}\x{A47} \x{A39}\x{A28}\x{964}" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/pop-up-button-text-alignment-and-direction-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/pop-up-button-text-alignment-and-direction-expected.txt -deleted file mode 100644 -index be67c8d505a91ff456df12d7a81f3e9318879002..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/pop-up-button-text-alignment-and-direction-expected.txt -+++ /dev/null -@@ -1,99 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x544 -- RenderBlock {HTML} at (0,0) size 800x544 -- RenderBody {BODY} at (8,16) size 784x520 -- RenderBlock {P} at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 709x18 -- text run at (0,0) width 497: "Verify that the alignment and writing direction of each selected item matches " -- text run at (496,0) width 213: "the one below the pop-up button." -- RenderBlock {DIV} at (0,34) size 784x242 -- RenderMenuList {SELECT} at (0,0) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (8,2) size 159x16 -- text run at (8,2) width 31: "First " -- text run at (38,2) width 48 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA}" -- text run at (85,2) width 17: "03" -- text run at (101,2) width 38 RTL: "\x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (138,2) width 29: " fifth" -- RenderBlock {DIV} at (0,23) size 470x36 -- RenderText {#text} at (10,10) size 163x16 -- text run at (10,10) width 32: "First " -- text run at (41,10) width 49 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA}" -- text run at (89,10) width 17: "03" -- text run at (105,10) width 37 RTL: "\x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (141,10) width 32: " fifth" -- RenderMenuList {SELECT} at (0,61) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (8,2) size 159x16 -- text run at (8,2) width 25: "fifth" -- text run at (32,2) width 52 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} " -- text run at (83,2) width 17: "03" -- text run at (99,2) width 42 RTL: " \x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (140,2) width 27: "First" -- RenderBlock {DIV} at (0,84) size 470x36 -- RenderText {#text} at (10,10) size 163x16 -- text run at (10,10) width 27: "fifth" -- text run at (36,10) width 52 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} " -- text run at (87,10) width 18: "03" -- text run at (104,10) width 41 RTL: " \x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (144,10) width 29: "First" -- RenderMenuList {SELECT} at (0,122) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (8,2) size 159x16 -- text run at (8,2) width 159: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderBlock {DIV} at (0,145) size 470x36 -- RenderText {#text} at (10,10) size 163x16 -- text run at (10,10) width 163: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderMenuList {SELECT} at (0,183) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (8,2) size 159x16 -- text run at (8,2) width 159 RTL: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderBlock {DIV} at (0,206) size 470x36 -- RenderText {#text} at (10,10) size 163x16 -- text run at (10,10) width 163 RTL: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderBlock {DIV} at (0,278) size 784x242 -- RenderMenuList {SELECT} at (0,0) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (333,2) size 159x16 -- text run at (333,2) width 31: "First " -- text run at (363,2) width 49 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA}" -- text run at (411,2) width 17: "03" -- text run at (427,2) width 37 RTL: "\x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (463,2) width 29: " fifth" -- RenderBlock {DIV} at (0,23) size 470x36 -- RenderText {#text} at (297,10) size 163x16 -- text run at (297,10) width 33: "First " -- text run at (329,10) width 48 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA}" -- text run at (376,10) width 18: "03" -- text run at (393,10) width 37 RTL: "\x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (429,10) width 31: " fifth" -- RenderMenuList {SELECT} at (0,61) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (333,2) size 159x16 -- text run at (333,2) width 26: "fifth" -- text run at (358,2) width 52 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} " -- text run at (409,2) width 17: "03" -- text run at (425,2) width 41 RTL: " \x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (465,2) width 27: "First" -- RenderBlock {DIV} at (0,84) size 470x36 -- RenderText {#text} at (297,10) size 163x16 -- text run at (297,10) width 28: "fifth" -- text run at (324,10) width 52 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} " -- text run at (375,10) width 17: "03" -- text run at (391,10) width 42 RTL: " \x{5E9}\x{5E0}\x{5D9}\x{5D4} (" -- text run at (432,10) width 28: "First" -- RenderMenuList {SELECT} at (0,122) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (333,2) size 159x16 -- text run at (333,2) width 159: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderBlock {DIV} at (0,145) size 470x36 -- RenderText {#text} at (297,10) size 163x16 -- text run at (297,10) width 163: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderMenuList {SELECT} at (0,183) size 500x21 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 500x21 -- RenderText at (333,2) size 159x16 -- text run at (333,2) width 159 RTL: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -- RenderBlock {DIV} at (0,206) size 470x36 -- RenderText {#text} at (297,10) size 163x16 -- text run at (297,10) width 163 RTL: "First \x{5E9}\x{5E0}\x{5D9}\x{5D4} (03) \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} fifth" -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-US-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-US-expected.txt -deleted file mode 100644 -index 8e0527754869dff354f61ae562f1b021ca40d1ab..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-US-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "en-US" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-expected.txt -deleted file mode 100644 -index 8e0527754869dff354f61ae562f1b021ca40d1ab..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-en-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "en-US" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-419-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-419-expected.txt -deleted file mode 100644 -index 5684fa3e6e044b8cf100d8a90dda4dcff6cacc49..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-419-expected.txt -+++ /dev/null -@@ -1,6 +0,0 @@ --FAIL navigator.language should be es-419. Was es-XL. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-ES-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-ES-expected.txt -deleted file mode 100644 -index 8762d39a81ea4984ce26b9d6cbf3ef49c573f7a1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-ES-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "es-ES" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-MX-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-MX-expected.txt -deleted file mode 100644 -index 8c6d29fccb87f9dec8123a9170dc4b9baa2bc21d..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-MX-expected.txt -+++ /dev/null -@@ -1,6 +0,0 @@ --FAIL navigator.language should be es-MX. Was es-XL. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-expected.txt -deleted file mode 100644 -index 8762d39a81ea4984ce26b9d6cbf3ef49c573f7a1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-es-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "es-ES" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-fr-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-fr-expected.txt -deleted file mode 100644 -index eb49ac8da3a65e48c42ad96ee2c814812ccae9da..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-fr-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "fr-FR" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-hi-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-hi-expected.txt -deleted file mode 100644 -index 6842e059243f2f924b9e4575f1ed6754477d28a2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-hi-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "hi-IN" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ja-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ja-expected.txt -deleted file mode 100644 -index 95faf1e0145c4f38c671b41c849da1dc69fc3fba..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ja-expected.txt -+++ /dev/null -@@ -1,6 +0,0 @@ --FAIL navigator.language should be ja. Was ja-JP. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-pt-BR-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-pt-BR-expected.txt -deleted file mode 100644 -index b58e0175ef96a5474d51ca75a83e1c0175095308..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-pt-BR-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "pt-BR" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ru-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ru-expected.txt -deleted file mode 100644 -index d687e43867130906355da2b3155127beef4785de..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-ru-expected.txt -+++ /dev/null -@@ -1,5 +0,0 @@ --PASS navigator.language is "ru-RU" --PASS successfullyParsed is true -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-HK-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-HK-expected.txt -deleted file mode 100644 -index 31cedcf15682c7963df337348f1151bb2c17fff2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-HK-expected.txt -+++ /dev/null -@@ -1,6 +0,0 @@ --FAIL navigator.language should be zh-HK. Was zh-TW. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-Hant-HK-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-Hant-HK-expected.txt -deleted file mode 100644 -index 31cedcf15682c7963df337348f1151bb2c17fff2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/navigator-language/navigator-language-zh-Hant-HK-expected.txt -+++ /dev/null -@@ -1,6 +0,0 @@ --FAIL navigator.language should be zh-HK. Was zh-TW. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/system-font-punctuation-expected.txt b/LayoutTests/platform/mac-mojave/fast/text/international/system-language/system-font-punctuation-expected.txt -deleted file mode 100644 -index 5037909ed750d73f133b4db1a0c822bd89a0cb87..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/fast/text/international/system-language/system-font-punctuation-expected.txt -+++ /dev/null -@@ -1,12 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x112 -- RenderBlock {HTML} at (0,0) size 800x112 -- RenderBody {BODY} at (8,8) size 784x96 -- RenderBlock (anonymous) at (0,0) size 784x36 -- RenderText {#text} at (0,0) size 720x36 -- text run at (0,0) width 720: "This test makes sure punctuation laid out with the system font does not use vertical glyphs. The test passes if the" -- text run at (0,18) width 527: "semicolon below looks like a regular horizontal semicolon (;) and is not sideways." -- RenderBlock {DIV} at (0,36) size 784x60 -- RenderText {#text} at (0,0) size 14x59 -- text run at (0,0) width 14: ";" -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-navigating-iframe-in-cross-origin-page-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-navigating-iframe-in-cross-origin-page-expected.txt -deleted file mode 100644 -index 29cca1b58a9b09eb0549d67b7b27d7348e42a7c4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-navigating-iframe-in-cross-origin-page-expected.txt -+++ /dev/null -@@ -1,26 +0,0 @@ -- -- ---------- --Frame: '' ---------- --Tests that Same-Site cookies for 127.0.0.1 are not sent with a frame navigation for a frame embedded in a page with a different origin. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --Cookies sent with HTTP request: --PASS Do not have cookie "strict". --FAIL Should have cookie "implicit-strict". But do not. --FAIL Should have cookie "strict-because-invalid-SameSite-value". But do not. --PASS Do not have cookie "lax". -- --Cookies visible in DOM: --PASS Do not have DOM cookie "strict". --FAIL Should have DOM cookie "implicit-strict". But do not. --FAIL Should have DOM cookie "strict-because-invalid-SameSite-value". But do not. --PASS Do not have DOM cookie "lax". --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-cross-origin-redirect-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-cross-origin-redirect-expected.txt -deleted file mode 100644 -index f670b02b4cc5a23c6ceafc55d4fd2299e536401a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-cross-origin-redirect-expected.txt -+++ /dev/null -@@ -1,21 +0,0 @@ --Tests that a SameSite Lax cookie for 127.0.0.1 is sent with a redirect from a page with a different origin. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --Cookies sent with HTTP request: --PASS Do not have cookie "strict". --FAIL Should have cookie "implicit-strict". But do not. --FAIL Should have cookie "strict-because-invalid-SameSite-value". But do not. --PASS Has cookie "lax" with value 19. -- --Cookies visible in DOM: --PASS Do not have DOM cookie "strict". --FAIL Should have DOM cookie "implicit-strict". But do not. --FAIL Should have DOM cookie "strict-because-invalid-SameSite-value". But do not. --PASS Has DOM cookie "lax" with value 19. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-from-cross-origin-page-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-from-cross-origin-page-expected.txt -deleted file mode 100644 -index 18d6798e5eb403af913b3c8de2df6fdee9606e0f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-from-cross-origin-page-expected.txt -+++ /dev/null -@@ -1,21 +0,0 @@ --Tests that a SameSite Lax cookie for 127.0.0.1 is sent with a top-level navigation initiated from a page with a different origin. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --Cookies sent with HTTP request: --PASS Do not have cookie "strict". --FAIL Should have cookie "implicit-strict". But do not. --FAIL Should have cookie "strict-because-invalid-SameSite-value". But do not. --PASS Has cookie "lax" with value 5. -- --Cookies visible in DOM: --PASS Do not have DOM cookie "strict". --FAIL Should have DOM cookie "implicit-strict". But do not. --FAIL Should have DOM cookie "strict-because-invalid-SameSite-value". But do not. --PASS Has DOM cookie "lax" with value 5. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page-expected.txt -deleted file mode 100644 -index 05e5c7d33d1c478392abefc2c5d92eb8beeb30e2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page-expected.txt -+++ /dev/null -@@ -1,21 +0,0 @@ --Tests that a SameSite Lax cookie for 127.0.0.1 is sent with a top-level navigation initiated from a frame embedded in a page with a different origin. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --Cookies sent with HTTP request: --PASS Do not have cookie "strict". --FAIL Should have cookie "implicit-strict". But do not. --FAIL Should have cookie "strict-because-invalid-SameSite-value". But do not. --PASS Has cookie "lax" with value 4. -- --Cookies visible in DOM: --PASS Do not have DOM cookie "strict". --FAIL Should have DOM cookie "implicit-strict". But do not. --FAIL Should have DOM cookie "strict-because-invalid-SameSite-value". But do not. --PASS Has DOM cookie "lax" with value 4. --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-in-cross-origin-service-worker-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-in-cross-origin-service-worker-expected.txt -deleted file mode 100644 -index d88fb8383e05c567eb211813d3c59571fb65fd5f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/fetch-in-cross-origin-service-worker-expected.txt -+++ /dev/null -@@ -1,26 +0,0 @@ -- -- ---------- --Frame: '' ---------- --Tests that Same-Site cookies for 127.0.0.1 are not sent with a request initiated from an iframe- and processed by a service worker- with a different origin. -- --On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -- -- --Cookies sent with HTTP request: --PASS Do not have cookie "strict". --FAIL Should have cookie "implicit-strict". But do not. --FAIL Should have cookie "strict-because-invalid-SameSite-value". But do not. --PASS Do not have cookie "lax". -- --Cookies visible in DOM: --PASS Do not have DOM cookie "strict". --PASS Do not have DOM cookie "implicit-strict". --PASS Do not have DOM cookie "strict-because-invalid-SameSite-value". --PASS Do not have DOM cookie "lax". --PASS successfullyParsed is true --Some tests failed. -- --TEST COMPLETE -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-expected.txt -deleted file mode 100644 -index cab7524c4efa98b1afb1d444d590d3508f028d68..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --FAIL '127.0.0.1' is not same-site with 'localhost', so strict samesite cookies are not sent. assert_equals: implicit-strict expected (string) "1" but got (undefined) undefined -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-post-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-post-expected.txt -deleted file mode 100644 -index 6e84f07028c4bbf24c22aca95bbb28d7521c93e0..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-cross-site-post-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --FAIL '127.0.0.1' is not same-site with 'localhost', so samesite cookies are not sent via POST. assert_equals: implicit-strict expected (string) "1" but got (undefined) undefined -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-same-site-via-cross-site-redirect-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-same-site-via-cross-site-redirect-expected.txt -deleted file mode 100644 -index 76631e0ced8ad17d0e08e0edb366311927451e0b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/cookies/same-site/popup-same-site-via-cross-site-redirect-expected.txt -+++ /dev/null -@@ -1,3 +0,0 @@ -- --FAIL '127.0.0.1' is same-site with itself, so samesite cookies are sent. assert_equals: implicit-strict expected (string) "1" but got (undefined) undefined -- -diff --git a/LayoutTests/platform/mac-mojave/http/tests/inspector/network/resource-sizes-network-expected.txt b/LayoutTests/platform/mac-mojave/http/tests/inspector/network/resource-sizes-network-expected.txt -deleted file mode 100644 -index c41e67c814d620bf72f3e534b4dd6bc82987937a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/http/tests/inspector/network/resource-sizes-network-expected.txt -+++ /dev/null -@@ -1,103 +0,0 @@ --Test for Resource size values (transfer size, decoded size, header size, request and response) for resources served over the network. -- -- --== Running test suite: Resource.Size.Network ---- Running test case: Resource.Size.Network.text --PASS: statusCode should be 200. --PASS: compressed should be false. --PASS: responseSource should be Symbol(network). --size: 2955 --requestBodyTransferSize: 0 --responseBodyTransferSize: 2955 --estimatedNetworkEncodedSize: 2955 --networkEncodedSize: 2955 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. -- ---- Running test case: Resource.Size.Network.text.empty --PASS: statusCode should be 200. --PASS: compressed should be false. --PASS: responseSource should be Symbol(network). --size: 0 --requestBodyTransferSize: 0 --responseBodyTransferSize: 0 --estimatedNetworkEncodedSize: 0 --networkEncodedSize: 0 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. -- ---- Running test case: Resource.Size.Network.text.gzipped --PASS: statusCode should be 200. --PASS: compressed should be true. --PASS: responseSource should be Symbol(network). --size: 2955 --requestBodyTransferSize: 0 --responseBodyTransferSize: 1229 --estimatedNetworkEncodedSize: 1229 --networkEncodedSize: 1229 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. -- ---- Running test case: Resource.Size.Network.text.gzipped.no-content-length --PASS: statusCode should be 200. --PASS: compressed should be true. --PASS: responseSource should be Symbol(network). --size: 2955 --requestBodyTransferSize: 0 --responseBodyTransferSize: 1229 --estimatedNetworkEncodedSize: 1229 --networkEncodedSize: 1229 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. -- ---- Running test case: Resource.Size.Network.image --PASS: statusCode should be 200. --PASS: compressed should be false. --PASS: responseSource should be Symbol(network). --size: 12940 --requestBodyTransferSize: 0 --responseBodyTransferSize: 12940 --estimatedNetworkEncodedSize: 12940 --networkEncodedSize: 12940 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. -- ---- Running test case: Resource.Size.Network.404 --PASS: statusCode should be 404. --PASS: compressed should be false. --PASS: responseSource should be Symbol(network). --size: 512 --requestBodyTransferSize: 0 --responseBodyTransferSize: 512 --estimatedNetworkEncodedSize: 512 --networkEncodedSize: 512 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. -- ---- Running test case: Resource.Size.Network.requestData --PASS: statusCode should be 200. --PASS: compressed should be false. --PASS: responseSource should be Symbol(network). --size: 28 --requestBodyTransferSize: 1027 --responseBodyTransferSize: 28 --estimatedNetworkEncodedSize: 28 --networkEncodedSize: 28 --PASS: estimatedTotalTransferSize should be >= (encoded body size + headers). --PASS: networkTotalTransferSize should be >= (encoded body size + headers). --PASS: requestHeadersTransferSize should be non-empty. --PASS: responseHeadersTransferSize should be non-empty. --PASS: requestHeadersTransferSize should be > 1060 bytes. -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/access-control-expose-headers-parsing.window-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/access-control-expose-headers-parsing.window-expected.txt -deleted file mode 100644 -index c629f5d8eb9235723331c8eb2ef6dcbfbc72d2e4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/access-control-expose-headers-parsing.window-expected.txt -+++ /dev/null -@@ -1,18 +0,0 @@ -- --PASS Loading JSON… --PASS Parsing: access-control-expose-headers%3A%20BB-8 --PASS Parsing: Access-Control-Expose-Headers%3A%20bb-8%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11! --PASS Parsing: Access-Control-Expose-Headers%3A%20bb-8%2C%20no%20no --PASS Parsing: Access-Control-Expose-Headers%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cbb-8 --PASS Parsing: Access-Control-Expose-Headers%3A%20bb-8%0D%0AAccess-Control-Expose-Headers%3A%20no --PASS Parsing: Access-Control-Expose-Headers%3A%20bb-8%0D%0AAccess-Control-Expose-Headers%3A%20no%20no --PASS Parsing: Access-Control-Expose-Headers%3A%20no%0D%0AAccess-Control-Expose-Headers%3A%20bb-8 --PASS Parsing: Access-Control-Expose-Headers%3A%0D%0AAccess-Control-Expose-Headers%3A%20bb-8 --PASS Parsing: Access-Control-Expose-Headers%3A%20%2Cbb-8 --FAIL Parsing: Access-Control-Expose-Headers%3A%20bb-8%0C assert_equals: expected (object) null but got (string) "hey" --FAIL Parsing: Access-Control-Expose-Headers%3A%20bb-8%0B assert_equals: expected (object) null but got (string) "hey" --PASS Parsing: Access-Control-Expose-Headers%3A%20bb-8%0B%2Cbb-8 --PASS Parsing: Access-Control-Expose-Headers%3A%20'bb-8' --PASS Parsing: Access-Control-Expose-Headers%3A%20'bb-8'%2Cbb-8 --PASS Parsing: Access-Control-Expose-Headers%3A%20%22bb-8%22%2Cbb-8 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/credentials-flag-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/credentials-flag-expected.txt -deleted file mode 100644 -index 63505c07aa1c500427d4d9e4f80d6e6fcb78ddeb..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/credentials-flag-expected.txt -+++ /dev/null -@@ -1,19 +0,0 @@ --CORS - Access-Control-Allow-Credentials -- -- --PASS Setting withCredentials on a sync XHR object should not throw --PASS Don't send cookie by default --FAIL Don't send cookie part 2 assert_equals: Cookie sent in withCredentials=true sync request expected "COOKIE" but got "NO_COOKIE" --FAIL Don't obey Set-Cookie when withCredentials=false assert_equals: third expected "COOKIE" but got "NO_COOKIE" --PASS Access-Control-Allow-Credentials: TRUE should be disallowed (async) --PASS Access-Control-Allow-Credentials: True should be disallowed (async) --PASS Access-Control-Allow-Credentials: "true" should be disallowed (async) --PASS Access-Control-Allow-Credentials: 'true' should be disallowed (async) --PASS Access-Control-Allow-Credentials: false should be disallowed (async) --PASS Access-Control-Allow-Credentials: 1 should be disallowed (async) --PASS Access-Control-Allow-Credentials: 0 should be disallowed (async) --PASS Access-Control-Allow-Credentials: ,true should be disallowed (async) --PASS Access-Control-Allow-Credentials: true, should be disallowed (async) --FAIL Access-Control-Allow-Credentials: true%0B should be disallowed (async) assert_unreached: onload Reached unreachable code --FAIL Access-Control-Allow-Credentials: true%0C should be disallowed (async) assert_unreached: onload Reached unreachable code -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/origin-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/origin-expected.txt -deleted file mode 100644 -index 360fa432262d9ecd9ca5c6ddcc4c55805500af81..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/cors/origin-expected.txt -+++ /dev/null -@@ -1,70 +0,0 @@ --Access-Control-Allow-Origin handling -- -- --Harness Error (FAIL), message = 1 duplicate test name: "Disallow origin: localhost:8800" -- --PASS Allow origin: * --PASS Allow origin: _*__ --PASS Allow origin: [tab]* --PASS Allow origin: http://localhost:8800 --PASS Allow origin: _http://localhost:8800 --PASS Allow origin: _http://localhost:8800___[tab]_ --PASS Allow origin: [tab]http://localhost:8800 --PASS Disallow origin: http://127.0.0.1.localhost:8800 --PASS Disallow origin: //localhost:8800 --PASS Disallow origin: ://localhost:8800 --PASS Disallow origin: ftp://localhost:8800 --PASS Disallow origin: http:://localhost:8800 --PASS Disallow origin: http:/localhost:8800 --PASS Disallow origin: http:localhost:8800 --PASS Disallow origin: localhost:8800 --PASS Disallow origin: http://localhost:8800? --PASS Disallow origin: http://localhost:8800/ --PASS Disallow origin: http://localhost:8800 / --PASS Disallow origin: http://localhost:8800# --PASS Disallow origin: http://localhost:8800%23 --PASS Disallow origin: http://localhost:8800:80 --PASS Disallow origin: http://localhost:8800, * --PASS Disallow origin: http://localhost:8800\0 --PASS Disallow origin: HTTP://LOCALHOST:8800 --PASS Disallow origin: HTTP://localhost:8800 --PASS Disallow origin: - --PASS Disallow origin: ** --PASS Disallow origin: ,* --PASS Disallow origin: *, --PASS Disallow origin: \0* --FAIL Disallow origin: * assert_throws_dom: send function "function () { client.send() }" did not throw --FAIL Disallow origin: * assert_throws_dom: send function "function () { client.send() }" did not throw --PASS Disallow origin: *\0 --FAIL Disallow origin: * assert_throws_dom: send function "function () { client.send() }" did not throw --FAIL Disallow origin: * assert_throws_dom: send function "function () { client.send() }" did not throw --PASS Disallow origin: '*' --PASS Disallow origin: "*" --PASS Disallow origin: * * --PASS Disallow origin: * null --PASS Disallow origin: *http://* --PASS Disallow origin: *http://localhost:8800 --PASS Disallow origin: * http://localhost:8800 --PASS Disallow origin: *, http://localhost:8800 --PASS Disallow origin: \0http://localhost:8800 --PASS Disallow origin: null http://localhost:8800 --PASS Disallow origin: http://example.net --PASS Disallow origin: null --PASS Disallow origin: null * --PASS Disallow origin: --PASS Disallow origin: http://localhost:8800/cors/origin.htm --PASS Disallow origin: http://localhost:8800/cors/ --PASS Disallow origin: http://127.0.0.1:8800/cors/ --PASS Disallow origin: localhost:8800 --PASS Disallow origin: .localhost:8800 --PASS Disallow origin: *.localhost:8800 --FAIL Disallow origin: http://localhost:8800 assert_throws_dom: send function "function () { client.send() }" did not throw --PASS Disallow origin: http://.localhost:8800 --PASS Disallow origin: http://*.localhost:8800 --PASS Disallow multiple headers (, *) --PASS Disallow multiple headers (*, ) --PASS Disallow multiple headers (*, *) --PASS Disallow multiple headers (, http://localhost:8800) --PASS Disallow multiple headers (*, http://localhost:8800) --PASS Disallow multiple headers (http://localhost:8800, http://localhost:8800) -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/css/css-fonts/generic-family-keywords-001-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/css/css-fonts/generic-family-keywords-001-expected.txt -deleted file mode 100644 -index 5166e7f579c7307426a4635a3071046f67e837f4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/css/css-fonts/generic-family-keywords-001-expected.txt -+++ /dev/null -@@ -1,17 +0,0 @@ --00000 --00000 -- --PASS @font-face matching for quoted and unquoted serif --PASS @font-face matching for quoted and unquoted sans-serif --PASS @font-face matching for quoted and unquoted cursive --PASS @font-face matching for quoted and unquoted fantasy --PASS @font-face matching for quoted and unquoted monospace --FAIL @font-face matching for quoted and unquoted system assert_equals: unquoted system does not match @font-face rule expected 25 but got 50 --FAIL @font-face matching for quoted and unquoted emoji assert_equals: unquoted emoji does not match @font-face rule expected 25 but got 50 --FAIL @font-face matching for quoted and unquoted math assert_equals: unquoted math does not match @font-face rule expected 25 but got 50 --FAIL @font-face matching for quoted and unquoted fangsong assert_equals: unquoted fangsong does not match @font-face rule expected 25 but got 50 --FAIL @font-face matching for quoted and unquoted ui-serif assert_equals: unquoted ui-serif does not match @font-face rule expected 25 but got 50 --FAIL @font-face matching for quoted and unquoted ui-sans-serif assert_equals: quoted ui-sans-serif matches @font-face rule expected 50 but got 33 --FAIL @font-face matching for quoted and unquoted ui-monospace assert_equals: unquoted ui-monospace does not match @font-face rule expected 25 but got 50 --FAIL @font-face matching for quoted and unquoted ui-rounded assert_equals: unquoted ui-rounded does not match @font-face rule expected 25 but got 50 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/css/css-pseudo/text-selection-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/css/css-pseudo/text-selection-expected.txt -deleted file mode 100644 -index 584d97e9d7f0e2c2842b63835f4129f1180c3ee2..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/css/css-pseudo/text-selection-expected.txt -+++ /dev/null -@@ -1,11 +0,0 @@ --helloworld --helloworld --helloworld -- --FAIL Selection ending in ::before assert_equals: toString expected "hello" but got "" --PASS Selection contained in ::before --FAIL Selection ending in ::marker assert_equals: toString expected "hello" but got "" --PASS Selection contained in ::marker --FAIL Selection ending in ::before-marker assert_equals: toString expected "hello" but got "" --FAIL Selection contained in ::before-marker assert_equals: toString expected "" but got "h" -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any-expected.txt -deleted file mode 100644 -index 002c1053ce9ddc00ecb48c988434b2b3f60dd98c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any-expected.txt -+++ /dev/null -@@ -1,8 +0,0 @@ -- --PASS response.headers.get('content-length') expects 0 --PASS response.headers.get('content-length') expects 0, 0 --PASS response.headers.get('double-trouble') expects , --PASS response.headers.get('foo-test') expects 1, 2, 3 --FAIL response.headers.get('heya') expects , , 1, , , 2 assert_equals: expected ", \v\f, 1, , , 2" but got ", , 1, , , 2" --PASS response.headers.get('www-authenticate') expects 1, 2, 3, 4 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any.worker-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any.worker-expected.txt -deleted file mode 100644 -index 002c1053ce9ddc00ecb48c988434b2b3f60dd98c..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/basic/header-value-combining.any.worker-expected.txt -+++ /dev/null -@@ -1,8 +0,0 @@ -- --PASS response.headers.get('content-length') expects 0 --PASS response.headers.get('content-length') expects 0, 0 --PASS response.headers.get('double-trouble') expects , --PASS response.headers.get('foo-test') expects 1, 2, 3 --FAIL response.headers.get('heya') expects , , 1, , , 2 assert_equals: expected ", \v\f, 1, , , 2" but got ", , 1, , , 2" --PASS response.headers.get('www-authenticate') expects 1, 2, 3, 4 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt -deleted file mode 100644 -index b9f923713f8272db78ae5959e384ad7551a6e6f1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any-expected.txt -+++ /dev/null -@@ -1,17 +0,0 @@ -- --PASS Response.redirected should be false on not-redirected responses --PASS Redirect 301 with GET --PASS Redirect 301 with POST --FAIL Redirect 301 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 302 with GET --PASS Redirect 302 with POST --FAIL Redirect 302 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with GET --PASS Redirect 303 with POST --FAIL Redirect 303 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with TESTING --PASS Redirect 307 with GET --PASS Redirect 307 with POST (string body) --FAIL Redirect 307 with POST (blob body) assert_equals: Request Content-Type after redirection is NO expected "NO" but got "application/x-www-form-urlencoded" --FAIL Redirect 307 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt -deleted file mode 100644 -index b9f923713f8272db78ae5959e384ad7551a6e6f1..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker-expected.txt -+++ /dev/null -@@ -1,17 +0,0 @@ -- --PASS Response.redirected should be false on not-redirected responses --PASS Redirect 301 with GET --PASS Redirect 301 with POST --FAIL Redirect 301 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 302 with GET --PASS Redirect 302 with POST --FAIL Redirect 302 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with GET --PASS Redirect 303 with POST --FAIL Redirect 303 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" --PASS Redirect 303 with TESTING --PASS Redirect 307 with GET --PASS Redirect 307 with POST (string body) --FAIL Redirect 307 with POST (blob body) assert_equals: Request Content-Type after redirection is NO expected "NO" but got "application/x-www-form-urlencoded" --FAIL Redirect 307 with HEAD assert_equals: Request Content-Length after redirection is NO expected "NO" but got "0" -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/content-type/script.window-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/content-type/script.window-expected.txt -deleted file mode 100644 -index e4431cc88654ee7226f3c880efefefa6f046619f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/content-type/script.window-expected.txt -+++ /dev/null -@@ -1,33 +0,0 @@ -- --PASS Loading JSON… --PASS separate text/javascript;charset=windows-1252 --PASS separate text/javascript;";charset=windows-1252 --FAIL separate text/javascript assert_unreached: Reached unreachable code --PASS separate "text/javascript" --PASS separate text/ javascript --PASS separate text /javascript --PASS separate x/x text/javascript --FAIL combined x/x text/javascript assert_unreached: Reached unreachable code --PASS separate x/x;charset=windows-1252 text/javascript --FAIL combined x/x;charset=windows-1252 text/javascript assert_unreached: Reached unreachable code --PASS separate text/javascript x/x --FAIL combined text/javascript x/x assert_unreached: Reached unreachable code --FAIL separate text/javascript; charset=windows-1252 text/javascript assert_equals: expected "€" but got "€" --PASS combined text/javascript; charset=windows-1252 text/javascript --FAIL separate text/javascript;" x/x assert_unreached: Reached unreachable code --PASS combined text/javascript;" x/x --FAIL separate text/javascript assert_unreached: Reached unreachable code --PASS combined text/javascript --FAIL separate text/javascript error assert_unreached: Reached unreachable code --PASS combined text/javascript error --PASS separate text/javascript;charset=windows-1252 x/x text/javascript --FAIL combined text/javascript;charset=windows-1252 x/x text/javascript assert_equals: expected "€" but got "€" --FAIL separate text/javascript;charset=windows-1252 error text/javascript assert_equals: expected "€" but got "€" --PASS combined text/javascript;charset=windows-1252 error text/javascript --FAIL separate text/javascript;charset=windows-1252 text/javascript assert_equals: expected "€" but got "€" --PASS combined text/javascript;charset=windows-1252 text/javascript --FAIL separate text/javascript;charset=windows-1252;" \" x/x assert_unreached: Reached unreachable code --PASS combined text/javascript;charset=windows-1252;" \" x/x --PASS separate x/x;" x/y;\" text/javascript;charset=windows-1252;" text/javascript --FAIL combined x/x;" x/y;\" text/javascript;charset=windows-1252;" text/javascript assert_unreached: Reached unreachable code -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-actual.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-actual.txt -deleted file mode 100644 -index 3c35544f5c8d4ab8d57831c9181e3509aad3fab7..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-actual.txt -+++ /dev/null -@@ -1,17 +0,0 @@ -- --PASS Loading JSON… --PASS X-Content-Type-Options%3A%20NOSNIFF --PASS x-content-type-OPTIONS%3A%20nosniff --PASS X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11! --PASS X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff --PASS X-Content-Type-Options%3A%20nosniff%0D%0AX-Content-Type-Options%3A%20no --PASS X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff --PASS X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff --PASS X-Content-Type-Options%3A%20%2Cnosniff --FAIL X-Content-Type-Options%3A%20nosniff%0C assert_unreached: Script should have loaded Reached unreachable code --FAIL X-Content-Type-Options%3A%20nosniff%0B assert_unreached: Script should have loaded Reached unreachable code --PASS X-Content-Type-Options%3A%20nosniff%0B%2Cnosniff --PASS X-Content-Type-Options%3A%20'NosniFF' --PASS X-Content-Type-Options%3A%20%22nosniFF%22 --PASS Content-Type-Options%3A%20nosniff -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-expected.txt -deleted file mode 100644 -index 63e5ab6ca229a1c31f34ff616f13c3331b0d128f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/fetch/nosniff/parsing-nosniff.window-expected.txt -+++ /dev/null -@@ -1,17 +0,0 @@ -- --PASS Loading JSON… --PASS X-Content-Type-Options%3A%20NOSNIFF --PASS x-content-type-OPTIONS%3A%20nosniff --PASS X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11! --PASS X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff --PASS X-Content-Type-Options%3A%20nosniff%0D%0AX-Content-Type-Options%3A%20no --PASS X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff --PASS X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff --PASS X-Content-Type-Options%3A%20%2Cnosniff --FAIL X-Content-Type-Options%3A%20nosniff%0C assert_unreached: Script should have loaded Reached unreachable code --FAIL X-Content-Type-Options%3A%20nosniff%0B assert_unreached: Script should have loaded Reached unreachable code --PASS X-Content-Type-Options%3A%20nosniff%0B%2Cnosniff --PASS X-Content-Type-Options%3A%20'NosniFF' --PASS X-Content-Type-Options%3A%20%22nosniFF%22 --PASS Content-Type-Options%3A%20nosniff -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/ignored-properties-001-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/ignored-properties-001-expected.txt -deleted file mode 100644 -index 897c5d0b47d35487bac2bbd67be11b3f87aee914..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/ignored-properties-001-expected.txt -+++ /dev/null -@@ -1,300 +0,0 @@ -- --PASS maction preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL maction layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -15 --PASS maction preferred width calculation is not affected by white-space: normal; --FAIL maction layout is not affected by white-space: normal; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS maction preferred width calculation is not affected by float: right; --FAIL maction layout is not affected by float: right; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS maction preferred width calculation is not affected by align-content: end; justify-content: end; --FAIL maction layout is not affected by align-content: end; justify-content: end; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS maction preferred width calculation is not affected by align-self: end; justify-self: end; --FAIL maction layout is not affected by align-self: end; justify-self: end; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS maction preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL maction layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: block size expected 7.21875 +/- 1 but got 200 --PASS menclose preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL menclose layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 0) expected 7.96875 +/- 1 but got 3.984375 --PASS menclose preferred width calculation is not affected by white-space: normal; --PASS menclose layout is not affected by white-space: normal; --PASS menclose preferred width calculation is not affected by float: right; --PASS menclose layout is not affected by float: right; --PASS menclose preferred width calculation is not affected by align-content: end; justify-content: end; --PASS menclose layout is not affected by align-content: end; justify-content: end; --PASS menclose preferred width calculation is not affected by align-self: end; justify-self: end; --PASS menclose layout is not affected by align-self: end; justify-self: end; --PASS menclose preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS menclose layout is not affected by width: 100px !important; height: 200px !important; --PASS merror preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL merror layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 9.03125 +/- 1 but got 0 --PASS merror preferred width calculation is not affected by white-space: normal; --PASS merror layout is not affected by white-space: normal; --PASS merror preferred width calculation is not affected by float: right; --PASS merror layout is not affected by float: right; --PASS merror preferred width calculation is not affected by align-content: end; justify-content: end; --PASS merror layout is not affected by align-content: end; justify-content: end; --PASS merror preferred width calculation is not affected by align-self: end; justify-self: end; --PASS merror layout is not affected by align-self: end; justify-self: end; --PASS merror preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL merror layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: block size expected 7.21875 +/- 1 but got 200 --PASS mfrac preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mfrac layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 0 +/- 1 but got 9.59375 --PASS mfrac preferred width calculation is not affected by white-space: normal; --PASS mfrac layout is not affected by white-space: normal; --PASS mfrac preferred width calculation is not affected by float: right; --PASS mfrac layout is not affected by float: right; --PASS mfrac preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mfrac layout is not affected by align-content: end; justify-content: end; --PASS mfrac preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mfrac layout is not affected by align-self: end; justify-self: end; --PASS mfrac preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS mfrac layout is not affected by width: 100px !important; height: 200px !important; --PASS mi preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mi layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 9 +/- 1 but got 71.046875 --PASS mi preferred width calculation is not affected by white-space: normal; --PASS mi layout is not affected by white-space: normal; --PASS mi preferred width calculation is not affected by float: right; --PASS mi layout is not affected by float: right; --PASS mi preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mi layout is not affected by align-content: end; justify-content: end; --PASS mi preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mi layout is not affected by align-self: end; justify-self: end; --PASS mi preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mi layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: inline size expected 72.640625 +/- 1 but got 101.59375 --PASS mmultiscripts preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mmultiscripts layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 0) expected 0 +/- 1 but got 5.1875 --PASS mmultiscripts preferred width calculation is not affected by white-space: normal; --PASS mmultiscripts layout is not affected by white-space: normal; --PASS mmultiscripts preferred width calculation is not affected by float: right; --PASS mmultiscripts layout is not affected by float: right; --PASS mmultiscripts preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mmultiscripts layout is not affected by align-content: end; justify-content: end; --PASS mmultiscripts preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mmultiscripts layout is not affected by align-self: end; justify-self: end; --PASS mmultiscripts preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS mmultiscripts layout is not affected by width: 100px !important; height: 200px !important; --PASS mn preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mn layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 9 +/- 1 but got 71.046875 --PASS mn preferred width calculation is not affected by white-space: normal; --PASS mn layout is not affected by white-space: normal; --PASS mn preferred width calculation is not affected by float: right; --PASS mn layout is not affected by float: right; --PASS mn preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mn layout is not affected by align-content: end; justify-content: end; --PASS mn preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mn layout is not affected by align-self: end; justify-self: end; --PASS mn preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mn layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: inline size expected 71.046875 +/- 1 but got 100 --PASS mo preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mo layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 9 +/- 1 but got 71.046875 --PASS mo preferred width calculation is not affected by white-space: normal; --PASS mo layout is not affected by white-space: normal; --PASS mo preferred width calculation is not affected by float: right; --PASS mo layout is not affected by float: right; --PASS mo preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mo layout is not affected by align-content: end; justify-content: end; --PASS mo preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mo layout is not affected by align-self: end; justify-self: end; --PASS mo preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mo layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: inline size expected 79.921875 +/- 1 but got 100 --PASS mover preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mover layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 0) expected 0 +/- 1 but got 8.609375 --PASS mover preferred width calculation is not affected by white-space: normal; --PASS mover layout is not affected by white-space: normal; --PASS mover preferred width calculation is not affected by float: right; --PASS mover layout is not affected by float: right; --PASS mover preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mover layout is not affected by align-content: end; justify-content: end; --PASS mover preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mover layout is not affected by align-self: end; justify-self: end; --PASS mover preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS mover layout is not affected by width: 100px !important; height: 200px !important; --PASS mpadded preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mpadded layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 8.03125 +/- 1 but got 0 --PASS mpadded preferred width calculation is not affected by white-space: normal; --PASS mpadded layout is not affected by white-space: normal; --PASS mpadded preferred width calculation is not affected by float: right; --PASS mpadded layout is not affected by float: right; --PASS mpadded preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mpadded layout is not affected by align-content: end; justify-content: end; --PASS mpadded preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mpadded layout is not affected by align-self: end; justify-self: end; --PASS mpadded preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS mpadded layout is not affected by width: 100px !important; height: 200px !important; --PASS mphantom preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mphantom layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 8.03125 +/- 1 but got 0 --PASS mphantom preferred width calculation is not affected by white-space: normal; --PASS mphantom layout is not affected by white-space: normal; --PASS mphantom preferred width calculation is not affected by float: right; --PASS mphantom layout is not affected by float: right; --PASS mphantom preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mphantom layout is not affected by align-content: end; justify-content: end; --PASS mphantom preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mphantom layout is not affected by align-self: end; justify-self: end; --PASS mphantom preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mphantom layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: block size expected 7.21875 +/- 1 but got 200 --PASS mroot preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mroot layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 20.515625 +/- 1 but got 9.796875 --PASS mroot preferred width calculation is not affected by white-space: normal; --PASS mroot layout is not affected by white-space: normal; --PASS mroot preferred width calculation is not affected by float: right; --PASS mroot layout is not affected by float: right; --PASS mroot preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mroot layout is not affected by align-content: end; justify-content: end; --PASS mroot preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mroot layout is not affected by align-self: end; justify-self: end; --PASS mroot preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS mroot layout is not affected by width: 100px !important; height: 200px !important; --PASS mrow preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mrow layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 8.03125 +/- 1 but got 0 --PASS mrow preferred width calculation is not affected by white-space: normal; --PASS mrow layout is not affected by white-space: normal; --PASS mrow preferred width calculation is not affected by float: right; --PASS mrow layout is not affected by float: right; --PASS mrow preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mrow layout is not affected by align-content: end; justify-content: end; --PASS mrow preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mrow layout is not affected by align-self: end; justify-self: end; --PASS mrow preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mrow layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: block size expected 7.21875 +/- 1 but got 200 --PASS ms preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL ms layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 9 +/- 1 but got 71.046875 --PASS ms preferred width calculation is not affected by white-space: normal; --PASS ms layout is not affected by white-space: normal; --PASS ms preferred width calculation is not affected by float: right; --PASS ms layout is not affected by float: right; --PASS ms preferred width calculation is not affected by align-content: end; justify-content: end; --PASS ms layout is not affected by align-content: end; justify-content: end; --PASS ms preferred width calculation is not affected by align-self: end; justify-self: end; --PASS ms layout is not affected by align-self: end; justify-self: end; --PASS ms preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL ms layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: inline size expected 71.046875 +/- 1 but got 100 --PASS mspace preferred width calculation is not affected by writing-mode: vertical-rl; --PASS mspace layout is not affected by writing-mode: vertical-rl; --PASS mspace preferred width calculation is not affected by white-space: normal; --PASS mspace layout is not affected by white-space: normal; --PASS mspace preferred width calculation is not affected by float: right; --PASS mspace layout is not affected by float: right; --PASS mspace preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mspace layout is not affected by align-content: end; justify-content: end; --PASS mspace preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mspace layout is not affected by align-self: end; justify-self: end; --PASS mspace preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS mspace layout is not affected by width: 100px !important; height: 200px !important; --PASS msqrt preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL msqrt layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 19.71875 +/- 1 but got 9 --PASS msqrt preferred width calculation is not affected by white-space: normal; --PASS msqrt layout is not affected by white-space: normal; --PASS msqrt preferred width calculation is not affected by float: right; --PASS msqrt layout is not affected by float: right; --PASS msqrt preferred width calculation is not affected by align-content: end; justify-content: end; --PASS msqrt layout is not affected by align-content: end; justify-content: end; --PASS msqrt preferred width calculation is not affected by align-self: end; justify-self: end; --PASS msqrt layout is not affected by align-self: end; justify-self: end; --PASS msqrt preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS msqrt layout is not affected by width: 100px !important; height: 200px !important; --PASS mstyle preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mstyle layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 8.03125 +/- 1 but got 0 --PASS mstyle preferred width calculation is not affected by white-space: normal; --PASS mstyle layout is not affected by white-space: normal; --PASS mstyle preferred width calculation is not affected by float: right; --PASS mstyle layout is not affected by float: right; --PASS mstyle preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mstyle layout is not affected by align-content: end; justify-content: end; --PASS mstyle preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mstyle layout is not affected by align-self: end; justify-self: end; --PASS mstyle preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mstyle layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: block size expected 7.21875 +/- 1 but got 200 --PASS msub preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL msub layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected 80.3125 +/- 1 but got 5.8125 --PASS msub preferred width calculation is not affected by white-space: normal; --PASS msub layout is not affected by white-space: normal; --PASS msub preferred width calculation is not affected by float: right; --PASS msub layout is not affected by float: right; --PASS msub preferred width calculation is not affected by align-content: end; justify-content: end; --PASS msub layout is not affected by align-content: end; justify-content: end; --PASS msub preferred width calculation is not affected by align-self: end; justify-self: end; --PASS msub layout is not affected by align-self: end; justify-self: end; --PASS msub preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS msub layout is not affected by width: 100px !important; height: 200px !important; --PASS msubsup preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL msubsup layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 0) expected 0 +/- 1 but got 5.1875 --PASS msubsup preferred width calculation is not affected by white-space: normal; --PASS msubsup layout is not affected by white-space: normal; --PASS msubsup preferred width calculation is not affected by float: right; --PASS msubsup layout is not affected by float: right; --PASS msubsup preferred width calculation is not affected by align-content: end; justify-content: end; --PASS msubsup layout is not affected by align-content: end; justify-content: end; --PASS msubsup preferred width calculation is not affected by align-self: end; justify-self: end; --PASS msubsup layout is not affected by align-self: end; justify-self: end; --PASS msubsup preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS msubsup layout is not affected by width: 100px !important; height: 200px !important; --PASS msup preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL msup layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 0) expected 0 +/- 1 but got 5.1875 --PASS msup preferred width calculation is not affected by white-space: normal; --PASS msup layout is not affected by white-space: normal; --PASS msup preferred width calculation is not affected by float: right; --PASS msup layout is not affected by float: right; --PASS msup preferred width calculation is not affected by align-content: end; justify-content: end; --PASS msup layout is not affected by align-content: end; justify-content: end; --PASS msup preferred width calculation is not affected by align-self: end; justify-self: end; --PASS msup layout is not affected by align-self: end; justify-self: end; --PASS msup preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS msup layout is not affected by width: 100px !important; height: 200px !important; --PASS mtable preferred width calculation is not affected by writing-mode: vertical-rl; --PASS mtable layout is not affected by writing-mode: vertical-rl; --PASS mtable preferred width calculation is not affected by white-space: normal; --PASS mtable layout is not affected by white-space: normal; --PASS mtable preferred width calculation is not affected by float: right; --PASS mtable layout is not affected by float: right; --PASS mtable preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mtable layout is not affected by align-content: end; justify-content: end; --PASS mtable preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mtable layout is not affected by align-self: end; justify-self: end; --PASS mtext preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL mtext layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline size expected 9 +/- 1 but got 71.046875 --PASS mtext preferred width calculation is not affected by white-space: normal; --PASS mtext layout is not affected by white-space: normal; --PASS mtext preferred width calculation is not affected by float: right; --PASS mtext layout is not affected by float: right; --PASS mtext preferred width calculation is not affected by align-content: end; justify-content: end; --PASS mtext layout is not affected by align-content: end; justify-content: end; --PASS mtext preferred width calculation is not affected by align-self: end; justify-self: end; --PASS mtext layout is not affected by align-self: end; justify-self: end; --PASS mtext preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL mtext layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: inline size expected 71.046875 +/- 1 but got 100 --PASS munder preferred width calculation is not affected by writing-mode: vertical-rl; --PASS munder layout is not affected by writing-mode: vertical-rl; --PASS munder preferred width calculation is not affected by white-space: normal; --PASS munder layout is not affected by white-space: normal; --PASS munder preferred width calculation is not affected by float: right; --PASS munder layout is not affected by float: right; --PASS munder preferred width calculation is not affected by align-content: end; justify-content: end; --PASS munder layout is not affected by align-content: end; justify-content: end; --PASS munder preferred width calculation is not affected by align-self: end; justify-self: end; --PASS munder layout is not affected by align-self: end; justify-self: end; --PASS munder preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS munder layout is not affected by width: 100px !important; height: 200px !important; --PASS munderover preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL munderover layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 0) expected 0 +/- 1 but got 8.609375 --PASS munderover preferred width calculation is not affected by white-space: normal; --PASS munderover layout is not affected by white-space: normal; --PASS munderover preferred width calculation is not affected by float: right; --PASS munderover layout is not affected by float: right; --PASS munderover preferred width calculation is not affected by align-content: end; justify-content: end; --PASS munderover layout is not affected by align-content: end; justify-content: end; --PASS munderover preferred width calculation is not affected by align-self: end; justify-self: end; --PASS munderover layout is not affected by align-self: end; justify-self: end; --PASS munderover preferred width calculation is not affected by width: 100px !important; height: 200px !important; --PASS munderover layout is not affected by width: 100px !important; height: 200px !important; --PASS semantics preferred width calculation is not affected by writing-mode: vertical-rl; --FAIL semantics layout is not affected by writing-mode: vertical-rl; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -15 --PASS semantics preferred width calculation is not affected by white-space: normal; --FAIL semantics layout is not affected by white-space: normal; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS semantics preferred width calculation is not affected by float: right; --FAIL semantics layout is not affected by float: right; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS semantics preferred width calculation is not affected by align-content: end; justify-content: end; --FAIL semantics layout is not affected by align-content: end; justify-content: end; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS semantics preferred width calculation is not affected by align-self: end; justify-self: end; --FAIL semantics layout is not affected by align-self: end; justify-self: end; assert_approx_equals: inline position (child 1) expected -88.3125 +/- 1 but got -8 --PASS semantics preferred width calculation is not affected by width: 100px !important; height: 200px !important; --FAIL semantics layout is not affected by width: 100px !important; height: 200px !important; assert_approx_equals: block size expected 7.21875 +/- 1 but got 200 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002-expected.txt -deleted file mode 100644 -index 172ba71695fcb6f713b06c83e8eabee72ce48d5e..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002-expected.txt -+++ /dev/null -@@ -1,51 +0,0 @@ -- --PASS Padding properties on maction --PASS Padding properties on maction (rtl) --FAIL Padding properties on menclose assert_approx_equals: bottom padding expected 60 +/- 1 but got -4.1875 --FAIL Padding properties on menclose (rtl) assert_approx_equals: bottom padding expected 60 +/- 1 but got -4.1875 --PASS Padding properties on merror --PASS Padding properties on merror (rtl) --FAIL Padding properties on mfrac assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on mfrac (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on mi assert_approx_equals: right padding expected 40 +/- 1 but got 38.406253814697266 --FAIL Padding properties on mi (rtl) assert_approx_equals: right padding expected 40 +/- 1 but got 38.406253814697266 --FAIL Padding properties on mmultiscripts assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on mmultiscripts (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --PASS Padding properties on mn --PASS Padding properties on mn (rtl) --PASS Padding properties on mo --PASS Padding properties on mo (rtl) --FAIL Padding properties on mover assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on mover (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on mpadded assert_approx_equals: bottom padding expected 60 +/- 1 but got -0.21875 --FAIL Padding properties on mpadded (rtl) assert_approx_equals: bottom padding expected 60 +/- 1 but got -0.21875 --PASS Padding properties on mphantom --PASS Padding properties on mphantom (rtl) --FAIL Padding properties on mroot assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on mroot (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --PASS Padding properties on mrow --PASS Padding properties on mrow (rtl) --PASS Padding properties on ms --PASS Padding properties on ms (rtl) --FAIL Padding properties on mspace assert_approx_equals: left/right padding expected 70 +/- 1 but got 0 --FAIL Padding properties on msqrt assert_approx_equals: bottom padding expected 60 +/- 1 but got -10.71875 --FAIL Padding properties on msqrt (rtl) assert_approx_equals: bottom padding expected 60 +/- 1 but got -10.71875 --PASS Padding properties on mstyle --PASS Padding properties on mstyle (rtl) --FAIL Padding properties on msub assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on msub (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on msubsup assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on msubsup (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on msup assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on msup (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --PASS Padding properties on mtable --PASS Padding properties on mtable (rtl) --PASS Padding properties on mtext --PASS Padding properties on mtext (rtl) --FAIL Padding properties on munder assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on munder (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on munderover assert_approx_equals: left padding expected 30 +/- 1 but got 0 --FAIL Padding properties on munderover (rtl) assert_approx_equals: left padding expected 30 +/- 1 but got 0 --PASS Padding properties on semantics --PASS Padding properties on semantics (rtl) -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt -deleted file mode 100644 -index 887549c0706149eddbb1e8549a86a7a9d648a50b..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt -+++ /dev/null -@@ -1,9 +0,0 @@ -- --PASS XMLHttpRequest: getAllResponseHeaders() --PASS XMLHttpRequest: getAllResponseHeaders() 1 --PASS XMLHttpRequest: getAllResponseHeaders() 2 --PASS XMLHttpRequest: getAllResponseHeaders() 3 --PASS XMLHttpRequest: getAllResponseHeaders() 4 --FAIL XMLHttpRequest: getAllResponseHeaders() 5 assert_equals: expected "heya: , \v\f, 1, , , 2\r\n" but got "heya: , , 1, , , 2\r\n" --PASS XMLHttpRequest: getAllResponseHeaders() 6 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any-expected.txt -deleted file mode 100644 -index 848d1736d56a21daf2847d66d587541d23f01115..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any-expected.txt -+++ /dev/null -@@ -1,8 +0,0 @@ -- --PASS getResponseHeader('content-length') expects 0 --PASS getResponseHeader('content-length') expects 0, 0 --PASS getResponseHeader('double-trouble') expects , --PASS getResponseHeader('foo-test') expects 1, 2, 3 --FAIL getResponseHeader('heya') expects , , 1, , , 2 assert_equals: expected ", \v\f, 1, , , 2" but got ", , 1, , , 2" --PASS getResponseHeader('www-authenticate') expects 1, 2, 3, 4 -- -diff --git a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any.worker-expected.txt b/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any.worker-expected.txt -deleted file mode 100644 -index 848d1736d56a21daf2847d66d587541d23f01115..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getresponseheader.any.worker-expected.txt -+++ /dev/null -@@ -1,8 +0,0 @@ -- --PASS getResponseHeader('content-length') expects 0 --PASS getResponseHeader('content-length') expects 0, 0 --PASS getResponseHeader('double-trouble') expects , --PASS getResponseHeader('foo-test') expects 1, 2, 3 --FAIL getResponseHeader('heya') expects , , 1, , , 2 assert_equals: expected ", \v\f, 1, , , 2" but got ", , 1, , , 2" --PASS getResponseHeader('www-authenticate') expects 1, 2, 3, 4 -- -diff --git a/LayoutTests/platform/mac-mojave/platform/mac/fast/text/international/bidi-fallback-font-weight-expected.txt b/LayoutTests/platform/mac-mojave/platform/mac/fast/text/international/bidi-fallback-font-weight-expected.txt -deleted file mode 100644 -index b9161c61f4da0240d89a724414ed8e922442307f..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/platform/mac/fast/text/international/bidi-fallback-font-weight-expected.txt -+++ /dev/null -@@ -1,41 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x173 -- RenderBlock {HTML} at (0,0) size 800x173 -- RenderBody {BODY} at (8,16) size 784x141 -- RenderBlock {P} at (0,0) size 784x37 -- RenderText {#text} at (0,1) size 777x36 -- text run at (0,1) width 318: "In each of the following lines, the Hebrew letters " -- text run at (317,1) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (351,1) width 426: " in the end should be in boldface (compare with the same letters in" -- text run at (0,19) width 147: "the middle of the line)." -- RenderBlock {P} at (0,53) size 784x18 -- RenderText {#text} at (0,0) size 82x18 -- text run at (0,0) width 43: "abcd " -- text run at (42,0) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (76,0) width 6: " " -- RenderInline {B} at (0,0) size 82x18 -- RenderText {#text} at (81,0) size 82x18 -- text run at (81,0) width 45: "abcd " -- text run at (125,0) width 38 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,87) size 784x19 -- RenderText {#text} at (0,1) size 92x18 -- text run at (0,1) width 49: "abcd " -- text run at (48,1) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (82,1) width 10: " " -- RenderInline {B} at (0,0) size 86x18 -- RenderText {#text} at (91,1) size 86x18 -- text run at (91,1) width 49: "abcd " -- text run at (139,1) width 38 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,122) size 784x19 -- RenderText {#text} at (0,1) size 73x18 -- text run at (0,1) width 35: "abcd " -- text run at (34,1) width 35 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- text run at (68,1) width 5: " " -- RenderInline {B} at (0,0) size 74x18 -- RenderText {#text} at (72,1) size 74x18 -- text run at (72,1) width 38: "abcd " -- text run at (109,1) width 37 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}" -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/svg/W3C-SVG-1.1/animate-elem-46-t-expected.txt b/LayoutTests/platform/mac-mojave/svg/W3C-SVG-1.1/animate-elem-46-t-expected.txt -deleted file mode 100644 -index 25719de9fad784ef42b9ac8ebd820d214a56c43a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/svg/W3C-SVG-1.1/animate-elem-46-t-expected.txt -+++ /dev/null -@@ -1,332 +0,0 @@ --layer at (0,0) size 480x360 -- RenderView at (0,0) size 480x360 --layer at (0,0) size 480x360 -- RenderSVGRoot {svg} at (0,0) size 480x360 -- RenderSVGContainer {g} at (39,60) size 423x193 [transform={m=((1.00,0.00)(0.00,1.00)) t=(80.00,80.00)}] -- RenderSVGContainer {g} at (39,92) size 66x157 [transform={m=((1.00,0.00)(0.00,1.00)) t=(20.00,10.00)}] -- RenderSVGText {text} at (-59,2) size 64x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 64x16 -- chunk 1 (end anchor) text run 1 at (-58.75,15.00) startOffset 0 endOffset 11 width 63.75: "text-anchor" -- RenderSVGText {text} at (-44,37) size 49x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 49x16 -- chunk 1 (end anchor) text run 1 at (-43.98,50.00) startOffset 0 endOffset 9 width 48.98: "font-size" -- RenderSVGText {text} at (-59,72) size 64x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 64x16 -- chunk 1 (end anchor) text run 1 at (-58.76,85.00) startOffset 0 endOffset 11 width 63.76: "font-family" -- RenderSVGText {text} at (-49,107) size 54x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 54x16 -- chunk 1 (end anchor) text run 1 at (-48.66,120.00) startOffset 0 endOffset 10 width 53.66: "font-style" -- RenderSVGText {text} at (-61,142) size 66x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 66x16 -- chunk 1 (end anchor) text run 1 at (-60.32,155.00) startOffset 0 endOffset 11 width 65.32: "font-weight" -- RenderSVGContainer {g} at (171,60) size 261x17 [transform={m=((1.00,0.00)(0.00,1.00)) t=(90.00,-10.00)}] -- RenderSVGText {text} at (1,-10) size 38x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 37x16 -- chunk 1 (middle anchor) text run 1 at (1.61,3.00) startOffset 0 endOffset 6 width 36.78: "" -- RenderSVGText {text} at (123,-10) size 24x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 23x16 -- chunk 1 (middle anchor) text run 1 at (123.60,3.00) startOffset 0 endOffset 3 width 22.79: "" -- RenderSVGText {text} at (238,-10) size 23x17 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 23x16 -- chunk 1 (middle anchor) text run 1 at (239.00,3.00) startOffset 0 endOffset 3 width 22.00: "" -- RenderSVGContainer {g} at (138,77) size 324x176 [transform={m=((1.00,0.00)(0.00,1.00)) t=(80.00,5.00)}] -- RenderSVGContainer {g} at (138,77) size 324x36 -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (138,77) size 104x36 -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (158,103) size 4x4 [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (-11,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (middle anchor) text run 1 at (-10.83,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (188,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (218,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(60.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGRect {rect} at (158,103) size 4x4 [fill={[type=SOLID] [color=#CC0066]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGContainer {use} at (138,77) size 104x36 -- RenderSVGContainer {g} at (138,77) size 104x36 -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (158,103) size 4x4 [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (-11,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (middle anchor) text run 1 at (-10.83,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (188,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (218,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(60.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGRect {rect} at (158,103) size 4x4 [fill={[type=SOLID] [color=#CC0066]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGContainer {use} at (248,77) size 104x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGContainer {g} at (248,77) size 104x36 -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (268,103) size 4x4 [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (-11,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (middle anchor) text run 1 at (-10.83,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (298,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (328,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(60.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGRect {rect} at (268,103) size 4x4 [fill={[type=SOLID] [color=#CC0066]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGContainer {use} at (358,77) size 104x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGContainer {g} at (358,77) size 104x36 -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (378,103) size 4x4 [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (-11,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (middle anchor) text run 1 at (-10.83,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (408,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGRect {rect} at (438,103) size 4x4 [transform={m=((1.00,0.00)(0.00,1.00)) t=(60.00,0.00)}] [fill={[type=SOLID] [color=#AAAAAA]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGRect {rect} at (378,103) size 4x4 [fill={[type=SOLID] [color=#CC0066]}] [x=-2.00] [y=18.00] [width=4.00] [height=4.00] -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (248,77) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {a} at (358,77) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGText {text} at (-22,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 (end anchor) text run 1 at (-21.67,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (160,112) size 302x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,35.00)}] -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (160,112) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,9) size 9x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 9x14 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 8.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (160,112) size 82x36 -- RenderSVGContainer {g} at (160,112) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,9) size 9x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 9x14 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 8.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (270,112) size 82x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGContainer {g} at (270,112) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,9) size 9x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 9x14 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 8.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (380,112) size 82x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGContainer {g} at (380,112) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,9) size 9x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 9x14 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 8.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (270,112) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {a} at (380,112) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (160,146) size 302x37 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,70.00)}] -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (160,146) size 82x37 -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (160,146) size 82x37 -- RenderSVGContainer {g} at (160,146) size 82x37 -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (270,146) size 82x37 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGContainer {g} at (270,146) size 82x37 -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (380,146) size 82x37 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGContainer {g} at (380,146) size 82x37 -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (270,146) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {a} at (380,146) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGText {text} at (0,-9) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (160,182) size 302x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,105.00)}] -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (160,182) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 20x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 20x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 19.33: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (160,182) size 82x36 -- RenderSVGContainer {g} at (160,182) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 20x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 20x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 19.33: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (270,182) size 82x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGContainer {g} at (270,182) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 20x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 20x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 19.33: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (380,182) size 82x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGContainer {g} at (380,182) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 20x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 20x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 19.33: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (270,182) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {a} at (380,182) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (160,217) size 302x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,140.00)}] -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (160,217) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (160,217) size 82x36 -- RenderSVGContainer {g} at (160,217) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (270,217) size 82x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGContainer {g} at (270,217) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {use} at (380,217) size 82x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGContainer {g} at (380,217) size 82x36 -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (30,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (30.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (60,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (60.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (270,217) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,0.00)}] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGContainer {g} at (380,217) size 22x36 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}] -- RenderSVGText {text} at (0,-8) size 22x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 22x35 -- chunk 1 text run 1 at (0.00,20.00) startOffset 0 endOffset 1 width 21.67: "A" -- RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 264x46 -- chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 263.34: "$Revision: 1.8 $" -- RenderSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -diff --git a/LayoutTests/platform/mac-mojave/svg/W3C-SVG-1.1/struct-use-01-t-expected.txt b/LayoutTests/platform/mac-mojave/svg/W3C-SVG-1.1/struct-use-01-t-expected.txt -deleted file mode 100644 -index fc19d72e263c460c4d260e5a0b6683931a2d82a6..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/svg/W3C-SVG-1.1/struct-use-01-t-expected.txt -+++ /dev/null -@@ -1,91 +0,0 @@ --layer at (0,0) size 480x360 -- RenderView at (0,0) size 480x360 --layer at (0,0) size 480x360 -- RenderSVGRoot {svg} at (0,0) size 480x360 -- RenderSVGContainer {g} at (41,22) size 309x270 -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (0,0) size 33x22 -- RenderSVGRect {rect} at (0,0) size 22x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=20.00] [height=20.00] -- RenderSVGEllipse {circle} at (0,0) size 22x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [cx=10.00] [cy=10.00] [r=10.00] -- RenderSVGEllipse {ellipse} at (0,0) size 22x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [cx=10.00] [cy=10.00] [rx=10.00] [ry=10.00] -- RenderSVGPath {line} at (0,8) size 20x4 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [x1=0.00] [y1=10.00] [x2=20.00] [y2=10.00] -- RenderSVGPath {path} at (0,0) size 22x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M 0 0 L 20 0 L 20 20 L 0 20 Z"] -- RenderSVGPath {polygon} at (0,0) size 22x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [points="0 0 20 0 20 20 0 20 0 0"] -- RenderSVGPath {polyline} at (0,0) size 22x20 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [points="0 0 20 0 20 20"] -- RenderSVGContainer {g} at (0,0) size 22x22 -- RenderSVGRect {rect} at (0,0) size 12x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=10.00] [height=20.00] -- RenderSVGRect {rect} at (8,0) size 14x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=0.00] [width=10.00] [height=20.00] -- RenderSVGContainer {use} at (0,0) size 22x22 -- RenderSVGRect {rect} at (0,0) size 22x22 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=20.00] [height=20.00] -- RenderSVGImage {image} at (0,0) size 20x20 -- RenderSVGText {text} at (0,-14) size 30x18 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 30x18 -- chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 4 width 29.32: "Text" -- RenderSVGContainer {g} at (41,22) size 269x263 -- RenderSVGContainer {g} at (41,22) size 89x263 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,40.00)}] -- RenderSVGText {text} at (-53,-18) size 53x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 53x23 -- chunk 1 (end anchor) text run 1 at (-52.53,0.00) startOffset 0 endOffset 6 width 52.53: "" -- RenderSVGText {text} at (-67,12) size 67x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 67x23 -- chunk 1 (end anchor) text run 1 at (-66.96,30.00) startOffset 0 endOffset 8 width 66.96: "" -- RenderSVGText {text} at (-75,42) size 75x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 75x23 -- chunk 1 (end anchor) text run 1 at (-74.77,60.00) startOffset 0 endOffset 9 width 74.77: "" -- RenderSVGText {text} at (-53,72) size 53x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 53x23 -- chunk 1 (end anchor) text run 1 at (-52.55,90.00) startOffset 0 endOffset 6 width 52.55: "" -- RenderSVGText {text} at (-89,102) size 89x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 89x23 -- chunk 1 (end anchor) text run 1 at (-88.11,120.00) startOffset 0 endOffset 10 width 88.11: "" -- RenderSVGText {text} at (-89,132) size 89x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 89x23 -- chunk 1 (end anchor) text run 1 at (-88.12,150.00) startOffset 0 endOffset 9 width 88.12: "" -- RenderSVGText {text} at (-57,162) size 57x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 57x23 -- chunk 1 (end anchor) text run 1 at (-56.99,180.00) startOffset 0 endOffset 6 width 56.99: "" -- RenderSVGText {text} at (-72,192) size 72x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 72x23 -- chunk 1 (end anchor) text run 1 at (-71.43,210.00) startOffset 0 endOffset 7 width 71.43: "" -- RenderSVGText {text} at (-53,222) size 53x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 53x23 -- chunk 1 (end anchor) text run 1 at (-52.55,240.00) startOffset 0 endOffset 6 width 52.55: "" -- RenderSVGContainer {g} at (260,22) size 50x53 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,40.00)}] -- RenderSVGText {text} at (-33,-18) size 33x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 33x23 -- chunk 1 (end anchor) text run 1 at (-32.56,0.00) startOffset 0 endOffset 3 width 32.56: "" -- RenderSVGText {text} at (-50,12) size 50x23 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 50x23 -- chunk 1 (end anchor) text run 1 at (-49.22,30.00) startOffset 0 endOffset 5 width 49.22: "" -- RenderSVGContainer {g} at (150,25) size 200x267 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,25.00)}] -- RenderSVGContainer {use} at (150,25) size 20x20 -- RenderSVGRect {rect} at (150,25) size 20x20 [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=20.00] [height=20.00] -- RenderSVGContainer {use} at (150,55) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,30.00)}] -- RenderSVGEllipse {circle} at (150,55) size 20x20 [fill={[type=SOLID] [color=#00FF00]}] [cx=10.00] [cy=10.00] [r=10.00] -- RenderSVGContainer {use} at (150,85) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,60.00)}] -- RenderSVGEllipse {ellipse} at (150,85) size 20x20 [fill={[type=SOLID] [color=#00FF00]}] [cx=10.00] [cy=10.00] [rx=10.00] [ry=10.00] -- RenderSVGContainer {use} at (150,124) size 20x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,90.00)}] -- RenderSVGPath {line} at (150,124) size 20x2 [stroke={[type=SOLID] [color=#00FF00] [stroke width=2.00]}] [fill={[type=SOLID] [color=#000000]}] [x1=0.00] [y1=10.00] [x2=20.00] [y2=10.00] -- RenderSVGContainer {use} at (150,144) size 21x21 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}] -- RenderSVGPath {polyline} at (150,144) size 21x21 [stroke={[type=SOLID] [color=#00FF00] [stroke width=2.00]}] [points="0 0 20 0 20 20"] -- RenderSVGContainer {use} at (150,175) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}] -- RenderSVGPath {polygon} at (150,175) size 20x20 [fill={[type=SOLID] [color=#00FF00]}] [points="0 0 20 0 20 20 0 20 0 0"] -- RenderSVGContainer {use} at (150,205) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}] -- RenderSVGPath {path} at (150,205) size 20x20 [fill={[type=SOLID] [color=#00FF00]}] [data="M 0 0 L 20 0 L 20 20 L 0 20 Z"] -- RenderSVGContainer {use} at (150,235) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}] -- RenderSVGImage {image} at (150,235) size 20x20 -- RenderSVGContainer {use} at (150,262) size 48x30 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,260.00)}] -- RenderSVGText {text} at (0,-23) size 48x30 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 48x29 -- chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 4 width 47.04: "Text" -- RenderSVGContainer {use} at (330,25) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(180.00,0.00)}] -- RenderSVGContainer {g} at (330,25) size 20x20 -- RenderSVGRect {rect} at (330,25) size 10x20 [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=10.00] [height=20.00] -- RenderSVGRect {rect} at (340,25) size 10x20 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=0.00] [width=10.00] [height=20.00] -- RenderSVGContainer {use} at (330,55) size 20x20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(180.00,30.00)}] -- RenderSVGContainer {g} at (330,55) size 20x20 -- RenderSVGRect {rect} at (330,55) size 20x20 [fill={[type=SOLID] [color=#00CC00]}] [x=0.00] [y=0.00] [width=20.00] [height=20.00] -- RenderSVGText {text} at (10,304) size 284x46 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 284x46 -- chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 17 width 283.34: "$Revision: 1.14 $" -- RenderSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -diff --git a/LayoutTests/platform/mac-mojave/svg/batik/text/textStyles-expected.txt b/LayoutTests/platform/mac-mojave/svg/batik/text/textStyles-expected.txt -deleted file mode 100644 -index a8f76f9e3d35891e7d22e9590e03240d114c6adc..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/svg/batik/text/textStyles-expected.txt -+++ /dev/null -@@ -1,173 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 450x500 -- RenderSVGRoot {svg} at (0,0) size 448x498 -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGText {text} at (-23,-14) size 46x18 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 46x18 -- chunk 1 (middle anchor) text run 1 at (-22.66,0.00) startOffset 0 endOffset 6 width 45.32: "sample" -- RenderSVGContainer {g} at (31,36) size 384x392 -- RenderSVGText {text} at (133,36) size 184x18 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 183x17 -- chunk 1 (middle anchor) text run 1 at (133.71,50.00) startOffset 0 endOffset 26 width 182.58: "Text Font Faces and Styles" -- RenderSVGText {text} at (184,65) size 82x13 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 82x12 -- chunk 1 (middle anchor) text run 1 at (184.17,75.00) startOffset 0 endOffset 19 width 81.66: "Standard Font Faces" -- RenderSVGContainer {g} at (39,82) size 122x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,110.00)}] -- RenderSVGContainer {use} at (57,82) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-61,4) size 122x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 122x14 -- chunk 1 (middle anchor) text run 1 at (-60.82,15.00) startOffset 0 endOffset 24 width 121.65: "SansSerif, normal weight" -- RenderSVGContainer {g} at (180,82) size 90x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,110.00)}] -- RenderSVGContainer {use} at (180,82) size 90x36 -- RenderSVGText {text} at (-45,-28) size 90x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 90x35 -- chunk 1 (middle anchor) text run 1 at (-45.00,0.00) startOffset 0 endOffset 6 width 90.00: "sample" -- RenderSVGText {text} at (-37,4) size 74x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 74x14 -- chunk 1 (middle anchor) text run 1 at (-36.67,15.00) startOffset 0 endOffset 15 width 73.33: "SansSerif, bold" -- RenderSVGContainer {g} at (306,82) size 88x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,110.00)}] -- RenderSVGContainer {use} at (307,82) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.50,0.00) startOffset 0 endOffset 6 width 84.99: "sample" -- RenderSVGText {text} at (-44,4) size 88x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 88x14 -- chunk 1 (middle anchor) text run 1 at (-44.00,15.00) startOffset 0 endOffset 18 width 87.99: "SansSerif, oblique" -- RenderSVGContainer {g} at (50,132) size 100x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,160.00)}] -- RenderSVGContainer {use} at (57,132) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-50,4) size 100x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 99x14 -- chunk 1 (middle anchor) text run 1 at (-49.49,15.00) startOffset 0 endOffset 20 width 98.98: "Serif, normal weight" -- RenderSVGContainer {g} at (180,132) size 90x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,160.00)}] -- RenderSVGContainer {use} at (180,132) size 90x36 -- RenderSVGText {text} at (-45,-28) size 90x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 90x35 -- chunk 1 (middle anchor) text run 1 at (-45.00,0.00) startOffset 0 endOffset 6 width 90.00: "sample" -- RenderSVGText {text} at (-26,4) size 52x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 51x14 -- chunk 1 (middle anchor) text run 1 at (-25.33,15.00) startOffset 0 endOffset 11 width 50.66: "Serif, bold" -- RenderSVGContainer {g} at (307,132) size 86x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,160.00)}] -- RenderSVGContainer {use} at (307,132) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.50,0.00) startOffset 0 endOffset 6 width 84.99: "sample" -- RenderSVGText {text} at (-33,4) size 66x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 66x14 -- chunk 1 (middle anchor) text run 1 at (-32.66,15.00) startOffset 0 endOffset 14 width 65.32: "Serif, oblique" -- RenderSVGContainer {g} at (31,182) size 138x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,210.00)}] -- RenderSVGContainer {use} at (57,182) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-69,4) size 138x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 137x14 -- chunk 1 (middle anchor) text run 1 at (-68.48,15.00) startOffset 0 endOffset 25 width 136.97: "Monospaced, normal weight" -- RenderSVGContainer {g} at (180,182) size 90x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,210.00)}] -- RenderSVGContainer {use} at (180,182) size 90x36 -- RenderSVGText {text} at (-45,-28) size 90x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 90x35 -- chunk 1 (middle anchor) text run 1 at (-45.00,0.00) startOffset 0 endOffset 6 width 90.00: "sample" -- RenderSVGText {text} at (-45,4) size 90x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 89x14 -- chunk 1 (middle anchor) text run 1 at (-44.33,15.00) startOffset 0 endOffset 16 width 88.65: "Monospaced, bold" -- RenderSVGContainer {g} at (298,182) size 104x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,210.00)}] -- RenderSVGContainer {use} at (307,182) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.50,0.00) startOffset 0 endOffset 6 width 84.99: "sample" -- RenderSVGText {text} at (-52,4) size 104x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 104x14 -- chunk 1 (middle anchor) text run 1 at (-51.66,15.00) startOffset 0 endOffset 19 width 103.31: "Monospaced, oblique" -- RenderSVGContainer {g} at (57,232) size 86x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,260.00)}] -- RenderSVGContainer {use} at (57,232) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-21,4) size 42x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 42x14 -- chunk 1 (middle anchor) text run 1 at (-20.65,15.00) startOffset 0 endOffset 9 width 41.31: "(default)" -- RenderSVGContainer {g} at (173,232) size 104x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,260.00)}] -- RenderSVGContainer {use} at (179,232) size 92x36 -- RenderSVGText {text} at (-46,-28) size 92x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 91x35 -- chunk 1 (middle anchor) text run 1 at (-45.50,0.00) startOffset 0 endOffset 6 width 90.99: "sample" -- RenderSVGText {text} at (-52,4) size 104x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 103x14 -- chunk 1 (middle anchor) text run 1 at (-51.32,15.00) startOffset 0 endOffset 22 width 102.64: "default, bold, oblique" -- RenderSVGContainer {g} at (288,231) size 124x47 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,260.00)}] -- RenderSVGContainer {use} at (306,231) size 88x38 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-62,4) size 124x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 124x14 -- chunk 1 (middle anchor) text run 1 at (-61.76,15.00) startOffset 0 endOffset 25 width 123.52: "stroke-width=1, fill=none" -- RenderSVGText {text} at (181,300) size 88x13 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 87x12 -- chunk 1 (middle anchor) text run 1 at (181.67,310.00) startOffset 0 endOffset 19 width 86.66: "Named Font Families" -- RenderSVGText {text} at (129,315) size 192x13 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 191x12 -- chunk 1 (middle anchor) text run 1 at (129.74,325.00) startOffset 0 endOffset 49 width 190.52: "(Not all typefaces are available on all systems.)" -- RenderSVGContainer {g} at (57,332) size 86x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,360.00)}] -- RenderSVGContainer {use} at (57,332) size 86x36 -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-15,4) size 30x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 30x14 -- chunk 1 (middle anchor) text run 1 at (-15.00,15.00) startOffset 0 endOffset 5 width 29.99: "Times" -- RenderSVGContainer {g} at (171,329) size 108x49 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,360.00)}] -- RenderSVGContainer {use} at (171,329) size 108x38 -- RenderSVGText {text} at (-54,-31) size 108x38 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 108x37 -- chunk 1 (middle anchor) text run 1 at (-53.81,0.00) startOffset 0 endOffset 6 width 107.62: "sample" -- RenderSVGText {text} at (-21,4) size 42x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 41x14 -- chunk 1 (middle anchor) text run 1 at (-20.32,15.00) startOffset 0 endOffset 7 width 40.64: "Verdana" -- RenderSVGContainer {g} at (301,331) size 98x47 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,360.00)}] -- RenderSVGContainer {use} at (301,331) size 98x36 -- RenderSVGText {text} at (-49,-29) size 98x36 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 97x35 -- chunk 1 (middle anchor) text run 1 at (-48.35,0.00) startOffset 0 endOffset 6 width 96.71: "sample" -- RenderSVGText {text} at (-23,4) size 46x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 46x14 -- chunk 1 (middle anchor) text run 1 at (-22.99,15.00) startOffset 0 endOffset 9 width 45.97: "Helvetica" -- RenderSVGContainer {g} at (51,382) size 98x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,410.00)}] -- RenderSVGText {text} at (-49,-28) size 98x35 contains 1 chunk(s) -- RenderSVGInline {tref} at (0,0) size 97x34 -- RenderSVGInlineText {#text} at (0,0) size 97x34 -- chunk 1 (middle anchor) text run 1 at (-48.35,0.00) startOffset 0 endOffset 6 width 96.71: "sample" -- RenderSVGText {text} at (-44,4) size 88x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 87x14 -- chunk 1 (middle anchor) text run 1 at (-43.48,15.00) startOffset 0 endOffset 18 width 86.96: "Arial (underlined)" -- RenderSVGContainer {g} at (179,379) size 92x49 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,410.00)}] -- RenderSVGContainer {use} at (179,379) size 92x38 -- RenderSVGText {text} at (-46,-31) size 92x38 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 92x37 -- chunk 1 (middle anchor) text run 1 at (-45.75,0.00) startOffset 0 endOffset 6 width 91.49: "sample" -- RenderSVGText {text} at (-17,4) size 34x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 34x14 -- chunk 1 (middle anchor) text run 1 at (-16.66,15.00) startOffset 0 endOffset 6 width 33.32: "Impact" -- RenderSVGContainer {g} at (285,382) size 130x46 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,410.00)}] -- RenderSVGText {text} at (-43,-28) size 86x36 contains 1 chunk(s) -- RenderSVGInline {tref} at (0,0) size 85x35 -- RenderSVGInlineText {#text} at (0,0) size 85x35 -- chunk 1 (middle anchor) text run 1 at (-42.49,0.00) startOffset 0 endOffset 6 width 84.98: "sample" -- RenderSVGText {text} at (-65,4) size 130x14 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 129x14 -- chunk 1 (middle anchor) text run 1 at (-64.48,15.00) startOffset 0 endOffset 25 width 128.95: "AvantGarde (line-through)" -- RenderSVGContainer {use} at (0,0) size 448x498 -- RenderSVGContainer {g} at (0,0) size 448x498 -- RenderSVGRect {rect} at (0,0) size 448x498 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=446.00] [height=496.00] -- RenderSVGContainer {g} at (418,466) size 27x29 [transform={m=((1.00,0.00)(0.00,1.00)) t=(418.00,467.00)}] -- RenderSVGViewportContainer {svg} at (418,466) size 27x29 -- RenderSVGPath {path} at (418,469) size 13x18 [fill={[type=SOLID] [color=#6666FF]}] [data="M 172 44 C 137 60 31 135 11 199 C 3 226 33 247 55 232 C 14 306 -1 332 0 356 C 0 370 13 398 44 383 C 52 379 79 358 96 342 C 110 341 120 331 138 314 C 155 328 174 324 190 307 C 212 309 272 229 234 199 C 231 175 204 162 181 181 C 175 179 168 180 163 182 C 185 147 206 100 212 77 C 219 47 188 36 172 44 Z"] -- RenderSVGPath {path} at (432,466) size 13x16 [fill={[type=SOLID] [color=#FF0000]}] [data="M 400 0 C 382 3 351 31 351 31 C 322 54 308 89 323 126 C 310 140 294 170 294 193 C 294 221 314 245 344 222 C 351 230 365 238 381 227 C 376 256 384 275 407 276 C 408 286 420 307 443 293 C 459 283 501 254 522 237 C 547 214 547 143 504 148 C 537 89 501 52 477 64 C 467 68 431 89 425 94 C 424 87 420 82 414 80 C 436 45 436 -5 401 0 Z"] -- RenderSVGPath {path} at (426,484) size 15x11 [fill={[type=SOLID] [color=#33CC33]}] [data="M 275 353 C 229 365 187 396 161 444 C 152 460 167 481 186 477 C 172 501 146 544 171 558 C 199 574 223 550 231 543 C 249 564 281 553 312 526 C 353 540 380 524 415 473 C 423 461 445 430 445 408 C 445 392 430 378 410 387 C 409 375 401 349 357 368 C 347 362 326 363 303 385 C 308 375 300 347 275 353 Z"] -diff --git a/LayoutTests/platform/mac-mojave/svg/custom/glyph-selection-arabic-forms-expected.txt b/LayoutTests/platform/mac-mojave/svg/custom/glyph-selection-arabic-forms-expected.txt -deleted file mode 100644 -index d4c5f0bc3e343ef7e43b161270eae5541b69eb0e..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/svg/custom/glyph-selection-arabic-forms-expected.txt -+++ /dev/null -@@ -1,10 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 400x50 -- RenderSVGRoot {svg} at (10,7) size 366x18 -- RenderSVGHiddenContainer {defs} at (0,0) size 0x0 -- RenderSVGContainer {g} at (10,7) size 366x18 -- RenderSVGText {text} at (10,7) size 366x18 contains 1 chunk(s) -- RenderSVGInlineText {#text} at (0,0) size 366x18 -- chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 56 width 358.79 RTL: "\x{62E}] [\x{62E}][\x{62E}][\x{62E}] | [\x{62E}] [\x{62E}\x{62E}][\x{62E}] | [\x{62E}] [\x{62E}\x{62E}\x{62E}] | [\x{62E} \x{62E}\x{62E}\x{62E}] | \x{62E} \x{62E}\x{62E}\x{62E}" -- chunk 1 text run 1 at (368.79,20.00) startOffset 0 endOffset 1 width 6.88: "]" -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.png b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.png -deleted file mode 100644 -index a082dc91820a52b2d46650ebbf107bb1789e8cd5..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.txt -deleted file mode 100644 -index d75ff05c5cc5922eed6bcf651f71762d7d8c9106..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug10296-1-expected.txt -+++ /dev/null -@@ -1,1041 +0,0 @@ --layer at (0,0) size 785x5950 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x5950 -- RenderBlock {HTML} at (0,0) size 785x5950 -- RenderBody {BODY} at (8,21) size 769x5913 -- RenderBlock {H1} at (0,0) size 769x37 -- RenderText {#text} at (0,0) size 481x37 -- text run at (0,0) width 481: "Vertical alignment and table height" -- RenderBlock {P} at (0,58) size 769x55 -- RenderText {#text} at (0,0) size 275x18 -- text run at (0,0) width 275: "The following three tables have heights of " -- RenderInline {CODE} at (0,0) size 32x15 -- RenderText {#text} at (274,2) size 32x15 -- text run at (274,2) width 32: "auto" -- RenderText {#text} at (305,0) size 9x18 -- text run at (305,0) width 9: ", " -- RenderInline {CODE} at (0,0) size 32x15 -- RenderText {#text} at (313,2) size 32x15 -- text run at (313,2) width 32: "30px" -- RenderText {#text} at (344,0) size 36x18 -- text run at (344,0) width 36: ", and " -- RenderInline {CODE} at (0,0) size 40x15 -- RenderText {#text} at (379,2) size 40x15 -- text run at (379,2) width 40: "500px" -- RenderText {#text} at (418,0) size 764x54 -- text run at (418,0) width 9: ". " -- text run at (426,0) width 338: "The first one should have the height of the sum of its" -- text run at (0,18) width 40: "rows. " -- text run at (39,18) width 670: "The second and third can be handled however the browser wants, but there just here to make sure it does" -- text run at (0,36) width 144: "something reasonable." -- RenderTable {TABLE} at (0,128) size 111x147 -- RenderTableSection {TBODY} at (0,0) size 111x146 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,50) size 111x22 -- RenderTableCell {TD} at (2,50) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,50) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,50) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,74) size 111x22 -- RenderTableCell {TD} at (2,74) size 35x22 [border: (1px solid #000000)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,74) size 35x22 [border: (1px solid #000000)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,74) size 35x22 [border: (1px solid #000000)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,98) size 111x22 -- RenderTableCell {TD} at (2,98) size 35x22 [border: (1px solid #000000)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,98) size 35x22 [border: (1px solid #000000)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,98) size 35x22 [border: (1px solid #000000)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,122) size 111x22 -- RenderTableCell {TD} at (2,122) size 35x22 [border: (1px solid #000000)] [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,122) size 35x22 [border: (1px solid #000000)] [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,122) size 35x22 [border: (1px solid #000000)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,274) size 111x147 -- RenderTableSection {TBODY} at (0,0) size 111x146 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,50) size 111x22 -- RenderTableCell {TD} at (2,50) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,50) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,50) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,74) size 111x22 -- RenderTableCell {TD} at (2,74) size 35x22 [border: (1px solid #000000)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,74) size 35x22 [border: (1px solid #000000)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,74) size 35x22 [border: (1px solid #000000)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,98) size 111x22 -- RenderTableCell {TD} at (2,98) size 35x22 [border: (1px solid #000000)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,98) size 35x22 [border: (1px solid #000000)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,98) size 35x22 [border: (1px solid #000000)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,122) size 111x22 -- RenderTableCell {TD} at (2,122) size 35x22 [border: (1px solid #000000)] [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,122) size 35x22 [border: (1px solid #000000)] [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,122) size 35x22 [border: (1px solid #000000)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,420) size 111x501 -- RenderTableSection {TBODY} at (0,0) size 111x500 -- RenderTableRow {TR} at (0,2) size 111x81 -- RenderTableCell {TD} at (2,31) size 35x23 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,31) size 35x23 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,31) size 35x23 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,85) size 111x81 -- RenderTableCell {TD} at (2,114) size 35x23 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,114) size 35x23 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,114) size 35x23 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,168) size 111x81 -- RenderTableCell {TD} at (2,197) size 35x23 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,197) size 35x23 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,197) size 35x23 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,251) size 111x81 -- RenderTableCell {TD} at (2,280) size 35x23 [border: (1px solid #000000)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,280) size 35x23 [border: (1px solid #000000)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,280) size 35x23 [border: (1px solid #000000)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,334) size 111x81 -- RenderTableCell {TD} at (2,363) size 35x23 [border: (1px solid #000000)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,363) size 35x23 [border: (1px solid #000000)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,363) size 35x23 [border: (1px solid #000000)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,417) size 111x81 -- RenderTableCell {TD} at (2,446) size 35x23 [border: (1px solid #000000)] [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,446) size 35x23 [border: (1px solid #000000)] [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,446) size 35x23 [border: (1px solid #000000)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderBlock {P} at (0,936) size 769x37 -- RenderText {#text} at (0,0) size 747x36 -- text run at (0,0) width 238: "These tables test percentage heights. " -- text run at (237,0) width 510: "The first should be its natural height; the second should be 50% of the height of" -- text run at (0,18) width 209: "the div (600px), which is 300px." -- RenderTable {TABLE} at (0,988) size 111x147 -- RenderTableSection {TBODY} at (0,0) size 111x146 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,50) size 111x22 -- RenderTableCell {TD} at (2,50) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,50) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,50) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,74) size 111x22 -- RenderTableCell {TD} at (2,74) size 35x22 [border: (1px solid #000000)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,74) size 35x22 [border: (1px solid #000000)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,74) size 35x22 [border: (1px solid #000000)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,98) size 111x22 -- RenderTableCell {TD} at (2,98) size 35x22 [border: (1px solid #000000)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,98) size 35x22 [border: (1px solid #000000)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,98) size 35x22 [border: (1px solid #000000)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,122) size 111x22 -- RenderTableCell {TD} at (2,122) size 35x22 [border: (1px solid #000000)] [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,122) size 35x22 [border: (1px solid #000000)] [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,122) size 35x22 [border: (1px solid #000000)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {DIV} at (0,1134) size 769x607 [border: (3px solid #800080)] -- RenderTable {TABLE} at (3,3) size 111x300 -- RenderTableSection {TBODY} at (0,0) size 111x300 -- RenderTableRow {TR} at (0,2) size 111x48 -- RenderTableCell {TD} at (2,14) size 35x23 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,14) size 35x23 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,14) size 35x23 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,51) size 111x49 -- RenderTableCell {TD} at (2,64) size 35x23 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,64) size 35x23 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,64) size 35x23 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,101) size 111x48 -- RenderTableCell {TD} at (2,114) size 35x23 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,114) size 35x23 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,114) size 35x23 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,150) size 111x49 -- RenderTableCell {TD} at (2,163) size 35x23 [border: (1px solid #000000)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,163) size 35x23 [border: (1px solid #000000)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,163) size 35x23 [border: (1px solid #000000)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,200) size 111x49 -- RenderTableCell {TD} at (2,213) size 35x23 [border: (1px solid #000000)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,213) size 35x23 [border: (1px solid #000000)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,213) size 35x23 [border: (1px solid #000000)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableRow {TR} at (0,250) size 111x48 -- RenderTableCell {TD} at (2,263) size 35x23 [border: (1px solid #000000)] [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (38,263) size 35x23 [border: (1px solid #000000)] [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,263) size 35x23 [border: (1px solid #000000)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderBlock {P} at (0,1756) size 769x55 -- RenderText {#text} at (0,0) size 154x18 -- text run at (0,0) width 154: "The following tests test " -- RenderInline {CODE} at (0,0) size 48x15 -- RenderText {#text} at (153,2) size 48x15 -- text run at (153,2) width 48: "height" -- RenderText {#text} at (200,0) size 170x18 -- text run at (200,0) width 170: " on table rows. A value of " -- RenderInline {CODE} at (0,0) size 32x15 -- RenderText {#text} at (369,2) size 32x15 -- text run at (369,2) width 32: "auto" -- RenderText {#text} at (400,0) size 761x54 -- text run at (400,0) width 325: " requires the minimum height needed by the cells. " -- text run at (724,0) width 25: "In a" -- text run at (0,18) width 761: "simple case, this is just the height of the tallest cell (excluding the increased padding, of course, since with the padding" -- text run at (0,36) width 202: "the cells have the same height):" -- RenderTable {TABLE} at (0,1826) size 111x45 -- RenderTableSection {TBODY} at (0,0) size 111x44 -- RenderTableRow {TR} at (0,2) size 111x40 -- RenderTableCell {TD} at (2,11) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x40 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBR {BR} at (32,2) size 1x18 -- RenderText {#text} at (2,20) size 31x18 -- text run at (2,20) width 31: "Data" -- RenderTableCell {TD} at (74,11) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,1886) size 769x37 -- RenderText {#text} at (0,0) size 218x18 -- text run at (0,0) width 218: "However, vertical-align values of " -- RenderInline {CODE} at (0,0) size 63x15 -- RenderText {#text} at (217,2) size 63x15 -- text run at (217,2) width 63: "baseline" -- RenderText {#text} at (279,0) size 759x36 -- text run at (279,0) width 480: " (the default, but could be overridden in a UA stylesheet) can make it taller" -- text run at (0,18) width 60: "than that:" -- RenderTable {TABLE} at (0,1938) size 292x145 -- RenderTableSection {TBODY} at (0,0) size 292x144 -- RenderTableRow {TR} at (0,2) size 292x140 -- RenderTableCell {TD} at (2,46) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 126x96 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderInline {SPAN} at (0,0) size 121x74 -- RenderText {#text} at (2,2) size 121x74 -- text run at (2,2) width 121: "Data" -- RenderBR {BR} at (122,46) size 1x18 -- RenderText {#text} at (2,76) size 31x18 -- text run at (2,76) width 31: "Data" -- RenderTableCell {TD} at (165,46) size 125x96 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBR {BR} at (32,2) size 1x18 -- RenderInline {SPAN} at (0,0) size 121x74 -- RenderText {#text} at (2,20) size 121x74 -- text run at (2,20) width 121: "Data" -- RenderBlock {P} at (0,2098) size 769x19 -- RenderText {#text} at (0,0) size 537x18 -- text run at (0,0) width 537: "The exact same thing should happen when the given height for the row is too small:" -- RenderTable {TABLE} at (0,2132) size 292x145 -- RenderTableSection {TBODY} at (0,0) size 292x144 -- RenderTableRow {TR} at (0,2) size 292x140 -- RenderTableCell {TD} at (2,46) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 126x96 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderInline {SPAN} at (0,0) size 121x74 -- RenderText {#text} at (2,2) size 121x74 -- text run at (2,2) width 121: "Data" -- RenderBR {BR} at (122,46) size 1x18 -- RenderText {#text} at (2,76) size 31x18 -- text run at (2,76) width 31: "Data" -- RenderTableCell {TD} at (165,46) size 125x96 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBR {BR} at (32,2) size 1x18 -- RenderInline {SPAN} at (0,0) size 121x74 -- RenderText {#text} at (2,20) size 121x74 -- text run at (2,20) width 121: "Data" -- RenderBlock {P} at (0,2292) size 769x37 -- RenderText {#text} at (0,0) size 756x36 -- text run at (0,0) width 756: "Padding should also be able to increase the height (here the first cell has 20px padding-top and the second has 20px of" -- text run at (0,18) width 112: "padding-bottom):" -- RenderTable {TABLE} at (0,2344) size 111x46 -- RenderTableSection {TBODY} at (0,0) size 111x45 -- RenderTableRow {TR} at (0,2) size 111x41 -- RenderTableCell {TD} at (2,2) size 35x41 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,21) size 31x18 -- text run at (2,21) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x41 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,11) size 35x23 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTable {TABLE} at (0,2389) size 111x46 -- RenderTableSection {TBODY} at (0,0) size 111x45 -- RenderTableRow {TR} at (0,2) size 111x41 -- RenderTableCell {TD} at (2,2) size 35x41 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,21) size 31x18 -- text run at (2,21) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x41 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,11) size 35x23 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderBlock {P} at (0,2450) size 769x37 -- RenderText {#text} at (0,0) size 764x36 -- text run at (0,0) width 488: "These two tables should be 200px tall, because of a height on the table row. " -- text run at (487,0) width 277: "The second one should have its second and" -- text run at (0,18) width 452: "third cell's contents offset from the middle by 10px (bottom, then top):" -- RenderTable {TABLE} at (0,2502) size 292x205 -- RenderTableSection {TBODY} at (0,0) size 292x204 -- RenderTableRow {TR} at (0,2) size 292x200 -- RenderTableCell {TD} at (2,46) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 126x96 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderInline {SPAN} at (0,0) size 121x74 -- RenderText {#text} at (2,2) size 121x74 -- text run at (2,2) width 121: "Data" -- RenderBR {BR} at (122,46) size 1x18 -- RenderText {#text} at (2,76) size 31x18 -- text run at (2,76) width 31: "Data" -- RenderTableCell {TD} at (165,46) size 125x96 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBR {BR} at (32,2) size 1x18 -- RenderInline {SPAN} at (0,0) size 121x74 -- RenderText {#text} at (2,20) size 121x74 -- text run at (2,20) width 121: "Data" -- RenderTable {TABLE} at (0,2706) size 111x205 -- RenderTableSection {TBODY} at (0,0) size 111x204 -- RenderTableRow {TR} at (0,2) size 111x200 -- RenderTableCell {TD} at (2,81) size 35x42 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,21) size 31x19 -- text run at (2,22) width 31: "Data" -- RenderTableCell {TD} at (38,81) size 35x42 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x19 -- text run at (2,3) width 31: "Data" -- RenderTableCell {TD} at (74,91) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,2926) size 769x37 -- RenderText {#text} at (0,0) size 732x36 -- text run at (0,0) width 527: "The behavior of percentage heights on table-row or table-row-group is undefined. " -- text run at (526,0) width 206: "However, I think they should be" -- text run at (0,18) width 283: "ignored, so these tables should look normal:" -- RenderTable {TABLE} at (0,2978) size 111x75 -- RenderTableSection {TBODY} at (0,0) size 111x74 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,50) size 111x22 -- RenderTableCell {TD} at (2,50) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,50) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,50) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,3052) size 111x75 -- RenderTableSection {TBODY} at (0,0) size 111x74 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,50) size 111x22 -- RenderTableCell {TD} at (2,50) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,50) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,50) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,3126) size 111x171 -- RenderTableSection {THEAD} at (0,0) size 111x50 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableSection {TFOOT} at (0,122) size 111x48 -- RenderTableRow {TR} at (0,0) size 111x22 -- RenderTableCell {TD} at (2,0) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,0) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,0) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,24) size 111x22 -- RenderTableCell {TD} at (2,24) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,24) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,24) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableSection {TBODY} at (0,50) size 111x72 -- RenderTableRow {TR} at (0,0) size 111x22 -- RenderTableCell {TD} at (2,0) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,0) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,0) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,24) size 111x22 -- RenderTableCell {TD} at (2,24) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,24) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,24) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,48) size 111x22 -- RenderTableCell {TD} at (2,48) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,48) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,48) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,3296) size 111x171 -- RenderTableSection {THEAD} at (0,0) size 111x50 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,26) size 111x22 -- RenderTableCell {TD} at (2,26) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,26) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableSection {TFOOT} at (0,122) size 111x48 -- RenderTableRow {TR} at (0,0) size 111x22 -- RenderTableCell {TD} at (2,0) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,0) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,0) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,24) size 111x22 -- RenderTableCell {TD} at (2,24) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,24) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,24) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableSection {TBODY} at (0,50) size 111x72 -- RenderTableRow {TR} at (0,0) size 111x22 -- RenderTableCell {TD} at (2,0) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,0) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,0) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,24) size 111x22 -- RenderTableCell {TD} at (2,24) size 35x22 [border: (1px solid #000000)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,24) size 35x22 [border: (1px solid #000000)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,24) size 35x22 [border: (1px solid #000000)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableRow {TR} at (0,48) size 111x22 -- RenderTableCell {TD} at (2,48) size 35x22 [border: (1px solid #000000)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,48) size 35x22 [border: (1px solid #000000)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,48) size 35x22 [border: (1px solid #000000)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,3482) size 769x19 -- RenderText {#text} at (0,0) size 498x18 -- text run at (0,0) width 498: "The following table should look normal, since very small heights get ignored:" -- RenderTable {TABLE} at (0,3516) size 111x27 -- RenderTableSection {TBODY} at (0,0) size 111x26 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,3558) size 769x19 -- RenderText {#text} at (0,0) size 258x18 -- text run at (0,0) width 258: "So should this one, for auto cell heights:" -- RenderTable {TABLE} at (0,3592) size 111x27 -- RenderTableSection {TBODY} at (0,0) size 111x26 -- RenderTableRow {TR} at (0,2) size 111x22 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,3634) size 769x19 -- RenderText {#text} at (0,0) size 643x18 -- text run at (0,0) width 643: "These tables should look the same - all cells should be 100px tall with the text at the top of the cells:" -- RenderTable {TABLE} at (0,3668) size 111x109 -- RenderTableSection {TBODY} at (0,0) size 111x108 -- RenderTableRow {TR} at (0,2) size 111x104 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,3776) size 111x109 -- RenderTableSection {TBODY} at (0,0) size 111x108 -- RenderTableRow {TR} at (0,2) size 111x104 -- RenderTableCell {TD} at (2,43) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,43) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,43) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,3884) size 111x109 -- RenderTableSection {TBODY} at (0,0) size 111x108 -- RenderTableRow {TR} at (0,2) size 111x104 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTable {TABLE} at (0,3992) size 111x109 -- RenderTableSection {TBODY} at (0,0) size 111x108 -- RenderTableRow {TR} at (0,2) size 111x104 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,2) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,4116) size 769x19 -- RenderText {#text} at (0,0) size 730x18 -- text run at (0,0) width 730: "In these four tables, the text should be 20px lower each cell, but should otherwise look like the above three tables:" -- RenderTable {TABLE} at (0,4150) size 107x109 -- RenderTableSection {TBODY} at (0,0) size 107x108 -- RenderTableRow {TR} at (0,2) size 107x104 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 33x60 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,2) size 33x100 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,4258) size 107x109 -- RenderTableSection {TBODY} at (0,0) size 107x108 -- RenderTableRow {TR} at (0,2) size 107x104 -- RenderTableCell {TD} at (2,2) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,2) size 33x40 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,2) size 33x60 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,4366) size 107x109 -- RenderTableSection {TBODY} at (0,0) size 107x108 -- RenderTableRow {TR} at (0,2) size 107x104 -- RenderTableCell {TD} at (2,43) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,24) size 33x60 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,4) size 33x100 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,4474) size 111x109 -- RenderTableSection {TBODY} at (0,0) size 111x108 -- RenderTableRow {TR} at (0,2) size 111x104 -- RenderTableCell {TD} at (2,43) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,43) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (74,43) size 35x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderBlock {P} at (0,4598) size 769x19 -- RenderText {#text} at (0,0) size 378x18 -- text run at (0,0) width 378: "These should have the text 40px from the top in every cell:" -- RenderTable {TABLE} at (0,4632) size 107x108 -- RenderTableSection {TBODY} at (0,0) size 107x107 -- RenderTableRow {TR} at (0,2) size 107x103 -- RenderTableCell {TD} at (2,41) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,22) size 33x60 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,2) size 33x100 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,4739) size 107x107 -- RenderTableSection {TBODY} at (0,0) size 107x106 -- RenderTableRow {TR} at (0,2) size 107x102 -- RenderTableCell {TD} at (2,41) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,22) size 33x40 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,2) size 33x60 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,4845) size 107x107 -- RenderTableSection {TBODY} at (0,0) size 107x106 -- RenderTableRow {TR} at (0,2) size 107x102 -- RenderTableCell {TD} at (2,42) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,23) size 33x60 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,3) size 33x100 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,4951) size 107x107 -- RenderTableSection {TBODY} at (0,0) size 107x106 -- RenderTableRow {TR} at (0,2) size 107x102 -- RenderTableCell {TD} at (2,82) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,44) size 33x60 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,21) size 31x18 -- text run at (1,21) width 31: "Data" -- RenderTableCell {TD} at (72,4) size 33x100 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,41) size 31x18 -- text run at (1,41) width 31: "Data" -- RenderTable {TABLE} at (0,5057) size 107x69 -- RenderTableSection {TBODY} at (0,0) size 107x68 -- RenderTableRow {TR} at (0,2) size 107x64 -- RenderTableCell {TD} at (2,44) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,26) size 33x40 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (1,1) size 31x18 -- text run at (1,1) width 31: "Data" -- RenderTableCell {TD} at (72,6) size 33x60 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (1,1) size 31x18 -- text run at (1,1) width 31: "Data" -- RenderBlock {P} at (0,5141) size 769x37 -- RenderText {#text} at (0,0) size 766x36 -- text run at (0,0) width 766: "In each of the following tables, three of the cells should have the same baseline of the first line, and the three so marked" -- text run at (0,18) width 275: "should be aligned top, middle, and bottom:" -- RenderTable {TABLE} at (0,5193) size 459x119 -- RenderTableSection {TBODY} at (0,0) size 459x118 -- RenderTableRow {TR} at (0,2) size 459x114 -- RenderTableCell {TD} at (2,74) size 35x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (38,45) size 95x59 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 91x55 -- text run at (2,2) width 91: "Data" -- RenderTableCell {TD} at (134,2) size 187x114 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 182x110 -- text run at (2,2) width 182: "Data" -- RenderTableCell {TD} at (322,2) size 29x22 [border: (1px solid #000000)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 25x18 -- text run at (2,2) width 25: "Top" -- RenderTableCell {TD} at (352,48) size 51x22 [border: (1px solid #000000)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 47x18 -- text run at (2,2) width 47: "Middle" -- RenderTableCell {TD} at (404,94) size 53x22 [border: (1px solid #000000)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 49x18 -- text run at (2,2) width 49: "Bottom" -- RenderTable {TABLE} at (0,5311) size 459x119 -- RenderTableSection {TBODY} at (0,0) size 459x118 -- RenderTableRow {TR} at (0,2) size 459x114 -- RenderTableCell {TD} at (2,2) size 29x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 25x18 -- text run at (2,2) width 25: "Top" -- RenderTableCell {TD} at (32,48) size 51x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 47x18 -- text run at (2,2) width 47: "Middle" -- RenderTableCell {TD} at (84,94) size 53x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 49x18 -- text run at (2,2) width 49: "Bottom" -- RenderTableCell {TD} at (138,2) size 187x114 [border: (1px solid #000000)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 182x110 -- text run at (2,2) width 182: "Data" -- RenderTableCell {TD} at (326,74) size 35x22 [border: (1px solid #000000)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (362,45) size 95x59 [border: (1px solid #000000)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 91x55 -- text run at (2,2) width 91: "Data" -- RenderTable {TABLE} at (0,5429) size 459x119 -- RenderTableSection {TBODY} at (0,0) size 459x118 -- RenderTableRow {TR} at (0,2) size 459x114 -- RenderTableCell {TD} at (2,2) size 186x114 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 182x110 -- text run at (2,2) width 182: "Data" -- RenderTableCell {TD} at (189,2) size 29x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 25x18 -- text run at (2,2) width 25: "Top" -- RenderTableCell {TD} at (219,48) size 52x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 47x18 -- text run at (2,2) width 47: "Middle" -- RenderTableCell {TD} at (272,74) size 35x22 [border: (1px solid #000000)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (308,94) size 53x22 [border: (1px solid #000000)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 49x18 -- text run at (2,2) width 49: "Bottom" -- RenderTableCell {TD} at (362,45) size 95x59 [border: (1px solid #000000)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 91x55 -- text run at (2,2) width 91: "Data" -- RenderTable {TABLE} at (0,5547) size 459x119 -- RenderTableSection {TBODY} at (0,0) size 459x118 -- RenderTableRow {TR} at (0,2) size 459x114 -- RenderTableCell {TD} at (2,2) size 29x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 25x18 -- text run at (2,2) width 25: "Top" -- RenderTableCell {TD} at (32,74) size 35x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (68,45) size 96x59 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 91x55 -- text run at (2,2) width 91: "Data" -- RenderTableCell {TD} at (165,48) size 51x22 [border: (1px solid #000000)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 47x18 -- text run at (2,2) width 47: "Middle" -- RenderTableCell {TD} at (217,94) size 53x22 [border: (1px solid #000000)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 49x18 -- text run at (2,2) width 49: "Bottom" -- RenderTableCell {TD} at (271,2) size 186x114 [border: (1px solid #000000)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 182x110 -- text run at (2,2) width 182: "Data" -- RenderTable {TABLE} at (0,5665) size 459x119 -- RenderTableSection {TBODY} at (0,0) size 459x118 -- RenderTableRow {TR} at (0,2) size 459x114 -- RenderTableCell {TD} at (2,2) size 29x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 25x18 -- text run at (2,2) width 25: "Top" -- RenderTableCell {TD} at (32,45) size 96x59 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 91x55 -- text run at (2,2) width 91: "Data" -- RenderTableCell {TD} at (129,94) size 53x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 49x18 -- text run at (2,2) width 49: "Bottom" -- RenderTableCell {TD} at (183,74) size 35x22 [border: (1px solid #000000)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 31x18 -- text run at (2,2) width 31: "Data" -- RenderTableCell {TD} at (219,2) size 186x114 [border: (1px solid #000000)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 182x110 -- text run at (2,2) width 182: "Data" -- RenderTableCell {TD} at (406,48) size 51x22 [border: (1px solid #000000)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 47x18 -- text run at (2,2) width 47: "Middle" -- RenderBlock {HR} at (0,5791) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,5809) size 769x36 -- RenderInline {A} at (0,0) size 88x18 [color=#0000EE] -- RenderImage {IMG} at (0,0) size 88x31 -- RenderBlock {P} at (0,5860) size 769x19 -- RenderText {#text} at (0,0) size 59x18 -- text run at (0,0) width 59: "(Back to " -- RenderInline {A} at (0,0) size 161x18 [color=#0000EE] -- RenderText {#text} at (58,0) size 161x18 -- text run at (58,0) width 161: "CSS Testing Information" -- RenderText {#text} at (218,0) size 9x18 -- text run at (218,0) width 9: ", " -- RenderInline {A} at (0,0) size 83x18 [color=#0000EE] -- RenderText {#text} at (226,0) size 83x18 -- text run at (226,0) width 83: "David Baron" -- RenderText {#text} at (308,0) size 6x18 -- text run at (308,0) width 6: ")" -- RenderBlock {P} at (0,5894) size 769x19 -- RenderInline {A} at (0,0) size 32x18 [color=#0000EE] -- RenderText {#text} at (0,0) size 32x18 -- text run at (0,0) width 32: "LDB" -- RenderText {#text} at (32,0) size 8x18 -- text run at (32,0) width 8: ", " -- RenderInline {A} at (0,0) size 158x18 [color=#0000EE] -- RenderText {#text} at (40,0) size 158x18 -- text run at (40,0) width 158: "dbaron@fas.harvard.edu" -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.png b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.png -deleted file mode 100644 -index 10f610304dec12b64e147968c50d6109ac344723..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.txt -deleted file mode 100644 -index fb632f3a537a755b3bcb456ddfc32ce6f9bdd3a0..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug139524-2-expected.txt -+++ /dev/null -@@ -1,49 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x357 -- RenderBlock {HTML} at (0,0) size 800x358 -- RenderBody {BODY} at (8,18) size 784x332 -- RenderBlock {H3} at (0,0) size 784x22 -- RenderText {#text} at (0,0) size 520x22 -- text run at (0,0) width 520: "SPAN attribute of COL element being ignored in Mozilla 1.0 rc1" -- RenderBlock {P} at (0,40) size 784x37 -- RenderText {#text} at (0,0) size 744x36 -- text run at (0,0) width 744: "(Note: this is a regression bug - I don't know when it appeared, but I remember the SPAN attribute on COL elements" -- text run at (0,18) width 278: "worked fine sometime before Mozilla 0.9.6)" -- RenderBlock {P} at (0,92) size 784x19 -- RenderText {#text} at (0,0) size 354x18 -- text run at (0,0) width 354: "The following TABLE has a COLGROUP structure of:" -- RenderBlock {PRE} at (15,126) size 769x61 [color=#000066] -- RenderText {#text} at (0,0) size 211x60 -- text run at (0,0) width 79: "" -- text run at (78,0) width 1: " " -- text run at (0,15) width 211: " " -- text run at (210,15) width 1: " " -- text run at (0,30) width 141: " " -- text run at (140,30) width 1: " " -- text run at (0,45) width 86: "" -- text run at (85,45) width 1: " " -- RenderBlock {P} at (0,202) size 784x19 -- RenderText {#text} at (0,0) size 563x18 -- text run at (0,0) width 563: "So the first two colums should both be 100px wide, and the third should be 200px wide." -- RenderBlock {P} at (0,236) size 784x19 -- RenderText {#text} at (0,0) size 580x18 -- text run at (0,0) width 580: "However, the first column is 100px, the second is 200px, and the third is the default width." -- RenderBlock {P} at (0,270) size 784x19 -- RenderText {#text} at (0,0) size 384x18 -- text run at (0,0) width 384: "So it would appear that the SPAN attribute is being ignored." -- RenderTable {TABLE} at (0,304) size 408x27 -- RenderTableCol {COLGROUP} at (0,0) size 0x0 -- RenderTableCol {COL} at (0,0) size 0x0 -- RenderTableCol {COL} at (0,0) size 0x0 -- RenderTableSection {TBODY} at (0,0) size 408x26 -- RenderTableRow {TR} at (0,2) size 408x22 -- RenderTableCell {TD} at (2,2) size 100x22 [border: (1px solid #000000)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (104,2) size 100x22 [border: (1px solid #000000)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (206,2) size 200x22 [border: (1px solid #000000)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug2479-3-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug2479-3-expected.txt -deleted file mode 100644 -index 3238871aeb2241c902c9412823a918a4f7ceaf5a..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug2479-3-expected.txt -+++ /dev/null -@@ -1,119 +0,0 @@ --layer at (0,0) size 785x685 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x685 -- RenderBlock {HTML} at (0,0) size 785x685 -- RenderBody {BODY} at (8,21) size 769x648 -- RenderBlock {H1} at (0,0) size 769x37 -- RenderText {#text} at (0,0) size 311x37 -- text run at (0,0) width 311: "Generic Table Tests - 1" -- RenderBlock {P} at (0,58) size 769x19 -- RenderText {#text} at (0,0) size 397x18 -- text run at (0,0) width 397: "If you have any comments to make regarding this test, e-mail " -- RenderInline {A} at (0,0) size 186x18 [color=#0000EE] -- RenderText {#text} at (396,0) size 186x18 -- text run at (396,0) width 186: "py8ieh=eviltests@bath.ac.uk" -- RenderText {#text} at (581,0) size 5x18 -- text run at (581,0) width 5: "." -- RenderBlock {DL} at (0,92) size 769x37 -- RenderBlock {DT} at (0,0) size 769x18 -- RenderText {#text} at (0,0) size 83x18 -- text run at (0,0) width 83: "Prerequisites" -- RenderBlock {DD} at (40,18) size 729x18 -- RenderText {#text} at (0,0) size 697x18 -- text run at (0,0) width 697: "Browsers that are subjected to this test should support CSS1 and the CSS2 table model, and multiple classes." -- RenderBlock {P} at (0,144) size 769x99 [border: (5px double #FF0000)] -- RenderBlock (anonymous) at (13,13) size 743x18 -- RenderText {#text} at (0,0) size 240x18 -- text run at (0,0) width 240: "If this paragraph breaks the line here:" -- RenderTable {SPAN} at (13,31) size 60x18 -- RenderTableSection (anonymous) at (0,0) size 60x18 -- RenderTableRow (anonymous) at (0,0) size 60x18 -- RenderTableCell (anonymous) at (0,0) size 60x18 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 60x18 -- text run at (0,0) width 60: "and here:" -- RenderBlock (anonymous) at (13,49) size 743x36 -- RenderText {#text} at (0,0) size 121x18 -- text run at (0,0) width 121: "then your browser " -- RenderInline {EM} at (0,0) size 83x18 -- RenderText {#text} at (120,0) size 83x18 -- text run at (120,0) width 83: "does support" -- RenderText {#text} at (202,0) size 165x18 -- text run at (202,0) width 165: " table values on 'display'. " -- RenderInline {STRONG} at (0,0) size 715x36 -- RenderText {#text} at (366,0) size 715x36 -- text run at (366,0) width 349: "If this paragraphs flows without any undue breaks," -- text run at (0,18) width 458: "then you should mark your browser as not supporting table values!" -- RenderBlock {H2} at (0,262) size 769x29 -- RenderText {#text} at (0,0) size 218x28 -- text run at (0,0) width 218: "1. Table -> Table Cell" -- RenderBlock {P} at (0,310) size 769x37 -- RenderText {#text} at (0,0) size 762x36 -- text run at (0,0) width 762: "Below there should be a gray bar, spanning the width of the BODY, with the text \"Left\" to the left and the text \"Right\"," -- text run at (0,18) width 222: "on the same line, flush to the right." -- RenderTable {DIV} at (0,362) size 769x19 [bgcolor=#C0C0C0] -- RenderTableSection (anonymous) at (0,0) size 769x18 -- RenderTableRow (anonymous) at (0,0) size 769x18 -- RenderTableCell {DIV} at (0,0) size 330x18 [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 27x18 -- text run at (0,0) width 27: "Left" -- RenderTableCell {DIV} at (329,0) size 441x18 [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (403,0) size 37x18 -- text run at (403,0) width 37: "Right" -- RenderBlock {H2} at (0,400) size 769x29 -- RenderText {#text} at (0,0) size 156x28 -- text run at (0,0) width 156: "Submit Results" -- RenderBlock {FORM} at (0,448) size 769x46 -- RenderBlock {P} at (0,0) size 769x45 -- RenderText {#text} at (0,2) size 267x18 -- text run at (0,2) width 267: "How does your browser fare on this test? " -- RenderMenuList {SELECT} at (268,3) size 242x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 241x18 -- RenderText at (8,2) size 140x13 -- text run at (8,2) width 140: "The test renders correctly." -- RenderText {#text} at (511,2) size 5x18 -- text run at (511,2) width 5: " " -- RenderInline {LABEL} at (0,0) size 224x18 -- RenderText {#text} at (515,2) size 73x18 -- text run at (515,2) width 73: "Comment: " -- RenderTextControl {INPUT} at (589,2) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (0,0) size 0x0 -- RenderButton {INPUT} at (2,25) size 53x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 37x13 -- RenderText at (0,0) size 37x13 -- text run at (0,0) width 37: "Submit" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,509) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,527) size 769x19 -- RenderText {#text} at (0,0) size 64x18 -- text run at (0,0) width 64: "Up to the " -- RenderInline {A} at (0,0) size 73x18 [color=#0000EE] -- RenderText {#text} at (63,0) size 73x18 -- text run at (63,0) width 73: "Table Tests" -- RenderText {#text} at (135,0) size 5x18 -- text run at (135,0) width 5: "." -- RenderBlock {P} at (0,561) size 769x19 -- RenderText {#text} at (0,0) size 64x18 -- text run at (0,0) width 64: "Up to the " -- RenderInline {A} at (0,0) size 99x18 [color=#0000EE] -- RenderText {#text} at (63,0) size 99x18 -- text run at (63,0) width 99: "Evil Tests Page" -- RenderText {#text} at (161,0) size 5x18 -- text run at (161,0) width 5: "." -- RenderBlock {P} at (0,595) size 769x19 -- RenderText {#text} at (0,0) size 177x18 -- text run at (0,0) width 177: "This page is maintained by " -- RenderInline {A} at (0,0) size 79x18 [color=#0000EE] -- RenderText {#text} at (176,0) size 79x18 -- text run at (176,0) width 79: "Ian Hickson" -- RenderText {#text} at (254,0) size 10x18 -- text run at (254,0) width 10: " (" -- RenderInline {A} at (0,0) size 125x18 [color=#0000EE] -- RenderText {#text} at (263,0) size 125x18 -- text run at (263,0) width 125: "py8ieh@bath.ac.uk" -- RenderText {#text} at (387,0) size 10x18 -- text run at (387,0) width 10: ")." -- RenderBlock {P} at (0,629) size 769x19 -- RenderText {#text} at (0,0) size 185x18 -- text run at (0,0) width 185: "Last updated in March 1999." --layer at (600,475) size 141x13 -- RenderBlock {DIV} at (3,3) size 141x13 -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug30692-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug30692-expected.txt -deleted file mode 100644 -index 56558c41579947bf86fe35e6ecfb0a17b8c0e992..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug30692-expected.txt -+++ /dev/null -@@ -1,56 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x584 -- RenderBlock (anonymous) at (0,0) size 784x18 -- RenderText {#text} at (0,0) size 497x18 -- text run at (0,0) width 497: "BUG: Inside a cell, \"height:x%\" is ignored. It looks like 'auto' is used instead." -- RenderBR {BR} at (496,0) size 1x18 -- RenderListItem {LI} at (0,18) size 784x18 -- RenderListMarker at (-1,0) size 7x18: bullet -- RenderText {#text} at (14,0) size 265x18 -- text run at (14,0) width 265: "Absolute units work correctly (eg. 50px)." -- RenderListItem {LI} at (0,36) size 784x490 -- RenderBlock (anonymous) at (0,0) size 784x18 -- RenderListMarker at (-1,0) size 7x18: bullet -- RenderText {#text} at (14,0) size 183x18 -- text run at (14,0) width 183: "\"width:x%\" works correctly." -- RenderBlock {HR} at (0,26) size 784x2 [border: (1px inset #000000)] -- RenderTable {TABLE} at (0,36) size 784x100 -- RenderTableSection {TBODY} at (0,0) size 784x100 -- RenderTableRow {TR} at (0,2) size 784x96 -- RenderTableCell {TD} at (2,11) size 780x78 [bgcolor=#FF0000] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,144) size 784x2 [border: (1px inset #000000)] -- RenderTable {TABLE} at (0,154) size 784x100 -- RenderTableSection {TBODY} at (0,0) size 784x100 -- RenderTableRow {TR} at (0,2) size 784x96 -- RenderTableCell {TD} at (2,9) size 780x82 [bgcolor=#FF0000] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,262) size 784x2 [border: (1px inset #000000)] -- RenderTable {TABLE} at (0,272) size 784x100 -- RenderTableSection {TBODY} at (0,0) size 784x100 -- RenderTableRow {TR} at (0,2) size 784x96 -- RenderTableCell {TD} at (2,11) size 780x78 [bgcolor=#FF0000] [r=0 c=0 rs=1 cs=1] -- RenderBlock {P} at (1,1) size 623x76 [bgcolor=#FFFFE0] -- RenderText {#text} at (0,0) size 232x18 -- text run at (0,0) width 232: "BUG: the height of the P is not 80%" -- RenderBlock {HR} at (0,380) size 784x2 [border: (1px inset #000000)] -- RenderTable {TABLE} at (0,390) size 784x100 -- RenderTableSection {TBODY} at (0,0) size 784x100 -- RenderTableRow {TR} at (0,2) size 784x96 -- RenderTableCell {TD} at (2,9) size 780x82 [bgcolor=#FF0000] [r=0 c=0 rs=1 cs=1] -- RenderBlock {P} at (1,1) size 623x80 [bgcolor=#FFFFE0] -- RenderText {#text} at (0,0) size 226x18 -- text run at (0,0) width 226: "OK: the height of the P is 80 pixels" --layer at (11,93) size 622x75 clip at (12,94) size 620x73 -- RenderTextControl {TEXTAREA} at (1,1) size 623x76 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 617x13 -- RenderText {#text} at (0,0) size 222x13 -- text run at (0,0) width 222: "BUG: the height of the textarea is not 80%" --layer at (11,208) size 622x80 clip at (12,209) size 620x78 -- RenderTextControl {TEXTAREA} at (1,1) size 623x80 [bgcolor=#FFFFFF] [border: (1px solid #000000)] -- RenderBlock {DIV} at (3,3) size 617x13 -- RenderText {#text} at (0,0) size 218x13 -- text run at (0,0) width 218: "OK: the height of the textarea is 80 pixels" -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug33855-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug33855-expected.txt -deleted file mode 100644 -index db5e0df314aefb6f54e858bf95d6f15b7f01e9f4..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/bugs/bug33855-expected.txt -+++ /dev/null -@@ -1,38 +0,0 @@ --layer at (0,0) size 800x600 -- RenderView at (0,0) size 800x600 --layer at (0,0) size 800x600 -- RenderBlock {HTML} at (0,0) size 800x600 -- RenderBody {BODY} at (8,8) size 784x576 [bgcolor=#FFFFFF] -- RenderBlock {FORM} at (0,0) size 784x28 -- RenderTable {TABLE} at (0,0) size 784x28 -- RenderTableSection {TBODY} at (0,0) size 784x28 -- RenderTableRow {TR} at (0,2) size 784x24 [bgcolor=#FFFFFF] -- RenderTableCell {TD} at (2,2) size 70x24 [r=0 c=0 rs=1 cs=1] -- RenderButton {INPUT} at (3,3) size 64x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 48x13 -- RenderText at (0,0) size 48x13 -- text run at (0,0) width 48: "Select all" -- RenderTableCell {TD} at (73,2) size 57x24 [r=0 c=1 rs=1 cs=1] -- RenderButton {INPUT} at (3,3) size 50x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 34x13 -- RenderText at (0,0) size 34x13 -- text run at (0,0) width 34: "Delete" -- RenderTableCell {TD} at (131,2) size 87x24 [r=0 c=2 rs=1 cs=1] -- RenderButton {INPUT} at (3,3) size 80x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 64x13 -- RenderText at (0,0) size 64x13 -- text run at (0,0) width 64: "Empty trash" -- RenderTableCell {TD} at (219,6) size 378x20 [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (1,1) size 4x18 -- text run at (1,1) width 4: " " -- RenderTableCell {TD} at (598,2) size 68x24 [r=0 c=4 rs=1 cs=1] -- RenderButton {INPUT} at (3,3) size 62x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 46x13 -- RenderText at (0,0) size 46x13 -- text run at (0,0) width 46: "Move to:" -- RenderTableCell {TD} at (668,2) size 114x24 [r=0 c=5 rs=1 cs=1] -- RenderMenuList {SELECT} at (3,3) size 108x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 108x18 -- RenderText at (8,2) size 77x13 -- text run at (8,2) width 77: "Choose folder " -- RenderText {#text} at (0,0) size 0x0 -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/other/wa_table_thtd_rowspan-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/other/wa_table_thtd_rowspan-expected.txt -deleted file mode 100644 -index e434352648b7bd94634b9b8b4d3d6bfebecefe00..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/other/wa_table_thtd_rowspan-expected.txt -+++ /dev/null -@@ -1,1330 +0,0 @@ --layer at (0,0) size 785x2358 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x2358 -- RenderBlock {HTML} at (0,0) size 785x2359 -- RenderBody {BODY} at (8,8) size 769x2335 [bgcolor=#FFDEAD] -- RenderBlock {H1} at (0,0) size 769x74 -- RenderInline {FONT} at (0,0) size 470x74 [color=#FF0000] -- RenderText {#text} at (0,0) size 294x37 -- text run at (0,0) width 294: "Acceptance Test Case" -- RenderBR {BR} at (293,0) size 1x37 -- RenderText {#text} at (0,37) size 470x37 -- text run at (0,37) width 470: "Web Browser: Web View (HTML)" -- RenderBlock {P} at (0,95) size 769x29 -- RenderInline {FONT} at (0,0) size 353x28 [color=#FF0000] -- RenderInline {B} at (0,0) size 353x28 -- RenderText {#text} at (0,0) size 353x28 -- text run at (0,0) width 353: "Table: & ROWSPAN" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,139) size 769x3 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (0,149) size 769x55 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "This acceptance test case tests the optional " -- RenderInline {B} at (0,0) size 43x18 -- RenderText {#text} at (276,0) size 43x18 -- text run at (276,0) width 43: "" -- RenderText {#text} at (318,0) size 21x18 -- text run at (318,0) width 21: " & " -- RenderInline {B} at (0,0) size 42x18 -- RenderText {#text} at (338,0) size 42x18 -- text run at (338,0) width 42: "" -- RenderText {#text} at (379,0) size 28x18 -- text run at (379,0) width 28: " tag " -- RenderInline {B} at (0,0) size 82x18 -- RenderText {#text} at (406,0) size 82x18 -- text run at (406,0) width 82: "ROWSPAN" -- RenderText {#text} at (487,0) size 739x36 -- text run at (487,0) width 109: " attribute which, " -- text run at (595,0) width 144: "when placed in a table" -- text run at (0,18) width 563: "header or data tag, specifies how many rows the table header or data cell will span. The " -- RenderInline {B} at (0,0) size 82x18 -- RenderText {#text} at (562,18) size 82x18 -- text run at (562,18) width 82: "ROWSPAN" -- RenderText {#text} at (643,18) size 754x36 -- text run at (643,18) width 111: " attribute is set to" -- text run at (0,36) width 494: "an integer value equal the number of rows the table header or data cell spans." -- RenderBlock {P} at (0,219) size 769x19 -- RenderInline {B} at (0,0) size 120x18 -- RenderText {#text} at (0,0) size 120x18 -- text run at (0,0) width 120: "Test Instructions:" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {OL} at (0,253) size 769x245 -- RenderListItem {LI} at (40,0) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "1" -- RenderText {#text} at (0,0) size 510x18 -- text run at (0,0) width 510: "Verify that the sample text displays as stated in each of the following test cases:" -- RenderBlock {P} at (40,34) size 729x104 -- RenderTable {TABLE} at (0,0) size 531x104 [bgcolor=#F08080] -- RenderTableSection {TBODY} at (0,0) size 531x104 -- RenderTableRow {TR} at (0,2) size 531x32 -- RenderTableCell {TD} at (2,2) size 96x32 [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 82x18 [color=#0000EE] -- RenderText {#text} at (7,7) size 82x18 -- text run at (7,7) width 82: "Test Case #1" -- RenderTableCell {TD} at (99,2) size 430x32 [r=0 c=1 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 316x18 [color=#0000FF] -- RenderInline {B} at (0,0) size 316x18 -- RenderText {#text} at (7,7) size 316x18 -- text run at (7,7) width 316: "table with header cells spanning multiple rows" -- RenderTableRow {TR} at (0,36) size 531x32 -- RenderTableCell {TD} at (2,36) size 96x32 [r=1 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 82x18 [color=#0000EE] -- RenderText {#text} at (7,7) size 82x18 -- text run at (7,7) width 82: "Test Case #2" -- RenderTableCell {TD} at (99,36) size 430x32 [r=1 c=1 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 300x18 [color=#0000FF] -- RenderInline {B} at (0,0) size 300x18 -- RenderText {#text} at (7,7) size 300x18 -- text run at (7,7) width 300: "table with data cells spanning multiple rows" -- RenderTableRow {TR} at (0,70) size 531x32 -- RenderTableCell {TD} at (2,70) size 96x32 [r=2 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 82x18 [color=#0000EE] -- RenderText {#text} at (7,7) size 82x18 -- text run at (7,7) width 82: "Test Case #3" -- RenderTableCell {TD} at (99,70) size 430x32 [r=2 c=1 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 416x18 [color=#0000FF] -- RenderInline {B} at (0,0) size 416x18 -- RenderText {#text} at (7,7) size 416x18 -- text run at (7,7) width 416: "table with nested header & data cells spanning multiple rows" -- RenderBlock {P} at (40,154) size 729x0 -- RenderListItem {LI} at (40,154) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "2" -- RenderText {#text} at (0,0) size 288x18 -- text run at (0,0) width 288: "Verify that the table is maintained when you " -- RenderInline {B} at (0,0) size 134x18 -- RenderText {#text} at (287,0) size 134x18 -- text run at (287,0) width 134: "minimize/maximize" -- RenderText {#text} at (420,0) size 73x18 -- text run at (420,0) width 73: " the screen." -- RenderListItem {LI} at (40,172) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "3" -- RenderText {#text} at (0,0) size 288x18 -- text run at (0,0) width 288: "Verify that the table is maintained when you " -- RenderInline {B} at (0,0) size 126x18 -- RenderText {#text} at (287,0) size 126x18 -- text run at (287,0) width 126: "re-size left & right" -- RenderText {#text} at (412,0) size 73x18 -- text run at (412,0) width 73: " the screen." -- RenderListItem {LI} at (40,190) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "4" -- RenderText {#text} at (0,0) size 288x18 -- text run at (0,0) width 288: "Verify that the table is maintained when you " -- RenderInline {B} at (0,0) size 141x18 -- RenderText {#text} at (287,0) size 141x18 -- text run at (287,0) width 141: "re-size top & bottom" -- RenderText {#text} at (427,0) size 73x18 -- text run at (427,0) width 73: " the screen." -- RenderListItem {LI} at (40,208) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "5" -- RenderText {#text} at (0,0) size 416x18 -- text run at (0,0) width 416: "Verify re-draw takes place correctly after maximizing the screen." -- RenderListItem {LI} at (40,226) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "6" -- RenderText {#text} at (0,0) size 132x18 -- text run at (0,0) width 132: "Verify reload works." -- RenderBlock {HR} at (0,513) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,531) size 769x62 -- RenderTable {TABLE} at (0,0) size 654x61 [bgcolor=#F08080] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 652x59 -- RenderTableRow {TR} at (0,2) size 652x55 -- RenderTableCell {TH} at (2,2) size 648x55 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 0x0 -- RenderText {#text} at (11,11) size 95x18 -- text run at (11,11) width 95: "Test Case #1: " -- RenderInline {FONT} at (0,0) size 316x18 [color=#0000FF] -- RenderText {#text} at (105,11) size 316x18 -- text run at (105,11) width 316: "table with header cells spanning multiple rows" -- RenderText {#text} at (420,11) size 5x18 -- text run at (420,11) width 5: " " -- RenderInline {FONT} at (0,0) size 608x31 -- RenderInline {I} at (0,0) size 608x31 -- RenderText {#text} at (424,13) size 608x31 -- text run at (424,13) width 195: "(using tag)" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,608) size 769x137 -- RenderBlock (anonymous) at (0,0) size 769x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderTable {TABLE} at (0,18) size 693x118 [bgcolor=#FFD700] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 691x116 -- RenderTableRow {TR} at (0,2) size 691x112 -- RenderTableCell {TD} at (2,2) size 687x112 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 664x90 [color=#FF0000] -- RenderInline {B} at (0,0) size 664x90 -- RenderText {#text} at (11,11) size 361x18 -- text run at (11,11) width 361: "In the following sample table you should see that the " -- RenderInline {FONT} at (0,0) size 82x18 [color=#0000FF] -- RenderText {#text} at (371,11) size 82x18 -- text run at (371,11) width 82: "ROWSPAN" -- RenderText {#text} at (452,11) size 631x36 -- text run at (452,11) width 5: " " -- text run at (456,11) width 186: "attribute applies an integer" -- text run at (11,29) width 262: "value equal to the number of rows the " -- RenderInline {FONT} at (0,0) size 70x18 [color=#0000FF] -- RenderText {#text} at (272,29) size 70x18 -- text run at (272,29) width 70: "HEADER" -- RenderText {#text} at (341,29) size 664x72 -- text run at (341,29) width 138: " cell is to span. This " -- text run at (478,29) width 197: "tells the browser to make the" -- text run at (11,47) width 645: "table header cell occupy the same vertical space as the integer number of cells specified in rows" -- text run at (11,65) width 610: "above or below it. The browser flows the contents of the spanning cell to occupy the entire" -- text run at (11,83) width 103: "spanned space." -- RenderBlock {P} at (0,760) size 769x37 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBR {BR} at (0,18) size 0x18 -- RenderBlock {UL} at (0,812) size 769x263 -- RenderTable {TABLE} at (40,0) size 474x262 [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 474x18 -- RenderText {#text} at (96,0) size 40x18 -- text run at (96,0) width 40: "Table " -- RenderInline {B} at (0,0) size 89x18 -- RenderText {#text} at (135,0) size 89x18 -- text run at (135,0) width 89: "Header Cells" -- RenderText {#text} at (223,0) size 155x18 -- text run at (223,0) width 155: " spanning multiple rows" -- RenderTableSection {TBODY} at (1,19) size 472x242 -- RenderTableRow {TR} at (0,2) size 472x22 -- RenderTableCell {TH} at (2,5) size 99x40 [bgcolor=#FFE4C4] [border: (1px inset #808080)] [r=0 c=0 rs=2 cs=1] -- RenderText {#text} at (18,2) size 63x18 -- text run at (18,2) width 63: "Header 1" -- RenderBR {BR} at (80,5) size 1x18 -- RenderText {#text} at (6,20) size 87x18 -- text run at (6,20) width 87: "span=2 rows" -- RenderTableCell {TD} at (102,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,2) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,26) size 472x22 -- RenderTableCell {TD} at (102,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,26) size 40x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,50) size 472x22 -- RenderTableCell {TH} at (2,89) size 99x40 [bgcolor=#FFE4C4] [border: (1px inset #808080)] [r=2 c=0 rs=5 cs=1] -- RenderText {#text} at (18,2) size 63x18 -- text run at (18,2) width 63: "Header 2" -- RenderBR {BR} at (80,41) size 1x18 -- RenderText {#text} at (6,20) size 87x18 -- text run at (6,20) width 87: "span=5 rows" -- RenderTableCell {TD} at (102,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,50) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,74) size 472x22 -- RenderTableCell {TD} at (102,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,74) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,98) size 472x22 [bgcolor=#FFE4C4] -- RenderTableCell {TD} at (102,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,98) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,122) size 472x22 -- RenderTableCell {TD} at (102,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,122) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,146) size 472x22 -- RenderTableCell {TD} at (102,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,146) size 40x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,170) size 472x22 -- RenderTableCell {TH} at (2,185) size 99x40 [bgcolor=#FFE4C4] [border: (1px inset #808080)] [r=7 c=0 rs=3 cs=1] -- RenderText {#text} at (18,2) size 63x18 -- text run at (18,2) width 63: "Header 3" -- RenderBR {BR} at (80,17) size 1x18 -- RenderText {#text} at (6,20) size 87x18 -- text run at (6,20) width 87: "span=3 rows" -- RenderTableCell {TD} at (102,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,170) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,194) size 472x22 -- RenderTableCell {TD} at (102,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,194) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,218) size 472x22 -- RenderTableCell {TD} at (102,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (143,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (184,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (225,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (266,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (307,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (348,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (389,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (430,218) size 40x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderBlock {P} at (0,1090) size 769x0 -- RenderBlock {HR} at (0,1090) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,1108) size 769x62 -- RenderTable {TABLE} at (0,0) size 654x61 [bgcolor=#F08080] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 652x59 -- RenderTableRow {TR} at (0,2) size 652x55 -- RenderTableCell {TH} at (2,2) size 648x55 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 0x0 -- RenderText {#text} at (11,11) size 95x18 -- text run at (11,11) width 95: "Test Case #2: " -- RenderInline {FONT} at (0,0) size 300x18 [color=#0000FF] -- RenderText {#text} at (105,11) size 300x18 -- text run at (105,11) width 300: "table with data cells spanning multiple rows" -- RenderText {#text} at (404,11) size 5x18 -- text run at (404,11) width 5: " " -- RenderInline {FONT} at (0,0) size 591x31 -- RenderInline {I} at (0,0) size 591x31 -- RenderText {#text} at (408,13) size 591x31 -- text run at (408,13) width 194: "(using tag)" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,1185) size 769x137 -- RenderBlock (anonymous) at (0,0) size 769x18 -- RenderBR {BR} at (0,0) size 0x18 -- RenderTable {TABLE} at (0,18) size 693x118 [bgcolor=#FFD700] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 691x116 -- RenderTableRow {TR} at (0,2) size 691x112 -- RenderTableCell {TD} at (2,2) size 687x112 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 639x90 [color=#FF0000] -- RenderInline {B} at (0,0) size 639x90 -- RenderText {#text} at (11,11) size 361x18 -- text run at (11,11) width 361: "In the following sample table you should see that the " -- RenderInline {FONT} at (0,0) size 82x18 [color=#0000FF] -- RenderText {#text} at (371,11) size 82x18 -- text run at (371,11) width 82: "ROWSPAN" -- RenderText {#text} at (452,11) size 631x36 -- text run at (452,11) width 5: " " -- text run at (456,11) width 186: "attribute applies an integer" -- text run at (11,29) width 262: "value equal to the number of rows the " -- RenderInline {FONT} at (0,0) size 44x18 [color=#0000FF] -- RenderText {#text} at (272,29) size 44x18 -- text run at (272,29) width 44: "DATA" -- RenderText {#text} at (315,29) size 639x72 -- text run at (315,29) width 138: " cell is to span. This " -- text run at (452,29) width 198: "tells the browser to make the" -- text run at (11,47) width 629: "table data cell occupy the same vertical space as the integer number of cells specified in rows" -- text run at (11,65) width 610: "above or below it. The browser flows the contents of the spanning cell to occupy the entire" -- text run at (11,83) width 103: "spanned space." -- RenderBlock {P} at (0,1337) size 769x37 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBR {BR} at (0,18) size 0x18 -- RenderBlock {UL} at (0,1389) size 769x263 -- RenderTable {TABLE} at (40,0) size 474x262 [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 474x18 -- RenderText {#text} at (104,0) size 41x18 -- text run at (104,0) width 41: "Table " -- RenderInline {B} at (0,0) size 71x18 -- RenderText {#text} at (144,0) size 71x18 -- text run at (144,0) width 71: "Data Cells" -- RenderText {#text} at (214,0) size 156x18 -- text run at (214,0) width 156: " spanning multiple rows" -- RenderTableSection {TBODY} at (1,19) size 472x242 -- RenderTableRow {TR} at (0,2) size 472x22 -- RenderTableCell {TH} at (2,2) size 41x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (44,5) size 87x40 [bgcolor=#FFFACD] [border: (1px inset #808080)] [r=0 c=1 rs=2 cs=1] -- RenderText {#text} at (2,2) size 43x18 -- text run at (2,2) width 43: "Data 1" -- RenderBR {BR} at (44,5) size 1x18 -- RenderText {#text} at (2,20) size 82x18 -- text run at (2,20) width 82: "span=2 rows" -- RenderTableCell {TD} at (132,2) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,2) size 36x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,2) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,2) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,2) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,2) size 36x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,2) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,2) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,2) size 36x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,26) size 472x22 -- RenderTableCell {TH} at (2,26) size 41x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,26) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,26) size 36x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,26) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,26) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,26) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,26) size 36x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,26) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,26) size 37x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,26) size 36x22 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,50) size 472x22 -- RenderTableCell {TH} at (2,50) size 41x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (44,89) size 87x40 [bgcolor=#FFFACD] [border: (1px inset #808080)] [r=2 c=1 rs=5 cs=1] -- RenderText {#text} at (2,2) size 43x18 -- text run at (2,2) width 43: "Data 2" -- RenderBR {BR} at (44,41) size 1x18 -- RenderText {#text} at (2,20) size 82x18 -- text run at (2,20) width 82: "span=5 rows" -- RenderTableCell {TD} at (132,50) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,50) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,50) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,50) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,50) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,50) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,50) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,50) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,50) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,74) size 472x22 -- RenderTableCell {TH} at (2,74) size 41x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,74) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,74) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,74) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,74) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,74) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,74) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,74) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,74) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,74) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,98) size 472x22 -- RenderTableCell {TH} at (2,98) size 41x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,98) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,98) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,98) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,98) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,98) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,98) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,98) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,98) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,98) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,122) size 472x22 -- RenderTableCell {TH} at (2,122) size 41x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,122) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,122) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,122) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,122) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,122) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,122) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,122) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,122) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,122) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,146) size 472x22 -- RenderTableCell {TH} at (2,146) size 41x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,146) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,146) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,146) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,146) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,146) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,146) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,146) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,146) size 37x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,146) size 36x22 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,170) size 472x22 -- RenderTableCell {TH} at (2,170) size 41x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (44,185) size 87x40 [bgcolor=#FFFACD] [border: (1px inset #808080)] [r=7 c=1 rs=3 cs=1] -- RenderText {#text} at (2,2) size 43x18 -- text run at (2,2) width 43: "Data 3" -- RenderBR {BR} at (44,17) size 1x18 -- RenderText {#text} at (2,20) size 82x18 -- text run at (2,20) width 82: "span=3 rows" -- RenderTableCell {TD} at (132,170) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,170) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,170) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,170) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,170) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,170) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,170) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,170) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,170) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,194) size 472x22 -- RenderTableCell {TH} at (2,194) size 41x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,194) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,194) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,194) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,194) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,194) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,194) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,194) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,194) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,194) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderTableRow {TR} at (0,218) size 472x22 -- RenderTableCell {TH} at (2,218) size 41x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 37x18 -- text run at (2,2) width 37: "Head" -- RenderTableCell {TD} at (132,218) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 1" -- RenderTableCell {TD} at (170,218) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 2" -- RenderTableCell {TD} at (207,218) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 3" -- RenderTableCell {TD} at (245,218) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 4" -- RenderTableCell {TD} at (283,218) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 5" -- RenderTableCell {TD} at (321,218) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 6" -- RenderTableCell {TD} at (358,218) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 7" -- RenderTableCell {TD} at (396,218) size 37x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 8" -- RenderTableCell {TD} at (434,218) size 36x22 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 32x18 -- text run at (2,2) width 32: "col 9" -- RenderBlock {P} at (0,1667) size 769x0 -- RenderBlock {HR} at (0,1667) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,1685) size 769x62 -- RenderTable {TABLE} at (0,0) size 654x61 [bgcolor=#F08080] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 652x59 -- RenderTableRow {TR} at (0,2) size 652x55 -- RenderTableCell {TH} at (2,2) size 648x55 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 0x0 -- RenderText {#text} at (11,11) size 95x18 -- text run at (11,11) width 95: "Test Case #3: " -- RenderInline {FONT} at (0,0) size 416x18 [color=#0000FF] -- RenderText {#text} at (105,11) size 416x18 -- text run at (105,11) width 416: "table with nested header & data cells spanning multiple rows" -- RenderText {#text} at (520,11) size 5x18 -- text run at (520,11) width 5: " " -- RenderInline {FONT} at (0,0) size 585x31 -- RenderInline {I} at (0,0) size 585x31 -- RenderText {#text} at (524,13) size 585x31 -- text run at (524,13) width 72: "(using tag)" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,1762) size 769x37 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBR {BR} at (0,18) size 0x18 -- RenderBlock {UL} at (0,1814) size 769x443 -- RenderTable {TABLE} at (40,0) size 474x442 [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 474x18 -- RenderText {#text} at (26,0) size 89x18 -- text run at (26,0) width 89: "Nested Table " -- RenderInline {B} at (0,0) size 89x18 -- RenderText {#text} at (114,0) size 89x18 -- text run at (114,0) width 89: "Header Cells" -- RenderText {#text} at (202,0) size 21x18 -- text run at (202,0) width 21: " & " -- RenderInline {B} at (0,0) size 72x18 -- RenderText {#text} at (222,0) size 72x18 -- text run at (222,0) width 72: "Data Cells" -- RenderText {#text} at (293,0) size 155x18 -- text run at (293,0) width 155: " spanning multiple rows" -- RenderTableSection {TBODY} at (1,19) size 472x422 -- RenderTableRow {TR} at (0,2) size 472x40 -- RenderTableCell {TH} at (2,119) size 82x58 [bgcolor=#FFE4C4] [border: (1px inset #808080)] [r=0 c=0 rs=7 cs=1] -- RenderText {#text} at (9,2) size 63x18 -- text run at (9,2) width 63: "Header 1" -- RenderBR {BR} at (71,119) size 1x18 -- RenderText {#text} at (16,20) size 50x36 -- text run at (16,20) width 50: "span=7" -- text run at (24,38) width 33: "rows" -- RenderTableCell {TD} at (85,14) size 78x58 [bgcolor=#FFFACD] [border: (1px inset #808080)] [r=0 c=1 rs=2 cs=1] -- RenderText {#text} at (2,2) size 43x18 -- text run at (2,2) width 43: "Data 1" -- RenderBR {BR} at (44,14) size 1x18 -- RenderText {#text} at (2,20) size 47x36 -- text run at (2,20) width 47: "span=2" -- text run at (2,38) width 32: "rows" -- RenderTableCell {TD} at (164,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,2) size 34x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,2) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=0 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,44) size 472x40 -- RenderTableCell {TD} at (164,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,44) size 34x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,44) size 33x40 [bgcolor=#EE82EE] [border: (1px inset #808080)] [r=1 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,86) size 472x40 -- RenderTableCell {TD} at (85,161) size 78x58 [bgcolor=#FFFACD] [border: (1px inset #808080)] [r=2 c=1 rs=5 cs=1] -- RenderText {#text} at (2,2) size 43x18 -- text run at (2,2) width 43: "Data 2" -- RenderBR {BR} at (44,77) size 1x18 -- RenderText {#text} at (2,20) size 47x36 -- text run at (2,20) width 47: "span=5" -- text run at (2,38) width 32: "rows" -- RenderTableCell {TD} at (164,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,86) size 34x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,86) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=2 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,128) size 472x40 -- RenderTableCell {TD} at (164,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,128) size 34x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,128) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=3 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,170) size 472x40 -- RenderTableCell {TD} at (164,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,170) size 34x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,170) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=4 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,212) size 472x40 -- RenderTableCell {TD} at (164,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,212) size 34x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,212) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=5 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,254) size 472x40 -- RenderTableCell {TD} at (164,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,254) size 34x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,254) size 33x40 [bgcolor=#90EE90] [border: (1px inset #808080)] [r=6 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,296) size 472x40 -- RenderTableCell {TH} at (2,329) size 82x58 [bgcolor=#FFE4C4] [border: (1px inset #808080)] [r=7 c=0 rs=3 cs=1] -- RenderText {#text} at (9,2) size 63x18 -- text run at (9,2) width 63: "Header 2" -- RenderBR {BR} at (71,35) size 1x18 -- RenderText {#text} at (16,20) size 50x36 -- text run at (16,20) width 50: "span=3" -- text run at (24,38) width 33: "rows" -- RenderTableCell {TD} at (85,329) size 78x58 [bgcolor=#FFFACD] [border: (1px inset #808080)] [r=7 c=1 rs=3 cs=1] -- RenderText {#text} at (2,2) size 43x18 -- text run at (2,2) width 43: "Data 3" -- RenderBR {BR} at (44,35) size 1x18 -- RenderText {#text} at (2,20) size 47x36 -- text run at (2,20) width 47: "span=3" -- text run at (2,38) width 32: "rows" -- RenderTableCell {TD} at (164,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,296) size 34x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,296) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=7 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,338) size 472x40 -- RenderTableCell {TD} at (164,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,338) size 34x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,338) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=8 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderTableRow {TR} at (0,380) size 472x40 -- RenderTableCell {TD} at (164,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "1" -- RenderTableCell {TD} at (198,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=3 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "2" -- RenderTableCell {TD} at (232,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=4 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "3" -- RenderTableCell {TD} at (266,380) size 34x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=5 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "4" -- RenderTableCell {TD} at (301,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=6 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "5" -- RenderTableCell {TD} at (335,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=7 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "6" -- RenderTableCell {TD} at (369,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=8 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "7" -- RenderTableCell {TD} at (403,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=9 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "8" -- RenderTableCell {TD} at (437,380) size 33x40 [bgcolor=#ADD8E6] [border: (1px inset #808080)] [r=9 c=10 rs=1 cs=1] -- RenderText {#text} at (2,2) size 20x36 -- text run at (2,2) width 20: "col" -- text run at (2,20) width 8: "9" -- RenderBlock {P} at (0,2272) size 769x0 -- RenderBlock {HR} at (0,2272) size 769x3 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (0,2282) size 769x19 -- RenderImage {IMG} at (0,1) size 13x13 -- RenderText {#text} at (13,0) size 131x18 -- text run at (13,0) width 131: " Created 9/19/96 by " -- RenderInline {A} at (0,0) size 84x18 [color=#0000EE] -- RenderText {#text} at (143,0) size 84x18 -- text run at (143,0) width 84: "Ronald Greti" -- RenderBR {BR} at (226,0) size 1x18 -- RenderBlock {P} at (0,2316) size 769x19 -- RenderBR {BR} at (0,0) size 0x18 -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla/other/wa_table_tr_align-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla/other/wa_table_tr_align-expected.txt -deleted file mode 100644 -index 58f54c882d719d4edf7b9811612e4f067de95312..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla/other/wa_table_tr_align-expected.txt -+++ /dev/null -@@ -1,323 +0,0 @@ --layer at (0,0) size 785x1309 -- RenderView at (0,0) size 785x600 --layer at (0,0) size 785x1309 -- RenderBlock {HTML} at (0,0) size 785x1309 -- RenderBody {BODY} at (8,8) size 769x1285 [bgcolor=#FFDEAD] -- RenderBlock (anonymous) at (0,0) size 769x18 -- RenderText {#text} at (0,0) size 607x18 -- text run at (0,0) width 607: "If there is missing vertical space between tables and/or tables and other content, it is bug 6997." -- RenderBR {BR} at (606,0) size 1x18 -- RenderBlock {H1} at (0,39) size 769x75 -- RenderInline {FONT} at (0,0) size 470x74 [color=#FF0000] -- RenderText {#text} at (0,0) size 294x37 -- text run at (0,0) width 294: "Acceptance Test Case" -- RenderBR {BR} at (293,0) size 1x37 -- RenderText {#text} at (0,37) size 470x37 -- text run at (0,37) width 470: "Web Browser: Web View (HTML)" -- RenderBlock {P} at (0,134) size 769x29 -- RenderInline {FONT} at (0,0) size 216x28 [color=#FF0000] -- RenderInline {B} at (0,0) size 216x28 -- RenderText {#text} at (0,0) size 216x28 -- text run at (0,0) width 216: "Table: ALIGN" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (0,178) size 769x3 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (0,188) size 769x73 -- RenderText {#text} at (0,0) size 277x18 -- text run at (0,0) width 277: "This acceptance test case tests the optional " -- RenderInline {B} at (0,0) size 42x18 -- RenderText {#text} at (276,0) size 42x18 -- text run at (276,0) width 42: "" -- RenderText {#text} at (317,0) size 28x18 -- text run at (317,0) width 28: " tag " -- RenderInline {B} at (0,0) size 54x18 -- RenderText {#text} at (344,0) size 54x18 -- text run at (344,0) width 54: "ALIGN" -- RenderText {#text} at (397,0) size 751x54 -- text run at (397,0) width 184: " attribute which controls the " -- text run at (580,0) width 171: "horizontal alignment of all" -- text run at (0,18) width 503: "the cells in a row. This cause the contents of each cell in the row to be aligned " -- text run at (502,18) width 229: "either LEFT|CENTER|RIGHT with" -- text run at (0,36) width 431: "respect to the current left and right margins of the display window. " -- text run at (430,36) width 29: "The " -- RenderInline {B} at (0,0) size 52x18 -- RenderText {#text} at (458,36) size 52x18 -- text run at (458,36) width 52: "Header" -- RenderText {#text} at (509,36) size 182x18 -- text run at (509,36) width 182: " cells by default are aligned " -- RenderInline {B} at (0,0) size 67x18 -- RenderText {#text} at (690,36) size 67x18 -- text run at (690,36) width 67: "CENTER" -- RenderText {#text} at (0,54) size 64x18 -- text run at (0,54) width 64: "while the " -- RenderInline {B} at (0,0) size 33x18 -- RenderText {#text} at (63,54) size 33x18 -- text run at (63,54) width 33: "Data" -- RenderText {#text} at (95,54) size 182x18 -- text run at (95,54) width 182: " cells by default are aligned " -- RenderInline {B} at (0,0) size 43x18 -- RenderText {#text} at (276,54) size 43x18 -- text run at (276,54) width 43: "LEFT" -- RenderText {#text} at (318,54) size 5x18 -- text run at (318,54) width 5: "." -- RenderBlock {P} at (0,276) size 769x19 -- RenderInline {B} at (0,0) size 120x18 -- RenderText {#text} at (0,0) size 120x18 -- text run at (0,0) width 120: "Test Instructions:" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {OL} at (0,310) size 769x211 -- RenderListItem {LI} at (40,0) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "1" -- RenderText {#text} at (0,0) size 510x18 -- text run at (0,0) width 510: "Verify that the sample text displays as stated in each of the following test cases:" -- RenderBlock {P} at (40,34) size 729x70 -- RenderTable {TABLE} at (0,0) size 718x70 [bgcolor=#F08080] -- RenderTableSection {TBODY} at (0,0) size 718x70 -- RenderTableRow {TR} at (0,2) size 718x32 -- RenderTableCell {TD} at (2,2) size 96x32 [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 82x18 [color=#0000EE] -- RenderText {#text} at (7,7) size 82x18 -- text run at (7,7) width 82: "Test Case #1" -- RenderTableCell {TD} at (99,2) size 617x32 [r=0 c=1 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 602x18 [color=#0000FF] -- RenderInline {B} at (0,0) size 602x18 -- RenderText {#text} at (7,7) size 602x18 -- text run at (7,7) width 602: "Table displaying Header \"CENTER \"& Data \"LEFT\" default horizontal row alignment" -- RenderTableRow {TR} at (0,36) size 718x32 -- RenderTableCell {TD} at (2,36) size 96x32 [r=1 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 82x18 [color=#0000EE] -- RenderText {#text} at (7,7) size 82x18 -- text run at (7,7) width 82: "Test Case #2" -- RenderTableCell {TD} at (99,36) size 617x32 [r=1 c=1 rs=1 cs=1] -- RenderInline {FONT} at (0,0) size 595x18 [color=#0000FF] -- RenderInline {B} at (0,0) size 595x18 -- RenderText {#text} at (7,7) size 595x18 -- text run at (7,7) width 595: "Tables displaying Header & Data \"LEFT|CENTER|RIGHT\" horizontal row alignment" -- RenderBlock {P} at (40,120) size 729x0 -- RenderListItem {LI} at (40,120) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "2" -- RenderText {#text} at (0,0) size 288x18 -- text run at (0,0) width 288: "Verify that the table is maintained when you " -- RenderInline {B} at (0,0) size 134x18 -- RenderText {#text} at (287,0) size 134x18 -- text run at (287,0) width 134: "minimize/maximize" -- RenderText {#text} at (420,0) size 73x18 -- text run at (420,0) width 73: " the screen." -- RenderListItem {LI} at (40,138) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "3" -- RenderText {#text} at (0,0) size 288x18 -- text run at (0,0) width 288: "Verify that the table is maintained when you " -- RenderInline {B} at (0,0) size 126x18 -- RenderText {#text} at (287,0) size 126x18 -- text run at (287,0) width 126: "re-size left & right" -- RenderText {#text} at (412,0) size 73x18 -- text run at (412,0) width 73: " the screen." -- RenderListItem {LI} at (40,156) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "4" -- RenderText {#text} at (0,0) size 288x18 -- text run at (0,0) width 288: "Verify that the table is maintained when you " -- RenderInline {B} at (0,0) size 141x18 -- RenderText {#text} at (287,0) size 141x18 -- text run at (287,0) width 141: "re-size top & bottom" -- RenderText {#text} at (427,0) size 73x18 -- text run at (427,0) width 73: " the screen." -- RenderListItem {LI} at (40,174) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "5" -- RenderText {#text} at (0,0) size 416x18 -- text run at (0,0) width 416: "Verify re-draw takes place correctly after maximizing the screen." -- RenderListItem {LI} at (40,192) size 729x18 -- RenderListMarker at (-20,0) size 16x18: "6" -- RenderText {#text} at (0,0) size 132x18 -- text run at (0,0) width 132: "Verify reload works." -- RenderBlock {HR} at (0,536) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,554) size 769x62 -- RenderTable {TABLE} at (0,0) size 769x61 [bgcolor=#F08080] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 767x59 -- RenderTableRow {TR} at (0,2) size 767x55 -- RenderTableCell {TH} at (2,2) size 763x55 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 0x0 -- RenderText {#text} at (12,11) size 95x18 -- text run at (12,11) width 95: "Test Case #1: " -- RenderInline {FONT} at (0,0) size 603x18 [color=#0000FF] -- RenderText {#text} at (106,11) size 603x18 -- text run at (106,11) width 603: "Table displaying Header \"CENTER \"& Data \"LEFT\" default horizontal row alignment" -- RenderText {#text} at (708,11) size 5x18 -- text run at (708,11) width 5: " " -- RenderInline {FONT} at (0,0) size 403x31 -- RenderInline {I} at (0,0) size 403x31 -- RenderText {#text} at (712,13) size 403x31 -- text run at (712,13) width 39: "(using" -- text run at (348,29) width 67: " tag)" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,631) size 769x71 -- RenderTable {TABLE} at (0,0) size 347x70 [bgcolor=#FFE4C4] [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 347x18 -- RenderText {#text} at (59,0) size 228x18 -- text run at (59,0) width 228: "Default Horizontal Row Alignment" -- RenderTableSection {TBODY} at (1,19) size 345x50 -- RenderTableRow {TR} at (0,2) size 345x22 -- RenderTableCell {TH} at (2,2) size 113x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (18,2) size 76x18 -- text run at (18,2) width 76: "row head 1" -- RenderTableCell {TH} at (116,2) size 113x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (18,2) size 76x18 -- text run at (18,2) width 76: "row head 2" -- RenderTableCell {TH} at (230,2) size 113x22 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (18,2) size 76x18 -- text run at (18,2) width 76: "row head 3" -- RenderTableRow {TR} at (0,26) size 345x22 -- RenderTableCell {TD} at (2,26) size 113x22 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 68x18 -- text run at (2,2) width 68: "row data 1" -- RenderTableCell {TD} at (116,26) size 113x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 68x18 -- text run at (2,2) width 68: "row data 2" -- RenderTableCell {TD} at (230,26) size 113x22 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 68x18 -- text run at (2,2) width 68: "row data 3" -- RenderBlock {HR} at (0,717) size 769x3 [border: (1px inset #000000)] -- RenderBlock {P} at (0,735) size 769x62 -- RenderTable {TABLE} at (0,0) size 769x61 [bgcolor=#F08080] [border: (1px outset #808080)] -- RenderTableSection {TBODY} at (1,1) size 767x59 -- RenderTableRow {TR} at (0,2) size 767x55 -- RenderTableCell {TH} at (2,2) size 763x55 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderInline {A} at (0,0) size 0x0 -- RenderText {#text} at (16,11) size 95x18 -- text run at (16,11) width 95: "Test Case #2: " -- RenderInline {FONT} at (0,0) size 595x18 [color=#0000FF] -- RenderText {#text} at (110,11) size 595x18 -- text run at (110,11) width 595: "Tables displaying Header & Data \"LEFT|CENTER|RIGHT\" horizontal row alignment" -- RenderText {#text} at (704,11) size 5x18 -- text run at (704,11) width 5: " " -- RenderInline {FONT} at (0,0) size 498x31 -- RenderInline {I} at (0,0) size 498x31 -- RenderText {#text} at (708,13) size 498x31 -- text run at (708,13) width 39: "(using" -- text run at (249,29) width 265: " tag)" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,812) size 769x147 -- RenderTable {TABLE} at (0,0) size 347x146 [bgcolor=#FFE4C4] [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 347x18 -- RenderText {#text} at (61,0) size 224x18 -- text run at (61,0) width 224: "Horizontal Row Alignment=LEFT" -- RenderTableSection {TBODY} at (1,19) size 345x126 -- RenderTableRow {TR} at (0,2) size 345x22 -- RenderTableCell {TH} at (2,2) size 113x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 76x18 -- text run at (2,2) width 76: "row head 1" -- RenderTableCell {TH} at (116,2) size 113x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 76x18 -- text run at (2,2) width 76: "row head 2" -- RenderTableCell {TH} at (230,2) size 113x22 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 76x18 -- text run at (2,2) width 76: "row head 3" -- RenderTableRow {TR} at (0,26) size 345x22 -- RenderTableCell {TD} at (2,26) size 113x22 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (2,2) size 68x18 -- text run at (2,2) width 68: "row data 1" -- RenderTableCell {TD} at (116,26) size 113x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (2,2) size 68x18 -- text run at (2,2) width 68: "row data 2" -- RenderTableCell {TD} at (230,26) size 113x22 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (2,2) size 68x18 -- text run at (2,2) width 68: "row data 3" -- RenderTableRow {TR} at (0,50) size 345x74 [bgcolor=#FFD700] -- RenderTableCell {TD} at (2,50) size 341x74 [border: (1px inset #808080)] [r=2 c=0 rs=1 cs=3] -- RenderBlock (anonymous) at (2,2) size 337x54 -- RenderInline {B} at (0,0) size 325x54 -- RenderInline {FONT} at (0,0) size 325x54 [color=#FF0000] -- RenderText {#text} at (0,0) size 137x18 -- text run at (0,0) width 137: "Note: The attribute " -- RenderInline {FONT} at (0,0) size 104x18 [color=#0000FF] -- RenderText {#text} at (136,0) size 104x18 -- text run at (136,0) width 104: "ALIGN=LEFT" -- RenderText {#text} at (239,0) size 325x54 -- text run at (239,0) width 49: " has no" -- text run at (0,18) width 300: "special effect on the row data since it simply" -- text run at (0,36) width 325: "reiterates the default horizontal row alignment!" -- RenderBlock {P} at (2,72) size 337x0 -- RenderInline {B} at (0,0) size 0x0 -- RenderInline {FONT} at (0,0) size 0x0 [color=#FF0000] -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,974) size 769x147 -- RenderTable {TABLE} at (0,0) size 347x146 [bgcolor=#FFE4C4] [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 347x18 -- RenderText {#text} at (49,0) size 248x18 -- text run at (49,0) width 248: "Horizontal Row Alignment=CENTER" -- RenderTableSection {TBODY} at (1,19) size 345x126 -- RenderTableRow {TR} at (0,2) size 345x22 -- RenderTableCell {TH} at (2,2) size 113x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (18,2) size 76x18 -- text run at (18,2) width 76: "row head 1" -- RenderTableCell {TH} at (116,2) size 113x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (18,2) size 76x18 -- text run at (18,2) width 76: "row head 2" -- RenderTableCell {TH} at (230,2) size 113x22 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (18,2) size 76x18 -- text run at (18,2) width 76: "row head 3" -- RenderTableRow {TR} at (0,26) size 345x22 -- RenderTableCell {TD} at (2,26) size 113x22 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (22,2) size 68x18 -- text run at (22,2) width 68: "row data 1" -- RenderTableCell {TD} at (116,26) size 113x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (22,2) size 68x18 -- text run at (22,2) width 68: "row data 2" -- RenderTableCell {TD} at (230,26) size 113x22 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (22,2) size 68x18 -- text run at (22,2) width 68: "row data 3" -- RenderTableRow {TR} at (0,50) size 345x74 [bgcolor=#FFD700] -- RenderTableCell {TD} at (2,50) size 341x74 [border: (1px inset #808080)] [r=2 c=0 rs=1 cs=3] -- RenderBlock (anonymous) at (2,2) size 337x54 -- RenderInline {B} at (0,0) size 325x54 -- RenderInline {FONT} at (0,0) size 325x54 [color=#FF0000] -- RenderText {#text} at (0,0) size 137x18 -- text run at (0,0) width 137: "Note: The attribute " -- RenderInline {FONT} at (0,0) size 129x18 [color=#0000FF] -- RenderText {#text} at (136,0) size 129x18 -- text run at (136,0) width 129: "ALIGN=CENTER" -- RenderText {#text} at (264,0) size 325x54 -- text run at (264,0) width 49: " has no" -- text run at (0,18) width 302: "special effect on the row head since it simply" -- text run at (0,36) width 325: "reiterates the default horizontal row alignment!" -- RenderBlock {P} at (2,72) size 337x0 -- RenderInline {B} at (0,0) size 0x0 -- RenderInline {FONT} at (0,0) size 0x0 [color=#FF0000] -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {P} at (0,1136) size 769x71 -- RenderTable {TABLE} at (0,0) size 347x70 [bgcolor=#FFE4C4] [border: (1px outset #808080)] -- RenderBlock {CAPTION} at (0,0) size 347x18 -- RenderText {#text} at (56,0) size 234x18 -- text run at (56,0) width 234: "Horizontal Row Alignment=RIGHT" -- RenderTableSection {TBODY} at (1,19) size 345x50 -- RenderTableRow {TR} at (0,2) size 345x22 -- RenderTableCell {TH} at (2,2) size 113x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] -- RenderText {#text} at (34,2) size 77x18 -- text run at (34,2) width 77: "row head 1" -- RenderTableCell {TH} at (116,2) size 113x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] -- RenderText {#text} at (34,2) size 77x18 -- text run at (34,2) width 77: "row head 2" -- RenderTableCell {TH} at (230,2) size 113x22 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] -- RenderText {#text} at (34,2) size 77x18 -- text run at (34,2) width 77: "row head 3" -- RenderTableRow {TR} at (0,26) size 345x22 -- RenderTableCell {TD} at (2,26) size 113x22 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] -- RenderText {#text} at (42,2) size 69x18 -- text run at (42,2) width 69: "row data 1" -- RenderTableCell {TD} at (116,26) size 113x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] -- RenderText {#text} at (42,2) size 69x18 -- text run at (42,2) width 69: "row data 2" -- RenderTableCell {TD} at (230,26) size 113x22 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] -- RenderText {#text} at (42,2) size 69x18 -- text run at (42,2) width 69: "row data 3" -- RenderBlock {P} at (0,1222) size 769x0 -- RenderBlock {HR} at (0,1222) size 769x3 [border: (1px inset #000000)] -- RenderBlock (anonymous) at (0,1232) size 769x19 -- RenderImage {IMG} at (0,1) size 13x13 -- RenderText {#text} at (13,0) size 123x18 -- text run at (13,0) width 123: " Created 9/9/96 by " -- RenderInline {A} at (0,0) size 84x18 [color=#0000EE] -- RenderText {#text} at (135,0) size 84x18 -- text run at (135,0) width 84: "Ronald Greti" -- RenderBR {BR} at (218,0) size 1x18 -- RenderBlock {P} at (0,1266) size 769x19 -- RenderBR {BR} at (0,0) size 0x18 -- RenderBlock {P} at (0,1300) size 769x0 -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/LayoutTests/platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png -deleted file mode 100644 -index b773e0e36cf83369453b6f28fe4cc34db9b8d144..0000000000000000000000000000000000000000 -Binary files a/LayoutTests/platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png and /dev/null differ -diff --git a/LayoutTests/platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt b/LayoutTests/platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt -deleted file mode 100644 -index e80c610e6aed5633b351c1992adb966754add069..0000000000000000000000000000000000000000 ---- a/LayoutTests/platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt -+++ /dev/null -@@ -1,181 +0,0 @@ --layer at (0,0) size 785x1443 -- RenderView at (0,0) size 785x600 --layer at (8,8) size 769x1435 -- RenderBlock {HTML} at (8,8) size 769x1435 [bgcolor=#008000] [border: (16px solid #00FF00)] -- RenderTable at (16,16) size 737x1403 -- RenderTableSection (anonymous) at (0,0) size 737x1403 -- RenderTableRow (anonymous) at (0,0) size 737x1403 -- RenderTableCell {HEAD} at (0,0) size 242x472 [color=#FFFFFF] [bgcolor=#FF0000] [border: (5px solid #FFFFFF)] [r=0 c=0 rs=1 cs=1] -- RenderBlock {META} at (21,37) size 200x2 [border: (1px dotted #FFFFFF)] -- RenderBlock {META} at (21,55) size 200x2 [border: (1px dotted #FFFFFF)] -- RenderBlock {META} at (21,73) size 200x2 [border: (1px dotted #FFFFFF)] -- RenderBlock {META} at (21,91) size 200x2 [border: (1px dotted #FFFFFF)] -- RenderBlock {TITLE} at (21,109) size 200x56 [border: (1px dotted #FFFFFF)] -- RenderText {#text} at (1,1) size 188x54 -- text run at (1,1) width 188: "Evil Tests: Rendering BODY" -- text run at (1,19) width 163: "and HEAD as children of" -- text run at (1,37) width 67: "HTML - 2" -- RenderBlock {STYLE} at (21,181) size 200x254 [border: (1px dotted #FFFFFF)] -- RenderText {#text} at (1,1) size 196x252 -- text run at (1,1) width 83: "/* Layout */ " -- text run at (83,1) width 112: "HTML { display:" -- text run at (1,19) width 194: "block; border: 1em lime solid;" -- text run at (1,37) width 98: "margin: 8px; } " -- text run at (98,37) width 98: "HEAD, BODY" -- text run at (1,55) width 181: "{ display: table-cell; border:" -- text run at (1,73) width 76: "solid thick; " -- text run at (76,73) width 93: "padding: 1em;" -- text run at (1,91) width 102: "margin: 1em; } " -- text run at (102,91) width 74: "HEAD > *," -- text run at (1,109) width 181: "BODY > * { display: block;" -- text run at (1,127) width 178: "border: thin dotted; margin:" -- text run at (1,145) width 60: "1em 0; } " -- text run at (60,145) width 105: "/* Formatting */" -- text run at (1,163) width 141: "HTML { color: black;" -- text run at (1,181) width 140: "background: green; } " -- text run at (140,181) width 57: "HEAD {" -- text run at (1,199) width 195: "color: white; background: red;" -- text run at (1,217) width 12: "} " -- text run at (12,217) width 151: "BODY { color: yellow;" -- text run at (1,235) width 124: "background: teal; }" -- RenderTableCell {BODY} at (242,41) size 495x1362 [color=#FFFF00] [bgcolor=#008080] [border: (5px solid #FFFF00)] [r=0 c=1 rs=1 cs=1] -- RenderBlock {H1} at (21,53) size 453x76 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 152x37 -- text run at (1,1) width 152: "Rendering " -- RenderInline {CODE} at (0,0) size 63x30 -- RenderText {#text} at (153,6) size 63x30 -- text run at (153,6) width 63: "BODY" -- RenderText {#text} at (215,1) size 69x37 -- text run at (215,1) width 69: " and " -- RenderInline {CODE} at (0,0) size 63x30 -- RenderText {#text} at (283,6) size 63x30 -- text run at (283,6) width 63: "HEAD" -- RenderText {#text} at (345,1) size 381x74 -- text run at (345,1) width 37: " as" -- text run at (1,38) width 156: "children of " -- RenderInline {CODE} at (0,0) size 64x30 -- RenderText {#text} at (156,43) size 64x30 -- text run at (156,43) width 64: "HTML" -- RenderText {#text} at (219,38) size 43x37 -- text run at (219,38) width 43: " - 2" -- RenderBlock {P} at (21,161) size 453x38 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 393x18 -- text run at (1,1) width 393: "If you have any comments to make regarding this test, e-mail" -- RenderInline {A} at (0,0) size 186x18 [color=#0000EE] -- RenderText {#text} at (1,19) size 186x18 -- text run at (1,19) width 186: "py8ieh=eviltests@bath.ac.uk" -- RenderText {#text} at (186,19) size 5x18 -- text run at (186,19) width 5: "." -- RenderBlock {DL} at (21,215) size 453x92 [border: (1px dotted #FFFF00)] -- RenderBlock {DT} at (1,1) size 451x18 -- RenderText {#text} at (0,0) size 83x18 -- text run at (0,0) width 83: "Prerequisites" -- RenderBlock {DD} at (41,19) size 411x72 -- RenderText {#text} at (0,0) size 392x54 -- text run at (0,0) width 392: "Browsers that are subjected to this test should support the the" -- text run at (0,18) width 388: "background, padding, margin, border and color properties of" -- text run at (0,36) width 160: "CSS, and in addition the " -- RenderInline {CODE} at (0,0) size 63x15 -- RenderText {#text} at (160,38) size 63x15 -- text run at (160,38) width 63: "overflow" -- RenderText {#text} at (222,36) size 400x36 -- text run at (222,36) width 178: " property and fixed position" -- text run at (0,54) width 109: "stuff from CSS2." -- RenderBlock {H2} at (21,331) size 453x58 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 439x56 -- text run at (1,1) width 439: "1. Making the BODY and the HEAD into a" -- text run at (1,29) width 51: "table" -- RenderBlock {P} at (21,413) size 453x20 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 264x18 -- text run at (1,1) width 264: "This is really evil, but completely valid..." -- RenderBlock {P} at (21,449) size 453x110 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 450x108 -- text run at (1,1) width 450: "This document should have two cells, side by side: one on the left, the" -- text run at (1,19) width 402: "other on the right. The one on the left should be red with white" -- text run at (1,37) width 430: "writing and a thick white border. It should contain four dotted lines" -- text run at (1,55) width 388: "separated by a blank line, followed by a dotted bordered box" -- text run at (1,73) width 403: "containing the document title, and another dotted bordered box" -- text run at (1,91) width 286: "containing the stylesheet, also shown below:" -- RenderBlock {PRE} at (21,575) size 453x17 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 40x15 -- text run at (1,1) width 40: " ..." -- text run at (40,1) width 1: " " -- RenderBlock {P} at (21,608) size 453x38 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 419x36 -- text run at (1,1) width 419: "The dotted borders and lines and the text in the left cell should be" -- text run at (1,19) width 40: "white." -- RenderBlock {P} at (21,662) size 453x38 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 447x36 -- text run at (1,1) width 447: "The right cell should be teal, with yellow text. This paragraph you are" -- text run at (1,19) width 255: "reading now should be in this right cell." -- RenderBlock {P} at (21,716) size 453x38 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 413x36 -- text run at (1,1) width 413: "The width of the two cells is left up to the user agent to decide, I" -- text run at (1,19) width 37: "think." -- RenderBlock {P} at (21,770) size 453x74 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 443x72 -- text run at (1,1) width 443: "The right cell should look similar to the left cell in formatting -- each" -- text run at (1,19) width 442: "box of text should have a yellow dotted border, and there should be a" -- text run at (1,37) width 420: "blank line between each such box. No box should be nested -- the" -- text run at (1,55) width 356: "dotted boxes should always be distinct from each other." -- RenderBlock {P} at (21,860) size 453x38 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 417x36 -- text run at (1,1) width 417: "The cells should be the same height, and they should have grown" -- text run at (1,19) width 229: "vertically to accommodate this text." -- RenderBlock {P} at (21,914) size 453x56 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 437x54 -- text run at (1,1) width 436: "Around the whole setup should be two borders, dark green and light" -- text run at (1,19) width 437: "green. The cells should be separated from each other and from these" -- text run at (1,37) width 230: "outer borders by 1em of dark green." -- RenderBlock {P} at (21,986) size 453x38 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 446x36 -- text run at (1,1) width 446: "There should also be some alternate stylesheets set up to allow you to" -- text run at (1,19) width 388: "display the content. This may help with diagnosis." -- RenderBlock {H2} at (21,1048) size 453x30 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 156x28 -- text run at (1,1) width 156: "Submit Results" -- RenderBlock {FORM} at (21,1102) size 453x97 [border: (1px dotted #FFFF00)] -- RenderBlock {P} at (1,17) size 451x63 -- RenderText {#text} at (0,0) size 263x18 -- text run at (0,0) width 263: "How does your browser fare on this test?" -- RenderMenuList {SELECT} at (2,20) size 447x18 [color=#000000D8] [bgcolor=#FFFFFF] -- RenderBlock (anonymous) at (0,0) size 447x18 -- RenderText at (8,2) size 212x13 -- text run at (8,2) width 212: "Document renders exactly as described." -- RenderText {#text} at (0,0) size 0x0 -- RenderInline {LABEL} at (0,0) size 223x18 -- RenderText {#text} at (0,42) size 72x18 -- text run at (0,42) width 72: "Comment: " -- RenderTextControl {INPUT} at (73,42) size 148x19 [color=#000000] [bgcolor=#FFFFFF] [border: (2px inset #000000)] -- RenderText {#text} at (222,42) size 5x18 -- text run at (222,42) width 5: " " -- RenderButton {INPUT} at (228,43) size 54x18 [color=#000000D8] [bgcolor=#C0C0C0] -- RenderBlock (anonymous) at (8,2) size 37x13 -- RenderText at (0,0) size 37x13 -- text run at (0,0) width 37: "Submit" -- RenderText {#text} at (0,0) size 0x0 -- RenderBlock {HR} at (21,1215) size 453x2 [border: (1px dotted #FFFF00)] -- RenderBlock {P} at (21,1233) size 453x20 [border: (1px dotted #FFFF00)] -- RenderInline {A} at (0,0) size 162x18 [color=#0000EE] -- RenderText {#text} at (1,1) size 162x18 -- text run at (1,1) width 162: "Up to the Evil Tests Page" -- RenderText {#text} at (162,1) size 5x18 -- text run at (162,1) width 5: "." -- RenderBlock {P} at (21,1269) size 453x20 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 177x18 -- text run at (1,1) width 177: "This page is maintained by " -- RenderInline {A} at (0,0) size 79x18 [color=#0000EE] -- RenderText {#text} at (177,1) size 79x18 -- text run at (177,1) width 79: "Ian Hickson" -- RenderText {#text} at (255,1) size 10x18 -- text run at (255,1) width 10: " (" -- RenderInline {A} at (0,0) size 125x18 [color=#0000EE] -- RenderText {#text} at (264,1) size 125x18 -- text run at (264,1) width 125: "py8ieh@bath.ac.uk" -- RenderText {#text} at (388,1) size 10x18 -- text run at (388,1) width 10: ")." -- RenderBlock {P} at (21,1305) size 453x20 [border: (1px dotted #FFFF00)] -- RenderText {#text} at (1,1) size 172x18 -- text run at (1,1) width 172: "Last updated in June 1999." --layer at (365,1229) size 141x13 backgroundClip at (365,1229) size 140x13 clip at (365,1229) size 140x13 -- RenderBlock {DIV} at (3,3) size 141x13 -diff --git a/LayoutTests/platform/mac-wk1/TestExpectations b/LayoutTests/platform/mac-wk1/TestExpectations -index 91bdc478841a1ff1f4901aed878c6f14b4b3bc6a..cabfe7890e8d9b20f8c39368ce9aa9765cdc9ada 100644 ---- a/LayoutTests/platform/mac-wk1/TestExpectations -+++ b/LayoutTests/platform/mac-wk1/TestExpectations -@@ -349,9 +349,6 @@ http/tests/intersection-observer [ Skip ] - imported/w3c/web-platform-tests/intersection-observer [ Skip ] - intersection-observer [ Skip ] - --fast/dom/callback-function-detached-frame-intersection-observer.html [ Skip ] --fast/dom/callback-function-detached-frame-resize-observer.html [ Skip ] -- - http/tests/lazyload [ Skip ] - imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/below-viewport-image-loading-lazy-load-event.html [ Skip ] - imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/disconnected-image-loading-lazy.html [ Skip ] -@@ -850,8 +847,6 @@ webkit.org/b/157589 fast/text-autosizing/ios/text-autosizing-after-back.html [ P - # repaint rects work differently on WK1 - fast/repaint/vertical-text-repaint.html [ Pass Failure ] - --webkit.org/b/158585 webgl/webgl-backing-store-size-update.html [ Pass Timeout ] -- - # - editing/spelling/spelling-insert-html.html [ Pass Timeout ] - -@@ -959,12 +954,6 @@ http/tests/websocket/tests/hybi/network-process-crash-error.html [ Skip ] - # auto-sizing produces inconsistent image results - css3/viewport-percentage-lengths/vh-auto-size.html [ Skip ] - --webkit.org/b/170877 [ Debug ] webgl/1.0.3/conformance/glsl/misc/shader-with-reserved-words.html [ Pass Timeout ] -- --webkit.org/b/231514 [ BigSur+ ] webgl/1.0.3/conformance/uniforms/uniform-default-values.html [ Pass Timeout ] -- --webkit.org/b/231541 [ BigSur+ Debug ] webgl/1.0.3/conformance/glsl/bugs/long-expressions-should-not-crash.html [ Pass Timeout ] -- - # This was a WK2-only fix. - http/tests/css/filters-on-iframes.html [ Skip ] - -@@ -1147,8 +1136,6 @@ imported/w3c/web-platform-tests/pointerevents/compat/pointerevent_compat-mouse-e - - webkit.org/b/198459 [ Debug ] inspector/canvas/recording-webgl-full.html [ Slow ] - --webkit.org/b/219449 [ Debug ] webgl/2.0.0/conformance/glsl/misc/shader-uniform-packing-restrictions.html [ Skip ] -- - webkit.org/b/196508 compositing/repaint/scroller-with-foreground-layer-repaints.html [ Pass Failure ] - - webkit.org/b/198676 imported/w3c/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html [ Pass Failure ] -@@ -1243,13 +1230,6 @@ webkit.org/b/208384 imported/w3c/web-platform-tests/requestidlecallback/callback - - webkit.org/b/208449 [ Debug ] mathml/presentation/attributes-accent-accentunder-dynamic.html [ Pass ImageOnlyFailure ] - --webkit.org/b/209479 [ Debug ] webgl/2.0.0/conformance2/rendering/blitframebuffer-filter-outofbounds.html [ Pass Timeout ] -- --webkit.org/b/209480 [ Debug ] webgl/2.0.0/conformance/attribs/gl-vertexattribpointer.html [ Pass Timeout ] -- --webkit.org/b/229580 [ Debug ] webgl/2.0.0/conformance/textures/misc/texture-upload-size.html [ Pass Crash ] --webkit.org/b/229580 [ Debug ] webgl/2.0.0/conformance2/textures/misc/tex-srgb-mipmap.html [ Pass Crash ] -- - webkit.org/b/208825 [ Debug ] inspector/script-profiler/event-type-Microtask.html [ Pass Failure ] - - webkit.org/b/209180 inspector/script-profiler/event-type-Other.html [ Pass Failure ] -@@ -1266,8 +1246,6 @@ webkit.org/b/210079 [ Debug ] inspector/debugger/evaluateOnCallFrame-errors.html - - webkit.org/b/230072 [ Release ] inspector/dom/shadow-and-non-shadow-children.html [ Pass Failure ] - --webkit.org/b/210198 webgl/2.0.0/conformance2/attribs/gl-vertexattribipointer.html [ Slow ] -- - webkit.org/b/208477 accessibility/mac/text-marker-for-index.html [ Skip ] - accessibility/mac/textmarker-range-for-range.html [ Skip ] - accessibility/mac/isolated-tree-mode-on-off.html [ Skip ] -@@ -1425,9 +1403,6 @@ fast/layoutformattingcontext/wbr-simple.html [ ImageOnlyFailure ] - - webkit.org/b/219498 imported/w3c/web-platform-tests/css/css-scroll-snap/scroll-target-padding-003.html [ Pass ImageOnlyFailure ] - --webkit.org/b/217761 [ Debug ] webgl/conformance/extensions/s3tc-and-rgtc.html [ Skip ] --webkit.org/b/217761 [ Debug ] webgl/2.0.0/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html [ Skip ] -- - webkit.org/b/221009 fast/harness/render-tree-as-text-options.html [ Pass Failure ] - - webkit.org/b/221095 [ BigSur+ ] media/mediacapabilities/vp9.html [ Skip ] -@@ -1626,10 +1601,6 @@ webkit.org/b/230425 printing/allowed-breaks.html [ Pass Failure ] - # webkit.org/b/214448 Web Share API is not implemented for mac-wk1 - http/tests/webshare/ [ Skip ] - --webkit.org/b/230835 [ BigSur Debug ] webgl/2.0.y/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html [ Pass Crash ] --webkit.org/b/230835 [ BigSur Debug ] webgl/1.0.3/conformance/extensions/oes-texture-float.html [ Pass Crash ] --webkit.org/b/230835 [ BigSur Debug ] webgl/2.0.0/conformance/extensions/ext-blend-minmax.html [ Pass Crash ] -- - webkit.org/b/230842 [ BigSur Debug ] media/track/audio-track.html [ Pass Crash ] - - webkit.org/b/230848 [ BigSur Debug ] webrtc/datachannel/datachannel-gc.html [ Pass Crash ] -@@ -1866,17 +1837,9 @@ webkit.org/b/238642 imported/w3c/web-platform-tests/css/css-contain/contain-body - - webkit.org/b/237783 imported/w3c/web-platform-tests/html/semantics/forms/input-change-event-properties.html [ Timeout ] - --webkit.org/b/239835 webgl/2.0.0/conformance/extensions/oes-texture-float-with-video.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance/extensions/oes-texture-half-float-with-video.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance/textures/video/tex-2d-rgba-rgba-unsigned_byte.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance/textures/video/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/image_bitmap_from_video/tex-2d-r8-red-unsigned_byte.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-2d-r11f_g11f_b10f-rgb-float.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-2d-r16f-red-float.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-2d-r16f-red-half_float.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-2d-r8ui-red_integer-unsigned_byte.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-2d-rg32f-rg-float.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-2d-rgb9_e5-rgb-float.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-3d-rg16f-rg-half_float.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Pass Timeout ] --webkit.org/b/239835 webgl/2.0.0/conformance2/textures/video/tex-3d-rgba4-rgba-unsigned_byte.html [ Pass Timeout ] -+webkit.org/b/237552 imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/same-hash.html [ Pass Failure ] -+ -+webkit.org/b/240081 [ Debug ] webaudio/AudioBuffer/huge-buffer.html [ Pass Timeout ] -+ -+# rdar://82399990 ([ Catalina EWS ] webgl/2.0.0/* tests are flaky crashing ASSERTION FAILED: !needsLayout() (229580)) Disable webgl tests for mac-wk1 -+webgl [ Skip ] -diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt -index 9c850fe6105d18975f4956c1e8bbf96b4ab4723d..ba4f0e87a2b2cafd5bed76456589ddf3555b8317 100644 ---- a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt -+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt -@@ -236,8 +236,7 @@ PASS page-break-before - PASS page-break-inside - PASS paint-order - PASS perspective --FAIL perspective-origin-x assert_not_equals: Should have the initial value. got disallowed value "" --FAIL perspective-origin-y assert_not_equals: Should have the initial value. got disallowed value "" -+PASS perspective-origin - PASS pointer-events - PASS position - PASS print-color-adjust -@@ -312,9 +311,7 @@ PASS top - PASS touch-action - PASS transform - PASS transform-box --FAIL transform-origin-x assert_not_equals: Should have the initial value. got disallowed value "" --FAIL transform-origin-y assert_not_equals: Should have the initial value. got disallowed value "" --FAIL transform-origin-z assert_not_equals: Should have the initial value. got disallowed value "" -+PASS transform-origin - PASS transform-style - PASS transition-delay - PASS transition-duration -diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..5a648d64d15312b260a62dcd913179f7430b6909 ---- /dev/null -+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/form-controls/resets-expected.txt -@@ -0,0 +1,313 @@ -+ -+ -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+FAIL - display assert_equals: expected "inline-block" but got "inline-flex" -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+FAIL - display assert_equals: expected "inline-block" but got "inline-flex" -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+FAIL - display assert_equals: expected "inline-block" but got "inline-flex" -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+FAIL - display assert_equals: expected "inline-block" but got "inline-flex" -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+FAIL - display assert_equals: expected "inline-block" but got "inline-flex" -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+FAIL - box-sizing assert_equals: expected "border-box" but got "content-box" -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - display -+PASS - box-sizing -+PASS ) - letter-spacing -+PASS ) - line-height -+PASS ) - text-indent -+PASS ) - text-align -+PASS - letter-spacing -+PASS - word-spacing -+PASS - line-height -+PASS - text-transform -+PASS - text-indent -+PASS - text-shadow -+PASS - text-align -+PASS - box-sizing -+PASS