// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    When the Object constructor is called with one argument value and
    the value is a native ECMAScript object, do not create a new object but simply return value
es5id: 15.2.2.1_A2_T7
description: The value is a function declaration
---*/

//CHECK#0
if (typeof func !== 'undefined') {
  $ERROR('#0: function expression can\'t be declarated');
}

var n_obj = new Object(function func() {
  return 1;
});

//CHECK#1
if (n_obj.constructor !== Function) {
  $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns');
}

//CHECK#2
if (n_obj() !== 1) {
  $ERROR('#2: When the Object constructor is called and if the value is an Object simply value returns');
}

//CHECK#3
if (typeof func !== 'undefined') {
  $ERROR('#3: function expression can\'t be declarated');
}
