var FontTest = TestCase('FontTest');

FontTest.prototype.setUp = function() {
  this.fontModuleLoader_ = new webfont.FontModuleLoader();
};

FontTest.prototype.testFontLoad = function() {
  var browserInfo = new webfont.BrowserInfo(true, false);
  var userAgent = new webfont.UserAgent('Firefox', '3.6', 'Gecko', '1.9.2',
      'Macintosh', '10.6', undefined, browserInfo);
  var font = new webfont.WebFont(window, this.fontModuleLoader_,
      function(func, timeout) { func(); }, userAgent);
  var testModule = null;

  font.addModule('test', function(conf, domHelper) {
    testModule = new function() {
      this.conf = conf;
      this.domHelper = domHelper;
      this.loadCalled = false;
      this.supportUserAgentCalled = false;
    };
    testModule.load = function(onReady) {
      this.loadCalled = true;
      onReady([]);
    };
    testModule.supportUserAgent = function(ua, support) {
      this.supportUserAgentCalled = true;
      support(true);
    };
    return testModule;
  });

  assertEquals(0, font.moduleFailedLoading_);
  assertEquals(0, font.moduleLoading_);

  var loadingEventCalled = false;
  font.load({
      test: {
        somedata: 'in french a cow says meuh'
      },
      loading: function() {
        loadingEventCalled = true;
      }
  });

  assertEquals(1, font.moduleFailedLoading_);
  assertEquals(0, font.moduleLoading_);
  assertNotNull(testModule);
  assertNotUndefined(testModule.conf);
  assertNotNull(testModule.conf);
  assertNotUndefined(testModule.domHelper);
  assertNotNull(testModule.domHelper);
  assertSame(window, testModule.domHelper.getMainWindow());
  assertSame(window, testModule.domHelper.getLoadWindow());
  assertEquals('in french a cow says meuh', testModule.conf.somedata);
  assertTrue(testModule.loadCalled);
  assertTrue(testModule.supportUserAgentCalled);
  assertTrue(loadingEventCalled);
};

FontTest.prototype.testFontLoadWithContext = function() {
  var fakeMainWindow = {};
  var browserInfo = new webfont.BrowserInfo(true, false);
  var userAgent = new webfont.UserAgent('Firefox', '3.6', 'Gecko', '1.9.2',
      'Macintosh', '10.6', undefined, browserInfo);
  var font = new webfont.WebFont(fakeMainWindow, this.fontModuleLoader_,
      function(func, timeout) { func(); }, userAgent);
  var testModule = null;

  font.addModule('test', function(conf, domHelper) {
    testModule = new function() {
      this.domHelper = domHelper;
    };
    testModule.load = function() {};
    testModule.supportUserAgent = function(ua, support) {
      support(true);
    };
    return testModule;
  });

  font.load({
    test: {
      somedata: 'in french a cow says meuh'
    },
    context: window
  });

  assertNotUndefined(testModule.domHelper);
  assertNotNull(testModule.domHelper);
  assertSame(fakeMainWindow, testModule.domHelper.getMainWindow());
  assertSame(window, testModule.domHelper.getLoadWindow());
};

FontTest.prototype.testFontInactive = function() {
  var userAgent = new webfont.UserAgent('Firefox', '3.0', 'Gecko', '1.9.2',
      'Macintosh', '10.6', undefined, new webfont.BrowserInfo(false, false));
  var font = new webfont.WebFont(window, this.fontModuleLoader_,
      function(func, timeout) { func(); }, userAgent);
  var testModule;

  font.addModule('test', function(conf) {
    testModule = new function() {
      this.conf = conf;
      this.loadCalled = false;
   };
   testModule.load = function(onReady) { };
   return testModule;
  });
  var onInactiveCalled = false;

  font.load({
      test: {
        somedata: 'in french a cow says meuh'
      },
      inactive: function() {
        onInactiveCalled = true;
      }
  });
  assertUndefined(testModule);
  assertTrue(onInactiveCalled);
};