<!--
var results = [];
function check(func, msg) {
  try {
    results.push([func(), msg]);
  } catch(ex) {
    results.push([String(ex), msg]);
  }
}
check(function() { return self === self; }, 'self === self');
check(function() { return self instanceof WorkerGlobalScope; }, 'self instanceof WorkerGlobalScope');
check(function() { return 'self' in self; }, '\'self\' in self');
check(function() {
  var x = self;
  self = 1;
  return x === self;
}, 'self = 1');
postMessage(results);
/*
-->
<!doctype html>
<title>self</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
  var worker = new Worker('#');
  worker.onmessage = this.step_func(function(e) {
    for (var i = 0; i < e.data.length; ++i) {
      assert_true(e.data[i][0], e.data[i][1]);
    }
    this.done();
  });
});
</script>
<!--
*/
//-->