text: description(
  "This test checks construction of objects with custom constructors."
  );
  
  // Image tests
  shouldBeNonNull("new Image()");
  shouldBeEqualToString("new Image().tagName", "IMG");
  
  shouldBe("new Image().height", "0");
  shouldBe("new Image().width", "0");
  shouldBe("new Image(0).width", "0");
  shouldBe("new Image(0, 0).height", "0");
  shouldBe("new Image(100).width", "100");
  shouldBe("new Image(100, 200).height", "200");
  shouldBe("new Image(-100).width", "-100");
  shouldBe("new Image(-100, -200).height", "-200");
  
  shouldBe("new Image().hasAttribute('height')", "false");
  shouldBe("new Image().hasAttribute('width')", "false");
  shouldBe("new Image(0).hasAttribute('height')", "false");
  shouldBe("new Image(0).hasAttribute('width')", "true");
  shouldBe("new Image(0, 0).hasAttribute('height')", "true");
  shouldBe("new Image(0, 0).hasAttribute('width')", "true");
  
  shouldBeEqualToString("new Image().outerHTML","<img>");
  // FIXME: shouldBeEqualToString strips quotes from the string.
  shouldBeEqualToString("new Image(100, 100).outerHTML.replace(/\"/g, \"'\")", "<img width='100' height='100'>");
  
  // Option tests
  shouldBeNonNull("new Option()");
  shouldBeEqualToString("new Option().tagName", "OPTION");
  
  shouldBeEqualToString("new Option().innerText", "");
  shouldBeEqualToString("new Option(null).innerText", "null");
  shouldBeEqualToString("new Option(undefined).innerText", "");
  shouldBeEqualToString("new Option('somedata').innerText", "somedata");
  
  shouldBeEqualToString("new Option().value", "");
  shouldBeEqualToString("new Option('somedata', null).value", "null");
  shouldBeEqualToString("new Option('somedata', undefined).value", "somedata");
  shouldBeEqualToString("new Option('somedata', 'somevalue').value", "somevalue");
  
  shouldBeFalse("new Option().defaultSelected");
  shouldBeFalse("new Option('somedata', 'somevalue').defaultSelected");
  shouldBeFalse("new Option('somedata', 'somevalue', false).defaultSelected");
  shouldBeFalse("new Option('somedata', 'somevalue', false, false).defaultSelected");
  shouldBeTrue("new Option('somedata', 'somevalue', true).defaultSelected");
  shouldBeTrue("new Option('somedata', 'somevalue', true, false).defaultSelected");
  shouldBeTrue("new Option('somedata', 'somevalue', true, true).defaultSelected");
  
  shouldBeFalse("new Option().selected");
  shouldBeFalse("new Option('somedata', 'somevalue').selected");
  shouldBeFalse("new Option('somedata', 'somevalue', false).selected");
  shouldBeFalse("new Option('somedata', 'somevalue', true).selected");
  shouldBeFalse("new Option('somedata', 'somevalue', true, false).selected");
  shouldBeTrue("new Option('somedata', 'somevalue', true, true).selected");
  
  shouldBeEqualToString("new Option().outerHTML","<option></option>");
  shouldBeEqualToString("new Option('somedata', 'somevalue', false).outerHTML.replace(/\"/g,\"'\")", "<option value='somevalue'>somedata</option>");
  shouldBeEqualToString("new Option('somedata', 'somevalue', true).outerHTML.replace(/\"/g,\"'\")", "<option value='somevalue' selected=''>somedata</option>");
  
  // Audio tests
  shouldBeNonNull("new Audio()");
  shouldBeEqualToString("new Audio().tagName", "AUDIO");
  
  shouldBeEqualToString("new Audio().src", "");
  shouldBeEqualToString("new Audio().preload", "auto");
  shouldBeEqualToString("new Audio('http://127.0.0.1/someurl').src", "http://127.0.0.1/someurl");
  shouldBeEqualToString("new Audio('http://127.0.0.1/someurl').preload", "auto");
  