test-incrementer.js (2433B)
1 "use strict"; 2 3 self.getViewValue = (view, index) => { 4 if(view instanceof DataView) { 5 return view.getInt8(index); 6 } 7 return view[index]; 8 }; 9 10 self.setViewValue = (view, index, value) => { 11 if(view instanceof DataView) { 12 view.setInt8(index, value); 13 } else { 14 view[index] = value; 15 } 16 }; 17 18 self.maybeBigInt = (view, value) => { 19 if (view.constructor.name === "BigInt64Array" || view.constructor.name === "BigUint64Array") { 20 return BigInt(value); 21 } 22 return value; 23 }; 24 25 self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin, type = "Int32Array") => { 26 return new Promise(resolve => { 27 const sab = new SharedArrayBuffer(8); 28 const view = new self[type](sab); 29 setViewValue(view, 0, maybeBigInt(view, 1)); 30 31 whereToListen.onmessage = t.step_func(({ data }) => { 32 switch (data.message) { 33 case "initial payload received": { 34 assert_equals(data.value, maybeBigInt(view, 1), `The ${whereToSendLabel} must see the same value in the SharedArrayBuffer`); 35 break; 36 } 37 38 case "changed to 2": { 39 assert_equals(getViewValue(view, 0), maybeBigInt(view, 2), `The ${whereToListenLabel} must see changes made in the ${whereToSendLabel}`); 40 41 setViewValue(view, 0, maybeBigInt(view, 3)); 42 whereToSend.postMessage({ message: "changed to 3" }, origin); 43 44 break; 45 } 46 47 case "changed to 3 received": { 48 assert_equals(data.value, maybeBigInt(view, 3), `The ${whereToSendLabel} must see changes made in the ${whereToListenLabel}`); 49 resolve(); 50 break; 51 } 52 } 53 }); 54 55 whereToSend.postMessage({ message: "initial payload", view }, origin); 56 }); 57 }; 58 59 self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => { 60 let view; 61 whereToListen.onmessage = ({ data }) => { 62 switch (data.message) { 63 case "initial payload": { 64 view = data.view; 65 whereToSendBackTo.postMessage({ message: "initial payload received", value: getViewValue(view, 0) }, origin); 66 67 setViewValue(view, 0, maybeBigInt(view, 2)); 68 whereToSendBackTo.postMessage({ message: "changed to 2" }, origin); 69 70 break; 71 } 72 73 case "changed to 3": { 74 whereToSendBackTo.postMessage({ message: "changed to 3 received", value: getViewValue(view, 0) }, origin); 75 76 break; 77 } 78 } 79 }; 80 };