| // Copyright 2017 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| Debug = debug.Debug |
| |
| var exception = null; |
| var date = new Date(); |
| var T = true; |
| var F = false; |
| var one = 1; |
| var two = 2; |
| var string = "s"; |
| var array = [1, 2, 3]; |
| function max(...rest) { |
| return Math.max(...rest); |
| } |
| |
| function def(a = 1) { |
| return a; |
| } |
| |
| function d1([a, b = 'b']) { |
| return a + b; |
| } |
| |
| function d2({ x: c, y, z = 'z' } = {x: 'x', y: 'y' }) { |
| return c + y + z; |
| } |
| |
| function listener(event, exec_state, event_data, data) { |
| if (event != Debug.DebugEvent.Break) return; |
| try { |
| function success(expectation, source) { |
| var result = exec_state.frame(0).evaluate(source, true).value(); |
| if (expectation !== undefined) assertEquals(expectation, result); |
| } |
| function fail(source) { |
| assertThrows(() => exec_state.frame(0).evaluate(source, true), |
| EvalError); |
| } |
| success(false, `Object == {}`); |
| success(false, `Object === {}`); |
| success(true, `Object != {}`); |
| success(true, `Object !== {}`); |
| success(true, `'s' == string`); |
| success(true, `'s' === string`); |
| success(true, `1 < Math.cos(0) * 2`); |
| success(false, `1 < string`); |
| success(true, `'a' < string`); |
| success("s", `string[0]`); |
| success(0, `[0][0]`); |
| success(1, `T^F`); |
| success(0, `T&F`); |
| success(1, `T|F`); |
| success(false, `T&&F`); |
| success(true, `T||F`); |
| success(false, `T?F:T`); |
| success(false, `!T`); |
| success(1, `+one`); |
| success(-1, `-one`); |
| success(-2, `~one`); |
| success(4, `one << two`); |
| success(1, `two >> one`); |
| success(1, `two >>> one`); |
| success(3, `two + one`); |
| success(2, `two * one`); |
| success(0.5, `one / two`); |
| success(0, `(one / two) | 0`); |
| success(1, `one ** two`); |
| success(NaN, `string * two`); |
| success("s2", `string + two`); |
| success("s2", `string + two`); |
| fail(`[...array]`); |
| success(3, `max(...array)`); |
| fail(`({[string]:1})`); |
| fail(`[a, b] = [1, 2]`); |
| success(2, `def(2)`); |
| success(1, `def()`); |
| fail(`d1(['a'])`); // Iterator.prototype.next performs stores. |
| success("XYz", `d2({x:'X', y:'Y'})`); |
| } catch (e) { |
| exception = e; |
| print(e, e.stack); |
| }; |
| }; |
| |
| // Add the debug event listener. |
| Debug.setListener(listener); |
| |
| function f() { |
| debugger; |
| }; |
| |
| f(); |
| |
| assertNull(exception); |