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

/*---
info: |
    When Boolean is called as part of a new expression it is
    a constructor: it initialises the newly created object
esid: sec-boolean-constructor
es5id: 15.6.2.1_A1
description: Checking type of the newly created object and it value
---*/

//CHECK#1
if (typeof new Boolean() !== "object") {
  $ERROR("#1: typeof new Boolean() === 'object'");
}

//CHECK#2
if (new Boolean() === undefined) {
  $ERROR("#2: new Boolean() should not be undefined");
}

//CHECK#3
var x3 = new Boolean();
if(typeof x3 !== "object"){
  $ERROR("#3: typeof new Boolean() !== 'object'");
}

//CHECK#4
var x4 = new Boolean();
if(x4 === undefined){
  $ERROR("#4: new Boolean() should not be undefined");
}

//CHECK#5
if (typeof new Boolean(1) !== "object") {
  $ERROR("#5: typeof new Boolean(10) === 'object'");
}

//CHECK#6
if (new Boolean(1) === undefined) {
  $ERROR("#6: new Boolean(1) should not be undefined");
}

//CHECK#7
var x7 = new Boolean(1);
if(typeof x7 !== "object"){
  $ERROR("#7: typeof new Boolean(1) !== 'object'");
}

//CHECK#8
var x8 = new Boolean(1);
if(x8 === undefined){
  $ERROR("#8: new Boolean(1) should not be undefined");
}
