paq
8aaead90de
avm2: Implement String.charCodeAt
2021-02-07 16:11:24 -08:00
paq
c7c025277f
avm2: Implement String.charAt
2021-02-07 16:11:24 -08:00
paq
2ec21bdd07
avm2: Implement String.length
2021-02-07 16:11:24 -08:00
paq
4a87d707f0
avm2: Implement String constructor
2021-02-07 16:11:24 -08:00
paq
8baa36e801
avm2: Implement isFinite
2020-12-27 23:02:39 -08:00
paq
ce2d7efac3
avm2: Implement isNaN
2020-12-27 23:02:39 -08:00
David Wendt
19219ad0c1
avm2: Implement `dispatchEvent`.
...
Event dispatch is a surprisingly complicated procedure, so this makes sure to test:
1. Event dispatch on bare dispatchers
2. Event dispatch on hierarchial dispatchers (movieclips)
3. Event cancellation (which is reported by `dispatchEvent`)
4. The implicit `this` on unbound event handlers. I'm not yet sure if this is a special property of event dispatch or if all unbound functions inherit their global scope as `this`.
5. The execution order of handlers on both bare and hierarchial dispatchers
6. Delegation to hierarchial dispatchers
7. Modification of the dispatch list during dispatch of an event. Surprisingly enough, you can add handlers to the event you're handling and expect them to execute, *if* you added them to a further object in the order *or* you added a bubble handler in the capture phase.
2020-12-21 21:47:29 -08:00
David Wendt
87ff679898
avm2: Implement `EventDispatcher.willTrigger`
2020-12-21 21:47:29 -08:00
David Wendt
be4e37a55c
avm2: Implement `addEventListener`, `removeEventListener`, and `hasEventListener`.
2020-12-21 21:47:29 -08:00
David Wendt
09f9e99fbb
avm2: Implement `rest` parameters in function calls.
2020-12-17 13:21:44 -08:00
David Wendt
453e013c2c
avm2: Implement `arguments`.
2020-12-17 13:21:44 -08:00
David Wendt
217890f4a6
avm2: Implement `Function.apply`
2020-12-17 13:21:44 -08:00
David Wendt
8a787e6153
avm2: Implement `Event.toString` (which matches it's valueof behavior)
2020-12-14 16:46:33 -08:00
David Wendt
d393a5f4f8
avm2: Implement `Event.preventDefault` and `Event.isDefaultPrevented`
2020-12-14 16:46:33 -08:00
David Wendt
8b9a804ae9
avm2: Implement `Event.formatToString`.
2020-12-14 16:46:33 -08:00
David Wendt
584c6c8b11
avm2: Implement `Event.clone`
2020-12-14 16:46:33 -08:00
David Wendt
90da20579c
avm2: Implement `Event.bubbles`, `cancelable`, and `type`.
2020-12-14 16:46:33 -08:00
David Wendt
58f4470dc5
avm2: Add `Event` class, object type, and native representation
2020-12-14 16:46:33 -08:00
David Wendt
afd033898c
avm2: Implement `hitTestObject`
2020-12-09 14:00:06 -08:00
David Wendt
d9172780c5
avm2: Implement `hitTestPoint`.
2020-12-09 14:00:06 -08:00
David Wendt
06ba2f898a
avm2: Implement `visible`.
2020-12-09 14:00:06 -08:00
David Wendt
d489aca377
avm2: Expose `DisplayObject.root`
2020-12-09 14:00:06 -08:00
David Wendt
1b2a4708d6
avm2: Implement `DisplayObject.parent`.
2020-12-09 14:00:06 -08:00
David Wendt
852f26bdeb
tests: Fix name test breaking with our half-working execution order
2020-12-09 14:00:06 -08:00
David Wendt
c053f2c87c
avm2: Expose DisplayObject `name` property
2020-12-09 14:00:06 -08:00
David Wendt
4784dc3c03
tests: Add more stringent height/width test that we're only accurate to within 1 twip.
2020-12-09 14:00:06 -08:00
David Wendt
69db45131b
tests: Add inactive tests for `alpha`, `height`, `rotation`, `width`, `x`, and `y`.
2020-12-09 14:00:06 -08:00
David Wendt
9dde91e0fd
core: Store named children on AVM2 movieclips as object properties
2020-11-27 13:23:34 -08:00
David Wendt
86e1037940
avm2: Implement `stopAllMovieClips`
2020-11-27 13:23:34 -08:00
David Wendt
e2e598edde
avm2: Implement `swapChildren` and `swapChildrenAt`.
2020-11-27 13:23:34 -08:00
David Wendt
71cdbd7194
avm2: Implement `setChildIndex`
2020-11-27 13:23:34 -08:00
David Wendt
cf0ab2d82f
avm2: Implement `removeChildren`.
...
This also changes the underlying `DisplayObjectContainer` method to accept any type of range. Turns out enum trait objects aren't actually trait objects and don't need to worry about object safety!
2020-11-27 13:23:34 -08:00
David Wendt
38fd29ae5f
avm2: Implement `removeChildAt`
2020-11-27 13:23:34 -08:00
David Wendt
759a590d76
avm2: Implement `getChildIndex`
2020-11-27 13:23:34 -08:00
David Wendt
85fa8f327d
avm2: Impl `contains` w/ test
2020-11-27 13:23:34 -08:00
David Wendt
bcef9ef415
tests: Add a whole number of tests of depth/render list interaction from the AS3 side
2020-11-27 13:23:34 -08:00
David Wendt
a5f09d3c09
avm2: Implement `removeChild`.
2020-11-27 13:23:34 -08:00
David Wendt
a5ea9795f6
avm2: Implement `addChild` and `addChildAt`, with tests
2020-11-27 13:23:34 -08:00
David Wendt
f748576927
avm2: Implement `getChildByName`
2020-11-27 13:23:34 -08:00
David Wendt
d04f131cfe
avm2: Implement `DisplayObjectContainer.getChildAt`.
...
This test doesn't work yet because it needs `avm2-domainscope` to get merged in.
2020-11-27 13:23:34 -08:00
Mike Welsh
48ee47d88a
tests: Add test for AVM2 Math
...
Also allow specifying relative epsilon for swf_tests_approx.
2020-11-12 04:24:47 -08:00
Mike Welsh
b927acb2c2
avm2: trace accepts multiple arguments
2020-11-10 17:05:56 -08:00
David Wendt
6f659db342
tests: Fix the lazyinit test so that it actually passes on Ruffle
2020-10-17 03:32:09 -07:00
David Wendt
a484861f79
tests: Add a test for lazy initialization load order.
2020-10-17 03:32:09 -07:00
David Wendt
4c44ca8e77
avm2: Non-integer numbers should be handled as strings and integer-parsible strings should be handled as numbers.
2020-10-06 06:03:22 -07:00
David Wendt
896a5b37a5
avm2: Implement `new MovieClip()`.
2020-10-06 06:03:22 -07:00
David Wendt
50dd9a6733
avm2: Implement the programmatically-playing flag that governs `isPlaying` behavior.
2020-10-06 06:03:22 -07:00
David Wendt
035c841eb5
tests: Add tests for `gotoAndStop` and rename the `gotoAndPlay` one
2020-10-06 06:03:22 -07:00
David Wendt
1f29497b8c
tests: Add test for AS3 movieclip play
2020-10-06 06:03:22 -07:00
David Wendt
8152400a39
avm2: Implement `MovieClip.scenes`.
2020-10-06 06:03:22 -07:00
David Wendt
c682868205
avm2: Implement `MovieClip.currentScene`
2020-10-06 06:03:22 -07:00
David Wendt
8a13d5fe10
avm2: Implement `Scene` object.
2020-10-06 06:03:22 -07:00
David Wendt
de186ed5f3
avm2: Implement `MovieClip.currentLabels`
2020-10-06 06:03:22 -07:00
David Wendt
77a86aef9b
avm2: Implement `FrameLabel`.
2020-10-06 06:03:22 -07:00
David Wendt
86b07c0007
tests: Add tests for `prevScene` and `nextScene`.
2020-10-06 06:03:22 -07:00
David Wendt
6d0befad97
avm2: Implement `prevFrame` and `nextFrame`, with tests.
2020-10-06 06:03:22 -07:00
David Wendt
97048fb8bd
avm2: Implement `stop` and `play`, with tests for the former.
2020-10-06 06:03:22 -07:00
David Wendt
556c951b1c
avm2: Implement `gotoAndPlay`/`gotoAndStop`, with test.
2020-10-06 06:03:22 -07:00
David Wendt
5b83f6b4cc
avm2: Add test for movieclip-specific properties.
2020-10-06 06:03:22 -07:00
David Wendt
55fec14a1c
tests: Add tests for timeline scripts.
2020-10-06 06:03:22 -07:00
David Wendt
de0bc93839
Fix `hasOwnProperty` yielding false on populated non-hole array indicies.
2020-09-15 02:20:11 -07:00
David Wendt
07e14463e2
avm2: Array `join` and `toString` treat `undefined` and `null` as empty strings.
2020-09-15 02:20:11 -07:00
David Wendt
3b7922d222
avm2: Implement `Array.sortOn`
2020-09-15 02:20:11 -07:00
David Wendt
0aa2c50118
avm2: Implement `Array.sort`
2020-09-15 02:20:11 -07:00
David Wendt
ca4982029b
avm2: Impl `Array.toLocaleString`.
2020-09-15 02:20:11 -07:00
David Wendt
dbaef812fa
avm2: Impl `Array.splice`.
2020-09-15 02:20:11 -07:00
David Wendt
53b564bb52
avm2: Implement `Array.slice`.
2020-09-15 02:20:11 -07:00
David Wendt
685fbc12e0
tests: `Array.reverse`'s test should also include a check for holes.
2020-09-15 02:20:11 -07:00
David Wendt
036f7cbb90
avm2: Implement `Array.shift` and `Array.unshift`.
...
This also updates `Array.push` to support it's ability to push multiple arguments at once.
2020-09-15 02:20:11 -07:00
David Wendt
879aff3669
avm2: Implement `Array.reverse`
2020-09-15 02:20:11 -07:00
David Wendt
1ce78388a3
avm2: Implement `Array.push` and `Array.pop`
2020-09-15 02:20:11 -07:00
David Wendt
0ece924877
avm2: Implement `indexOf` and `lastIndexOf`
2020-09-15 02:20:11 -07:00
David Wendt
832bbdd711
avm2: Implement `forEach`, `map`, `filter`, `every`, and `some` on `Array`.
...
This also comes with some refactoring: building the resulting array object and resolving holes is now done in helper methods.
2020-09-15 02:20:11 -07:00
David Wendt
0eeee72be6
avm2: Implement `Array.join`, `Array.toString`, and `Array.valueOf` (w/tests)
2020-09-15 02:20:11 -07:00
David Wendt
79df789028
tests: Add test for `Array.concat`.
2020-09-15 02:20:11 -07:00
David Wendt
75e6018607
tests: Add test for `newarray`.
2020-09-15 02:20:11 -07:00
David Wendt
27793092c2
tests: Add `array_holes` test.
2020-09-15 02:20:11 -07:00
David Wendt
3d37fda1ef
tests: Add tests for `deleteproperty` on arrays.
2020-09-15 02:20:11 -07:00
David Wendt
1a8f041b77
tests: Add `array_storage` test.
2020-09-15 02:20:11 -07:00
David Wendt
34ba1643dd
tests: Add test for reading properties of an array
2020-09-15 02:20:11 -07:00
David Wendt
1d3f5d80be
tests: Add test for `new Array`'s arguments.
2020-09-15 02:20:11 -07:00
David Wendt
3b5411547a
avm2: Implement `in`
2020-09-07 11:07:07 -07:00
kmeisthax
559bc05b6a
avm2: Implement avm2 math opcodes (merge #1037 )
...
* Implement `add`, with tests.
* Implement `add_i`.
There's no test, because for whatever reason, I can't figure out how to emit this from Animate CC 2020.
* avm2: Implement `bitand` with tests.
* Implement `bitnot` with tests.
* Implement `bitor` with tests.
* avm2: Implement `bitxor`
* avm2: Implement `declocal`, `declocal_i`, `decrement`, and `decrement_i`.
* tests: `swf_approx` tests should be allowed to print NaNs.
* avm2: Implement `divide`.
* avm2: Implement `inclocal`, `inclocal_i`, `increment`, and `increment_i`.
* avm2: Implement `lshift`.
* Implement `modulo`.
* avm2: Implement `multiply` and `multiply_i` (no tests for the latter)
* avm2: Implement `negate` and `negate_i` (no tests for the latter)
* avm2: Implement `rshift`
* avm2: Implement `subtract` and `subtract_i` (the latter without tests)
* avm2: Implement `urshift`.
2020-08-23 13:38:38 -07:00
David Wendt
6ec1d453b8
Add tests for `greaterequals`, `greaterthan`, `lessequals`, and `lessthan`.
2020-08-10 16:38:04 -07:00
David Wendt
f88f2e225a
Add tests for `>`, `<`, `<=`, and `>=`.
...
Note that this does NOT completely test the full range of if instructions for abstract relational comparison. Notably, the Adobe Animate CC compiler compiles each operator into it's negated equivalent, e.g. `<` becomes `ifnlt`.
I do not know how to get it to emit `ifge` or the like, which differ only by how they handle `NaN`s.
2020-08-10 16:38:04 -07:00
David Wendt
76ab8570e4
Implement and test `equals`.
...
The test is also far more in-depth than the `if_eq`/`if_ne` tests, which use the same set of vectors as the strict-equality tests from a while ago. Interestingly, this test passed on first run
2020-08-10 16:38:04 -07:00
David Wendt
5da4e2f118
Test for `iseq` and `isne`
2020-08-10 16:38:04 -07:00
David Wendt
86965eb674
Test for `coerce_s`.
...
I cannot yet figure out how to generate tests that use `convert_s`, so it's not covered.
2020-08-10 16:38:04 -07:00
David Wendt
35f939cb15
Add and test for `convert_u` using `ToUint32` from ECMA-262
2020-08-10 16:38:04 -07:00
David Wendt
6eb41035cf
Add & test ECMA-262 ToInt32 and `convert_i` opcode.
...
The ECMA-262 documentation is awfully overwrought for something that boils down to "chop off the non-whole part, wrap to 32 bits, then reinterpret as signed". Bitwise operations are *hell* to describe mathematically, and such descriptions are even harder to understand.
2020-08-10 16:38:04 -07:00
David Wendt
351fe026e9
Add a test for all the above numerical coercions.
2020-08-10 16:38:04 -07:00
David Wendt
60f9613365
Implement and test for `convert_b`.
2020-08-10 16:38:04 -07:00
David Wendt
6cf48eb543
Implement and test `not`.
2020-08-10 16:38:04 -07:00
David Wendt
b972c24f7e
Oh look, I figured out how to emit `istrue`, so that's tested, too.
2020-08-10 16:38:04 -07:00
David Wendt
850ebc88a2
Add test for truthiness.
...
As compiled by Adobe Animate CC 2020, this test appears to only use `iffalse`. However, both `op_is_false` and `op_is_true` coerce in the same manner, so I'm not entirely sure this is a problem for now.
2020-08-10 16:38:04 -07:00
David Wendt
64e5b46259
Add tests for `instanceof` and `is` operators.
2020-07-13 17:45:10 -04:00
David Wendt
563a515189
Add a test for loading interfaces into the AVM2.
...
This test will fail if the AVM2 implementation does not support bodyless methods or bare classes properly.
2020-07-13 17:45:07 -04:00
David Wendt
6117288fe2
Add tests for `ifstricteq`, `ifstrictne`, and `strictequals`.
2020-07-13 17:44:59 -04:00
David Wendt
03a240ebcd
Add tests for `valueOf`.
2020-07-13 17:44:58 -04:00
David Wendt
3b52dfe2ba
Since we have an `es3_inheritance` test now, rename the existing inheritance test to `es4_inheritance`.
2020-07-13 17:44:57 -04:00