<!doctype html>
<title>WebSockets: multiple WebSocket objects</title>
<meta name=timeout content=long>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=../constants.js?pipe=sub></script>
<div id=log></div>
<script>
async_test(function(t) {
  // test that the events are fired as they should when opening 25 websockets and
  // sending a message on each and then closing when getting the message back
  var ws = [];
  var events = 0;
  for (var i = 0; i < 25; ++i) {
    ws[i] = new WebSocket(SCHEME_DOMAIN_PORT+'/echo');
    ws[i].id = i;
    ws[i].onopen = t.step_func(function(e) {
      events++;
      this.send(this.id);
      this.onopen = t.step_func(function() {assert_unreached()});
    }, ws[i]);
    ws[i].onmessage = t.step_func(function(e) {
      events++;
      assert_equals(e.data, ''+this.id);
      this.close();
      this.onmessage = t.step_func(function() {assert_unreached()});
    }, ws[i]);
    ws[i].onclose = t.step_func(function(e) {
      events++;
      if (events == 75) {
        t.done();
      }
      this.onclose = t.step_func(function() {assert_unreached()});
    }, ws[i]);
    ws[i].onerror = t.step_func(function() {assert_unreached()});
  }
}, null, {timeout:25000});
</script>

