Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Flags: --expose-wasm | 5 // Flags: --expose-wasm |
| 6 | 6 |
| 7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
| 8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
| 9 | 9 |
| 10 var expected = "Error\n" + | |
| 11 // The line numbers below will change as this test gains / loses lines.. | |
| 12 " at STACK (stack.js:24:11)\n" + // -- | |
| 13 " at <WASM> (<anonymous>)\n" + // TODO(jfb): wasm stack here. | |
| 14 " at testStack (stack.js:38:18)\n" + // -- | |
| 15 " at stack.js:40:3"; // -- | |
| 16 | |
| 17 // The stack trace contains file path, only keep "stack.js". | 10 // The stack trace contains file path, only keep "stack.js". |
| 18 function stripPath(s) { | 11 function stripPath(s) { |
| 19 return s.replace(/[^ (]*stack\.js/g, "stack.js"); | 12 return s.replace(/[^ (]*stack\.js/g, "stack.js"); |
| 20 } | 13 } |
| 21 | 14 |
| 15 // Check a property for the return values of a function called on each frame. | |
| 16 Array.prototype.verify = function(frames, func_name, check_func) { | |
| 17 assertEquals(this.length, frames.length, "number of frames mismatch"); | |
| 18 this.forEach( | |
| 19 function(element, index) { | |
| 20 var frame = frames[index]; | |
| 21 check_func(element, (frame[func_name])()); | |
| 22 } | |
| 23 ); | |
| 24 } | |
| 25 | |
| 26 // Check for every frame that a certain method returns the | |
| 27 // expected value for every frame. | |
| 28 Array.prototype.verifyEquals = function(frames, func_name) { | |
| 29 this.verify(frames, func_name, function(exp, cur) { | |
| 30 assertEquals(exp, cur, func_name + "()"); | |
| 31 }); | |
| 32 } | |
| 33 | |
| 34 // Check for every frame that a certain method has a return value | |
| 35 // that contains the expected pattern for every frame. | |
| 36 Array.prototype.verifyContains = function(frames, func_name) { | |
| 37 this.verify(frames, func_name, function(exp, cur) { | |
| 38 assertContains(cur, exp, func_name + "()"); | |
| 39 }); | |
| 40 } | |
| 41 | |
| 42 // Check for every frame that a certain method returns undefined | |
| 43 // when expected. | |
| 44 Array.prototype.verifyUndefined = function(frames, func_name) { | |
| 45 this.verify(frames, func_name, function(exp, cur) { | |
| 46 if ((cur == undefined) != !!exp) | |
| 47 assertEquals((exp ? '' : 'not ') + 'undefined', cur, func_name + "()"); | |
| 48 }); | |
| 49 } | |
| 50 | |
| 51 | |
| 22 var stack; | 52 var stack; |
| 23 function STACK() { | 53 function STACK() { |
| 24 var e = new Error(); | 54 var e = new Error(); |
| 25 stack = e.stack; | 55 stack = e.stack; |
| 26 } | 56 } |
| 27 | 57 |
| 28 (function testStack() { | 58 var builder = new WasmModuleBuilder(); |
| 29 var builder = new WasmModuleBuilder(); | |
| 30 | 59 |
| 31 builder.addImport("func", [kAstStmt]); | 60 builder.addImport("func", [kAstStmt]); |
| 32 | 61 |
| 33 builder.addFunction(undefined, [kAstStmt]) | 62 builder.addFunction("main", [kAstStmt]) |
| 34 .addBody([kExprCallImport, 0]) | 63 .addBody([kExprCallImport, 0]) |
| 35 .exportAs("main"); | 64 .exportAs("main"); |
| 36 | 65 |
| 37 var module = builder.instantiate({func: STACK}); | 66 var module = builder.instantiate({func: STACK}); |
| 67 | |
| 68 (function testSimpleStack() { | |
| 69 var expected_string = "Error\n" + | |
| 70 // The line numbers below will change as this test gains / loses lines.. | |
| 71 " at STACK (stack.js:54:11)\n" + // -- | |
| 72 " at <WASM> (<anonymous>)\n" + // TODO(jfb): wasm stack here. | |
| 73 " at testSimpleStack (stack.js:76:18)\n" + // -- | |
| 74 " at stack.js:78:3"; // -- | |
| 75 | |
| 38 module.exports.main(); | 76 module.exports.main(); |
| 39 assertEquals(expected, stripPath(stack)); | 77 assertEquals(expected_string, stripPath(stack)); |
| 40 })(); | 78 })(); |
| 79 | |
| 80 // For the remaining tests, collect the Callsite objects instead of just a | |
| 81 // string: | |
| 82 Error.prepareStackTrace = function(error, frames) { | |
| 83 return frames; | |
| 84 }; | |
| 85 | |
| 86 (function testStackFrames() { | |
| 87 module.exports.main(); | |
| 88 | |
| 89 ["STACK", "<WASM>", "testStackFrames", null] | |
| 90 .verifyEquals(stack, "getFunctionName"); | |
| 91 [54, null, 87, 98] | |
| 92 .verifyEquals(stack, "getLineNumber"); | |
| 93 ["stack.js", null, "stack.js", "stack.js"] | |
| 94 .verifyContains(stack, "getFileName"); | |
| 95 ["stack.js:54:11", "<WASM>", "stack.js:87:18", "stack.js:98:3"] | |
| 96 .verifyContains(stack, "toString"); | |
| 97 // TODO(clemensh): add a isWasm() method or similar, and test it | |
| 98 })(); | |
|
JF
2016/04/11 19:35:09
I find that structure hard to read, IMO it would b
Clemens Hammacher
2016/04/12 08:57:03
Sure, that's nicer. Changed it accordingly.
| |
| OLD | NEW |