<!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.preventExtensions</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.preventextensions">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
test(function() {
  [{}, []].forEach(function(that){
    assert_true(Object.isExtensible(that));
    that.prop = 'exist';

    Object.preventExtensions(that);
    assert_false(Object.isExtensible(that));
    assert_false(Object.isFrozen(that));
    assert_false(Object.isSealed(that));

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

    that.prop = 'changed';
    assert_equals('changed', that.prop,
          'Confirm to be able to change a property value.');

    delete that.prop;
    assert_equals(undefined, that.prop, 'Confirm to be able to delete a property.');
  });
});

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

</body>
</html>
