var DomHelperTest = TestCase('DomHelperTest');

DomHelperTest.prototype.setUp = function() {
  this.domHelper_ = new webfont.DomHelper(window);
};

DomHelperTest.prototype.testCreateElementNoAttr = function() {
  var span = this.domHelper_.createElement('span');

  assertNotNull(span);
};

DomHelperTest.prototype.testCreateElementEmptyAttrInnerHtml = function() {
  var span = this.domHelper_.createElement('span', {}, 'moo');

  assertNotNull(span);
  assertEquals('moo', span.innerHTML);
};

DomHelperTest.prototype.testCreateElementWithAttrInnerHtml = function() {
  var span = this.domHelper_.createElement('span', { style: 'font-size: 42px',
      id: 'mySpan' }, 'hello');

  assertNotNull(span);
  assertEquals('mySpan', span.id);
  assertEquals('42px', span.style.fontSize);
  assertEquals('hello', span.innerHTML);
};

DomHelperTest.prototype.testCreateElementWithPrototypeAugments = function(){

  Object.prototype.extrastuff = function(){ return 'I am a troublemaker.'; }

  var span = this.domHelper_.createElement('span', { id : "augmented" });
  var spanPar = this.domHelper_.createElement('div', { id : "augmentedpar" });
  spanPar.appendChild(span);


  assertNotNull(span);
  assertSame(false,!!span.getAttribute('extrastuff'));
  assertSame(-1,spanPar.innerHTML.indexOf('extrastuff'))


  delete Object.prototype.extrastuff;
  span = spanPar = undefined;
}

DomHelperTest.prototype.testCreateCssLink = function() {
  var cssLink = this.domHelper_.createCssLink('http://moo/somecss.css');

  assertEquals('stylesheet', cssLink.rel);
  assertEquals('http://moo/somecss.css', cssLink.href);
};

DomHelperTest.prototype.testCreateScriptSrc = function() {
  var cssLink = this.domHelper_.createScriptSrc('http://moo/somescript.js');

  assertEquals('http://moo/somescript.js', cssLink.src);
};

DomHelperTest.prototype.testAppendAndRemoveClassNames = function() {
  var div = this.domHelper_.createElement('div');

  this.domHelper_.appendClassName(div, 'moo');
  assertEquals('moo', div.className);
  this.domHelper_.appendClassName(div, 'meuh');
  assertEquals('moo meuh', div.className);
  this.domHelper_.removeClassName(div, 'moo');
  assertEquals('meuh', div.className);

  this.domHelper_.removeClassName(div, 'meuh');
  this.domHelper_.appendClassName(div, 'spaces and	tabs');

  this.domHelper_.removeClassName(div, 'and');
  assertEquals('spaces tabs', div.className);
  this.domHelper_.removeClassName(div, 'spaces');
  this.domHelper_.removeClassName(div, 'tabs');
  assertEquals('', div.className);

};

DomHelperTest.prototype.testHasClassName = function() {
  var div = this.domHelper_.createElement('div');

  this.domHelper_.appendClassName(div, 'moo');
  this.domHelper_.appendClassName(div, 'moo-meuh');

  assertTrue(this.domHelper_.hasClassName(div, 'moo'));
  assertTrue(this.domHelper_.hasClassName(div, 'moo-meuh'));
  assertFalse(this.domHelper_.hasClassName(div, 'meuh'));
  assertFalse(this.domHelper_.hasClassName(div, 'missingClassName'));
};

DomHelperTest.prototype.testSetStyle = function() {
  var e = this.domHelper_.createElement('span')
  this.domHelper_.setStyle(e, 'left:3px;top:1px;');
  assertEquals('3px', e.style.left)
  assertEquals('1px', e.style.top);
};

DomHelperTest.prototype.testHasSupportForStyle = function() {
  assertUndefined(this.domHelper_.supportForStyle_);
  assertBoolean(this.domHelper_.hasSupportForStyle_());
  this.domHelper_.supportForStyle_ = false;
  assertFalse(this.domHelper_.hasSupportForStyle_());
  this.domHelper_.supportForStyle_ = true;
  assertTrue(this.domHelper_.hasSupportForStyle_());
};

DomHelperTest.prototype.testGetWindows = function() {
  var fakeMainWindow = 'main window';
  var fakeLoadWindow = 'load window';
  var domHelper = new webfont.DomHelper(fakeMainWindow, fakeLoadWindow);
  assertEquals('main window', domHelper.getMainWindow());
  assertEquals('load window', domHelper.getLoadWindow());
};

DomHelperTest.prototype.testGetProtocol = function() {
  var fakeWindow = {
    location: {
      protocol: 'https:'
    }
  };
  var domHelper = new webfont.DomHelper(fakeWindow);
  assertEquals('https:', domHelper.getProtocol());
};

DomHelperTest.prototype.testGetProtocolHttpDefault = function() {
  var fakeWindow = {
    location: {
      protocol: 'file:'
    }
  };
  var domHelper = new webfont.DomHelper(fakeWindow);
  assertEquals('http:', domHelper.getProtocol());
};

DomHelperTest.prototype.testGetProtocolIframeFallback = function() {
  var fakeMainWindow = {
    location: {
      protocol: 'https:'
    }
  };
  var fakeLoadWindow = {
    location: {
      protocol: 'about:'
    }
  };
  var domHelper = new webfont.DomHelper(fakeMainWindow, fakeLoadWindow);
  assertEquals('https:', domHelper.getProtocol());
};