var FontApiParserTest = TestCase('FontApiParserTest');

FontApiParserTest.prototype.testParsedValuesAreCoherent = function() {
  var fontFamilies = [ 'Tangerine', 'Droid Serif:bi',
      'Yanone Kaffeesatz:200,300,400,700',
      'Cantarell:italic,b' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();
  var parsedFontFamilies = fontApiParser.getFontFamilies();

  assertEquals(4, parsedFontFamilies.length);
  assertEquals('Tangerine', parsedFontFamilies[0]);
  assertEquals('Droid Serif', parsedFontFamilies[1]);
  assertEquals('Yanone Kaffeesatz', parsedFontFamilies[2]);
  assertEquals('Cantarell', parsedFontFamilies[3]);
  var variations = fontApiParser.getVariations();

  var tangerine = variations['Tangerine'];
  assertNotNull(tangerine);
  assertEquals(1, tangerine.length);
  assertEquals('n4', tangerine[0]);

  var droidSerif = variations['Droid Serif'];
  assertNotNull(droidSerif);
  assertEquals(1, droidSerif.length);
  assertEquals('i7', droidSerif[0]);

  var yanoneKaffeesatz = variations['Yanone Kaffeesatz'];
  assertNotNull(yanoneKaffeesatz);
  assertEquals(4, yanoneKaffeesatz.length);
  assertEquals('n2', yanoneKaffeesatz[0]);
  assertEquals('n3', yanoneKaffeesatz[1]);
  assertEquals('n4', yanoneKaffeesatz[2]);
  assertEquals('n7', yanoneKaffeesatz[3]);

  var cantarell = variations['Cantarell'];
  assertNotNull(cantarell);
  assertEquals(2, cantarell.length);
  assertEquals('i4', cantarell[0]);
  assertEquals('n7', cantarell[1]);
};

FontApiParserTest.prototype.testMixOfNumericWeightAndStyle = function() {
  var fontFamilies = [ 'Nobile:700i,b,200i,r,i700' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();
  var parsedFontFamilies = fontApiParser.getFontFamilies();

  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Nobile', parsedFontFamilies[0]);
  var variations = fontApiParser.getVariations();

  var nobile = variations['Nobile'];
  assertNotNull(nobile);
  assertEquals(4, nobile.length);
  assertEquals('i7', nobile[0]);
  assertEquals('n7', nobile[1]);
  assertEquals('i2', nobile[2]);
  assertEquals('n4', nobile[3]);
};

FontApiParserTest.prototype.testTypoBildInsteadOfBold = function() {
  var fontFamilies = [ 'Nobile:bild' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();

  var parsedFontFamilies = fontApiParser.getFontFamilies();
  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Nobile', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var nobile = variations['Nobile'];
  assertEquals(1, nobile.length);
  assertEquals('n4', nobile[0]);
};

FontApiParserTest.prototype.testNonSense = function() {
  var fontFamilies = [ 'Nobile:dwe,^%^%fewf,$9940@#!@#$%^&*()_+}POIBJ{}{' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();
  var parsedFontFamilies = fontApiParser.getFontFamilies();

  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Nobile', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var nobile = variations['Nobile'];
  assertEquals(1, nobile.length);
  assertEquals('n4', nobile[0]);
};

FontApiParserTest.prototype.testNoWeightOneSubsetDefined = function() {
  var fontFamilies = [ 'Cantarell::greek' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();

  var parsedFontFamilies = fontApiParser.getFontFamilies();
  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Cantarell', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var cantarellVariations = variations['Cantarell'];
  assertEquals(1, cantarellVariations.length);
  assertEquals('n4', cantarellVariations[0]);

  var testStrings = fontApiParser.getFontTestStrings();
  var cantarellTestStrings = testStrings['Cantarell'];
  assertNotUndefined(cantarellTestStrings);
  assertEquals(webfont.FontApiParser.INT_FONTS['greek'],
      cantarellTestStrings);
};


FontApiParserTest.prototype.testNoWeightMultipleSubsetsDefined = function() {
  var fontFamilies = [ 'Cantarell::cyrillic,greek,latin' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();

  var parsedFontFamilies = fontApiParser.getFontFamilies();
  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Cantarell', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var cantarellVariations = variations['Cantarell'];
  assertEquals(1, cantarellVariations.length);
  assertEquals('n4', cantarellVariations[0]);

  var testStrings = fontApiParser.getFontTestStrings();
  var cantarellTestStrings = testStrings['Cantarell'];
  assertNotUndefined(cantarellTestStrings);
  assertEquals(webfont.FontApiParser.INT_FONTS['cyrillic'],
      cantarellTestStrings);
};


FontApiParserTest.prototype.testWeightAndMultipleSubsetsDefined = function() {
  var fontFamilies = [ 'Cantarell:regular,bold:cyrillic,greek,latin' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();

  var parsedFontFamilies = fontApiParser.getFontFamilies();
  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Cantarell', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var cantarellVariations = variations['Cantarell'];
  assertEquals(2, cantarellVariations.length);
  assertEquals('n4', cantarellVariations[0]);
  assertEquals('n7', cantarellVariations[1]);

  var testStrings = fontApiParser.getFontTestStrings();
  var cantarellTestStrings = testStrings['Cantarell'];
  assertNotUndefined(cantarellTestStrings);
  assertEquals(webfont.FontApiParser.INT_FONTS['cyrillic'],
      cantarellTestStrings);
};


FontApiParserTest.prototype.testHanumanIsBackwardCompatible = function() {
  var fontFamilies = [ 'Hanuman' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();

  var parsedFontFamilies = fontApiParser.getFontFamilies();
  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Hanuman', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var hanumanVariations = variations['Hanuman'];
  assertEquals(1, hanumanVariations.length);
  assertEquals('n4', hanumanVariations[0]);

  var testStrings = fontApiParser.getFontTestStrings();
  var hanumanTestStrings = testStrings['Hanuman'];
  assertNotUndefined(hanumanTestStrings);
  assertEquals(webfont.FontApiParser.INT_FONTS['Hanuman'],
      hanumanTestStrings);
};


FontApiParserTest.prototype.testHanumanIsForwardCompatible = function() {
  var fontFamilies = [ 'Hanuman::khmer' ];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();

  var parsedFontFamilies = fontApiParser.getFontFamilies();
  assertEquals(1, parsedFontFamilies.length);
  assertEquals('Hanuman', parsedFontFamilies[0]);

  var variations = fontApiParser.getVariations();
  var hanumanVariations = variations['Hanuman'];
  assertEquals(1, hanumanVariations.length);
  assertEquals('n4', hanumanVariations[0]);

  var testStrings = fontApiParser.getFontTestStrings();
  var hanumanTestStrings = testStrings['Hanuman'];
  assertNotUndefined(hanumanTestStrings);
  assertEquals(webfont.FontApiParser.INT_FONTS['khmer'],
      hanumanTestStrings);
};

FontApiParserTest.prototype.testPlusReplacedWithSpace = function() {
  var fontFamilies = [ 'Erica+One', 'Droid+Serif::latin',
      'Yanone+Kaffeesatz:400,700:latin'];
  var fontApiParser = new webfont.FontApiParser(fontFamilies);

  fontApiParser.parse();
  var parsedFontFamilies = fontApiParser.getFontFamilies();

  assertEquals(3, parsedFontFamilies.length);
  assertEquals('Erica One', parsedFontFamilies[0]);
  assertEquals('Droid Serif', parsedFontFamilies[1]);
  assertEquals('Yanone Kaffeesatz', parsedFontFamilies[2]);
  var variations = fontApiParser.getVariations();

  var ericaOne = variations['Erica One'];
  assertNotNull(ericaOne);
  assertEquals(1, ericaOne.length);
  assertEquals('n4', ericaOne[0]);

  var droidSerif = variations['Droid Serif'];
  assertNotNull(droidSerif);
  assertEquals(1, droidSerif.length);
  assertEquals('n4', droidSerif[0]);

  var yanoneKaffeesatz = variations['Yanone Kaffeesatz'];
  assertNotNull(yanoneKaffeesatz);
  assertEquals(2, yanoneKaffeesatz.length);
  assertEquals('n4', yanoneKaffeesatz[0]);
  assertEquals('n7', yanoneKaffeesatz[1]);
};