<!doctype html>
<!--
Distributed under both the W3C Test Suite License [1] and the W3C
3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
policies and contribution forms [3].

[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
[3] http://www.w3.org/2004/10/27-testcases
-->
<html>
<head>
<meta charset="utf-8">
<title>Object.freeze</title>
<link rel="author" title="Masaya Iseki" href="mailto:iseki.m.aa@gmail.com">
<link rel="help" href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.freeze">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
test(function() {
  [{}, []].forEach(function(that) {
    assert_false(Object.isFrozen(that));
    that.prop = 'exist';

    Object.freeze(that);
    assert_false(Object.isExtensible(that));
    assert_true(Object.isSealed(that));
    assert_true(Object.isFrozen(that));

    that.extension = 'This property should not be added';
    assert_equals(undefined, that.extension, 'Confirm to prevent adding property.');

    that.prop = 'changed';
    assert_equals('exist', that.prop,
          'Confirm to prevent changing a property value.');

    delete that.prop;
    assert_equals('exist', that.prop, 'Confirm to prevent deleting a property.');
  });
});


test(function() {
  ['foo', 42, null, undefined].forEach(function(that) {
    assert_throws(new TypeError(),
        function() { Object.freeze(that) });
  });
});
</script>

</body>
</html>
