var GoogleFontApiTest = TestCase('GoogleFontApiTest');

GoogleFontApiTest.prototype.testCallOnReadyWithFontFamilyLoading = function() {
  var insert = '';
  var link = '';
  var fakeDomHelper = {
      insertInto: function(tag, e) {
        insert = tag;
      },
      createCssLink: function(csslink) {
        link = csslink;
      }
  };
  var userAgent = new webfont.UserAgent("Test", "1.0", true);
  var googleFontApi = new webfont.GoogleFontApi(userAgent, fakeDomHelper,
      { families: [ 'Font1', 'Font2' ] });

  var families = null;
  var descriptions = null;

  googleFontApi.load(function(fontFamilies, fontDescriptions) {
      families = fontFamilies;
      descriptions = fontDescriptions;
  });

  assertEquals('head', insert);
  assertEquals('http://fonts.googleapis.com/css?family=' +
      'Font1%7CFont2', link);

  assertNotNull(families);
  assertEquals(2, families.length);
  assertEquals('Font1', families[0]);
  assertEquals('Font2', families[1]);

  var font1Descriptions = descriptions['Font1'];
  assertNotNull(font1Descriptions);
  assertEquals(1, font1Descriptions.length);
  assertEquals('n4', font1Descriptions[0]);

  var font2Descriptions = descriptions['Font2'];
  assertNotNull(font2Descriptions);
  assertEquals(1, font2Descriptions.length);
  assertEquals('n4', font2Descriptions[0]);
};

GoogleFontApiTest.prototype.testCallOnReadyWithFontFamilyLoadingApiUrlChanged =
    function() {
  var insert = '';
  var link = '';
  var fakeDomHelper = {
      insertInto: function(tag, e) {
        insert = tag;
      },
      createCssLink: function(csslink) {
        link = csslink;
      }
  };
  var userAgent = new webfont.UserAgent("Test", "1.0", true);
  var googleFontApi = new webfont.GoogleFontApi(userAgent, fakeDomHelper,
      { api: 'http://moo',  families: [ 'Font1', 'Font2' ] });

  var families = null;
  var descriptions = null;

  googleFontApi.load(function(fontFamilies, fontDescriptions) {
      families = fontFamilies;
      descriptions = fontDescriptions;
  });

  assertEquals('head', insert);
  assertEquals('http://moo?family=Font1%7CFont2', link);

  assertNotNull(families);
  assertEquals(2, families.length);
  assertEquals('Font1', families[0]);
  assertEquals('Font2', families[1]);

  var font1Descriptions = descriptions['Font1'];
  assertNotNull(font1Descriptions);
  assertEquals(1, font1Descriptions.length);
  assertEquals('n4', font1Descriptions[0]);

  var font2Descriptions = descriptions['Font2'];
  assertNotNull(font2Descriptions);
  assertEquals(1, font2Descriptions.length);
  assertEquals('n4', font2Descriptions[0]);
};

GoogleFontApiTest.prototype.testSpacesReplacedByPlus = function() {
  var insert = '';
  var link = '';
  var fakeDomHelper = {
      insertInto: function(tag, e) {
        insert = tag;
      },
      createCssLink: function(csslink) {
        link = csslink;
      }
  };
  var userAgent = new webfont.UserAgent("Test", "1.0", true);
  var googleFontApi = new webfont.GoogleFontApi(userAgent, fakeDomHelper,
      { families: [ 'Font1 WithSpace', 'Font2 WithSpaceToo' ] });

  var families = null;
  var descriptions = null;

  googleFontApi.load(function(fontFamilies, fontDescriptions) {
      families = fontFamilies;
      descriptions = fontDescriptions;
  });

  assertEquals('head', insert);
  assertEquals('http://fonts.googleapis.com/css?family=Font1+WithSpace%7CFont2+WithSpaceToo', link);

  assertNotNull(families);
  assertEquals(2, families.length);
  assertEquals('Font1 WithSpace', families[0]);
  assertEquals('Font2 WithSpaceToo', families[1]);

  var font1Descriptions = descriptions['Font1 WithSpace'];
  assertNotNull(font1Descriptions);
  assertEquals(1, font1Descriptions.length);
  assertEquals('n4', font1Descriptions[0]);

  var font2Descriptions = descriptions['Font2 WithSpaceToo'];
  assertNotNull(font2Descriptions);
  assertEquals(1, font2Descriptions.length);
  assertEquals('n4', font2Descriptions[0]);
};

GoogleFontApiTest.prototype.testLoadWithVariations = function() {
  var insert = '';
  var link = '';
  var fakeDomHelper = {
      insertInto: function(tag, e) {
        insert = tag;
      },
      createCssLink: function(csslink) {
        link = csslink;
      }
  };
  var userAgent = new webfont.UserAgent("Test", "1.0", true);
  var googleFontApi = new webfont.GoogleFontApi(userAgent, fakeDomHelper,
      { families: [ 'Font1 WithSpace:bi', 'Font2 WithSpaceToo:b,r' ] });

  var families = null;
  var descriptions = null;

  googleFontApi.load(function(fontFamilies, fontDescriptions) {
      families = fontFamilies;
      descriptions = fontDescriptions;
  });

  assertEquals('head', insert);
  assertEquals('http://fonts.googleapis.com/css?family=Font1+WithSpace:bi%7CFont2+WithSpaceToo:b,r', link);

  assertNotNull(families);
  assertEquals(2, families.length);
  assertEquals('Font1 WithSpace', families[0]);
  assertEquals('Font2 WithSpaceToo', families[1]);
  assertNotNull(descriptions);

  var font1Descriptions = descriptions['Font1 WithSpace'];
  assertNotNull(font1Descriptions);
  assertEquals(1, font1Descriptions.length);
  assertEquals('i7', font1Descriptions[0]);

  var font2Descriptions = descriptions['Font2 WithSpaceToo'];
  assertNotNull(font2Descriptions);
  assertEquals(2, font2Descriptions.length);
  assertEquals('n7', font2Descriptions[0]);
  assertEquals('n4', font2Descriptions[1]);
};