// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


(function TestBasics() {
  var x = 1;
  var object = {x};
  assertEquals(1, object.x);
})();


(function TestDescriptor() {
  var x = 1;
  var object = {x};
  var descr = Object.getOwnPropertyDescriptor(object, 'x');
  assertEquals(1, descr.value);
  assertTrue(descr.enumerable);
  assertTrue(descr.writable);
  assertTrue(descr.configurable);
})();


(function TestNotDefined() {
  'use strict';
  assertThrows(function() {
    return {notDefined};
  }, ReferenceError);
})();


(function TestLet() {
  var let = 1;
  var object = {let};
  assertEquals(1, object.let);
})();


(function TestYieldInFunction() {
  var yield = 1;
  var object = {yield};
  assertEquals(1, object.yield);
})();


(function TestToString() {
  function f(x) { return {x}; }
  assertEquals('function f(x) { return {x}; }', f.toString());
})();


(function TestProtoName() {
  var __proto__ = 1;
  var object = {
    __proto__
  };
  assertEquals(Object.prototype, Object.getPrototypeOf(object));
  assertEquals(1, object.__proto__);
})();


(function TestProtoName2() {
  var __proto__ = 1;
  var p = {};
  var object = {
    __proto__: p,
    __proto__,
  };
  assertEquals(p, Object.getPrototypeOf(object));
  assertEquals(1, object.__proto__);
})();
