• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3// found in the LICENSE file.
4
5// This is intended for permanent JS behavior changes for mocking out
6// non-deterministic behavior. For temporary suppressions, please refer to
7// v8_suppressions.js.
8// This file is loaded before each correctness test cases and won't get
9// minimized.
10
11
12// This will be overridden in the test cases. The override can be minimized.
13var __PrettyPrint = function __PrettyPrint(msg) { print(msg); };
14
15// Mock Math.random.
16(function () {
17  var index = 0
18  Math.random = function() {
19    index = (index + 1) % 10;
20    return index / 10.0;
21  }
22})();
23
24// Mock Date.
25(function () {
26  var index = 0
27  var mockDate = 1477662728696
28  var mockDateNow = function() {
29    index = (index + 1) % 10
30    mockDate = mockDate + index + 1
31    return mockDate
32  }
33
34  var origDate = Date;
35  var handler = {
36    construct: function(target, args, newTarget) {
37      if (args.length > 0) {
38        return new (
39            Function.prototype.bind.apply(origDate, [null].concat(args)));
40      } else {
41        return new origDate(mockDateNow());
42      }
43    },
44    get: function(target, property, receiver) {
45      if (property == "now") {
46        return mockDateNow;
47      }
48    },
49  }
50
51  Date = new Proxy(Date, handler);
52})();
53
54// Mock performace.now().
55(function () {
56  performance.now = function () { return 1.2; }
57})();
58
59// Mock stack traces.
60Error.prepareStackTrace = function (error, structuredStackTrace) {
61  return "";
62};
63Object.defineProperty(
64    Error, 'prepareStackTrace', { configurable: false, writable: false });
65
66// Mock buffer access in float typed arrays because of varying NaN patterns.
67// Note, for now we just use noop forwarding proxies, because they already
68// turn off optimizations.
69(function () {
70  var mock = function(arrayType) {
71    var handler = {
72      construct: function(target, args) {
73        return new Proxy(
74            Function.prototype.bind.apply(arrayType, [null].concat(args)), {});
75      },
76    };
77    return new Proxy(arrayType, handler);
78  }
79
80  Float32Array = mock(Float32Array);
81  Float64Array = mock(Float64Array);
82})();
83
84// Mock Worker.
85(function () {
86  var index = 0;
87  // TODO(machenbach): Randomize this for each test case, but keep stable
88  // during comparison. Also data and random above.
89  var workerMessages = [
90    undefined, 0, -1, "", "foo", 42, [], {}, [0], {"x": 0}
91  ];
92  Worker = function(code){
93    try {
94      __PrettyPrint(eval(code));
95    } catch(e) {
96      __PrettyPrint(e);
97    }
98    this.getMessage = function(){
99      index = (index + 1) % 10;
100      return workerMessages[index];
101    }
102    this.postMessage = function(msg){
103      __PrettyPrint(msg);
104    }
105  };
106})();
107