var fakeCustomData = (function() { var buffer = new ArrayBuffer(2); new DataView(buffer).setInt16(0, 42, true); var canvas = document.createElement("canvas"); canvas.width = canvas.height = 100; var context = canvas.getContext("2d"); var map = new Map(); var set = new Set(); map.set("test", 42); set.add(4); set.add(2); return { primitives: { a: 123, b: "test", c: true, d: [1, 2, 3], }, date: new Date(2013, 2, 1, 1, 10), regexp: new RegExp("[^.]+"), arrayBuffer: buffer, imageData: context.createImageData(100, 100), map, set, }; })(); function assert_custom_data(dataObj) { assert_equals(typeof dataObj, "object", "data should be a JS object"); assert_equals( JSON.stringify(dataObj.primitives), JSON.stringify(fakeCustomData.primitives), "data.primitives should be preserved" ); assert_equals( dataObj.date.toDateString(), fakeCustomData.date.toDateString(), "data.date should be preserved" ); assert_equals( dataObj.regexp.exec("http://www.domain.com")[0].substr(7), "www", "data.regexp should be preserved" ); assert_equals( new Int16Array(dataObj.arrayBuffer)[0], 42, "data.arrayBuffer should be preserved" ); assert_equals( JSON.stringify(dataObj.imageData.data), JSON.stringify(fakeCustomData.imageData.data), "data.imageData should be preserved" ) assert_equals( dataObj.map.get("test"), 42, "data.map should be preserved" ); assert_true( dataObj.set.has(4) && dataObj.set.has(2), "data.set should be preserved" ); }