{"ScriptPreparationCode":null,"TestCases":[{"Name":"reusing elements","Code":"(async function(){\r\n var reusables = [];\r\n function nextTick(cb){\r\n var resolve;\r\n var promise = new Promise(function (resolveImpl) {\r\n resolve = resolveImpl;\r\n });\r\n var audio = reusables.length ? reusables.shift() : document.createElement(\u0022audio\u0022);\r\n audio.onratechange = function(){\r\n audio.onratechange = undefined; //todo not really necessary\r\n audio.playbackRate = 1;\r\n reusables.push(audio);\r\n resolve(cb());\r\n }\r\n audio.playbackRate = 2;\r\n\r\n promise.cancel = function(){\r\n audio.onratechange = undefined;\r\n resolve(false);\r\n return cb;\r\n }\r\n return promise;\r\n }\r\n\r\n var result = await nextTick(function(){});\r\n})();","IsDeferred":false},{"Name":"nonreusables","Code":"(async function(){\r\n function nextTick(cb){\r\n var resolve;\r\n var promise = new Promise(function (resolveImpl) {\r\n resolve = resolveImpl;\r\n });\r\n var audio = document.createElement(\u0022audio\u0022);\r\n audio.onratechange = function(){\r\n resolve(cb());\r\n }\r\n audio.playbackRate = 2;\r\n\r\n promise.cancel = function(){\r\n audio.onratechange = undefined;\r\n resolve(false);\r\n return cb;\r\n }\r\n return promise;\r\n }\r\n\r\n var result = await nextTick(function(){});\r\n})();","IsDeferred":false}]}