// Copyright (C) 2013 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 19.4
description: >
    Object.preventExtensions(obj) where obj contains symbol properties.
flags: [onlyStrict]
features: [Symbol]
---*/
var symA = Symbol("A");
var symB = Symbol("B");
var symC = Symbol("C");
var obj = {};
obj[symA] = 1;
Object.preventExtensions(obj);
obj[symA] = 2;

assert.throws(TypeError, function() {
  obj[symB] = 1;
});

assert.throws(TypeError, function() {
  Object.defineProperty(obj, symC, {
    value: 1
  });
});

assert.sameValue(obj[symA], 2, "The value of `obj[symA]` is `2`");
assert.sameValue(delete obj[symA], true, "`delete obj[symA]` is `true`");
assert.sameValue(obj[symB], undefined, "The value of `obj[symB]` is `undefined`");
assert.sameValue(obj[symC], undefined, "The value of `obj[symC]` is `undefined`");
