// note, this template substitution is XSS, but no way to avoid it in this framework
var expected_alerts = {{GET[alerts]}};

if(expected_alerts.length == 0) {
  function alert_assert(msg) {
   test(function () { assert_unreached(msg) });
 }
} else {
 var t_alert = async_test('Expecting alerts: {{GET[alerts]}}');
 function alert_assert(msg) {
     t_alert.step(function () {
         if(msg && msg instanceof Error) {
             msg = msg.message;
         }
         if (msg && msg.match(/^FAIL/i)) {
             assert_unreached(msg);
             t_alert.done();
         }
         for (var i = 0; i < expected_alerts.length; i++) {
             if (expected_alerts[i] == msg) {
                 assert_true(expected_alerts[i] == msg);
                 expected_alerts.splice(i, 1);
                 if (expected_alerts.length == 0) {
                     t_alert.done();
                 }
                 return;
             }
         }
         assert_unreached('unexpected alert: ' + msg);
         t_log.done();
     });
 }
}
