library verify_messages;

import "print_to_list.dart";
import "package:unittest/unittest.dart";

verifyResult(ignored) {
  test("Verify message translation output", actuallyVerifyResult);
}

actuallyVerifyResult() {
  var lineIterator;
  verify(String s) {
    lineIterator.moveNext();
    var value = lineIterator.current;
    expect(value, s);
  }

  var expanded = lines.expand((line) => line.split("\n")).toList();
  lineIterator = expanded.iterator..moveNext();
  verify("Printing messages for en_US");
  verify("This is a message");
  verify("Another message with parameter hello");
  verify("Characters that need escaping, e.g slashes \\ dollars \${ "
      "(curly braces are ok) and xml reserved characters <& and "
      "quotes \" parameters 1, 2, and 3");
  verify("This string extends across multiple lines.");
  verify("1, b, [c, d]");
  verify('"So-called"');
  verify("Cette chaîne est toujours traduit");
  verify("Interpolation is tricky when it ends a sentence like this.");
  verify("This comes from a method");
  verify("This method is not a lambda");
  verify("This comes from a static method");
  verify("This is missing some translations");
  verify("Ancient Greek hangman characters: 𐅆𐅇.");
  verify("Escapable characters here: ");

  verify('Is zero plural?');
  verify('This is singular.');
  verify('This is plural (2).');
  verify('This is plural (3).');
  verify('This is plural (4).');
  verify('This is plural (5).');
  verify('This is plural (6).');
  verify('This is plural (7).');
  verify('This is plural (8).');
  verify('This is plural (9).');
  verify('This is plural (10).');
  verify('This is plural (11).');
  verify('This is plural (20).');
  verify('This is plural (100).');
  verify('This is plural (101).');
  verify('This is plural (100000).');
  verify('Alice went to her house');
  verify('Bob went to his house');
  verify('cat went to its litter box');
  verify('Alice, Bob sont allés au magasin');
  verify('Alice est allée au magasin');
  verify('Personne n\'est allé au magasin');
  verify('Bob, Bob sont allés au magasin');
  verify('Alice, Alice sont allées au magasin');
  verify('none');
  verify('one');
  verify('m');
  verify('f');
  verify('7 male');
  verify('7 Canadian dollars');
  verify('5 some currency or other.');
  verify('1 Canadian dollar');
  verify('2 Canadian dollars');
  verify('1 thing:');
  verify('2 things:');
  verify('Hello World');
  verify('Hello World');
  verify('rent');
  verify('rent');
  verify('Five cents is US\$0.05');
  verify(r"'<>{}= +-_$()&^%$#@!~`'");

  var fr_lines =
      expanded.skip(1).skipWhile((line) => !line.contains('----')).toList();
  lineIterator = fr_lines.iterator..moveNext();
  verify("Printing messages for fr");
  verify("Il s'agit d'un message");
  verify("Un autre message avec un seul paramètre hello");
  verify("Caractères qui doivent être échapper, par exemple barres \\ "
      "dollars \${ (les accolades sont ok), et xml/html réservés <& et "
      "des citations \" "
      "avec quelques paramètres ainsi 1, 2, et 3");
  verify("Cette message prend plusiers lignes.");
  verify("1, b, [c, d]");
  verify('"Soi-disant"');
  verify("Cette chaîne est toujours traduit");
  verify("L'interpolation est délicate quand elle se termine une "
      "phrase comme this.");
  verify("Cela vient d'une méthode");
  verify("Cette méthode n'est pas un lambda");
  verify("Cela vient d'une méthode statique");
  verify("Ce manque certaines traductions");
  verify("Anciens caractères grecs jeux du pendu: 𐅆𐅇.");
  verify("Escapes: ");
  verify("\r\f\b\t\v.");

  verify('Est-ce que nulle est pluriel?');
  verify('C\'est singulier');
  verify('C\'est pluriel (2).');
  verify('C\'est pluriel (3).');
  verify('C\'est pluriel (4).');
  verify('C\'est pluriel (5).');
  verify('C\'est pluriel (6).');
  verify('C\'est pluriel (7).');
  verify('C\'est pluriel (8).');
  verify('C\'est pluriel (9).');
  verify('C\'est pluriel (10).');
  verify('C\'est pluriel (11).');
  verify('C\'est pluriel (20).');
  verify('C\'est pluriel (100).');
  verify('C\'est pluriel (101).');
  verify('C\'est pluriel (100000).');
  verify('Alice est allée à sa house');
  verify('Bob est allé à sa house');
  verify('cat est allé à sa litter box');
  verify('Alice, Bob étaient allés à la magasin');
  verify('Alice était allée à la magasin');
  verify('Personne n\'avait allé à la magasin');
  verify('Bob, Bob étaient allés à la magasin');
  verify('Alice, Alice étaient allées à la magasin');
  verify('rien');
  verify('un');
  verify('homme');
  verify('femme');
  verify('7 homme');
  verify('7 dollars Canadiens');
  verify('5 certaine devise ou autre.');
  verify('1 dollar Canadien');
  verify('2 dollars Canadiens');
  verify('1 chose:');
  verify('2 choses:');
  verify('Bonjour tout le monde');
  verify('Bonjour tout le monde');
  verify('louer');
  verify('loyer');
  // Using a non-French format for the currency to test interpolation.
  verify('Cinq sous est US\$0.05');
  verify(r"interessant (fr): '<>{}= +-_$()&^%$#@!~`'");

  var de_lines =
      fr_lines.skip(1).skipWhile((line) => !line.contains('----')).toList();
  lineIterator = de_lines.iterator..moveNext();
  verify("Printing messages for de_DE");
  verify("Dies ist eine Nachricht");
  verify("Eine weitere Meldung mit dem Parameter hello");
  verify("Zeichen, die Flucht benötigen, zB Schrägstriche \\ Dollar "
      "\${ (geschweiften Klammern sind ok) und xml reservierte Zeichen <& und "
      "Zitate \" Parameter 1, 2 und 3");
  verify("Dieser String erstreckt sich über mehrere "
      "Zeilen erstrecken.");
  verify("1, b, [c, d]");
  verify('"Sogenannt"');
  // This is correct, the message is forced to French, even in a German locale.
  verify("Cette chaîne est toujours traduit");
  verify(
      "Interpolation ist schwierig, wenn es einen Satz wie dieser endet this.");
  verify("Dies ergibt sich aus einer Methode");
  verify("Diese Methode ist nicht eine Lambda");
  verify("Dies ergibt sich aus einer statischen Methode");
  verify("This is missing some translations");
  verify("Antike griechische Galgenmännchen Zeichen: 𐅆𐅇");
  verify("Escapes: ");
  verify("\r\f\b\t\v.");

  verify('Ist Null Plural?');
  verify('Dies ist einmalig');
  verify('Dies ist Plural (2).');
  verify('Dies ist Plural (3).');
  verify('Dies ist Plural (4).');
  verify('Dies ist Plural (5).');
  verify('Dies ist Plural (6).');
  verify('Dies ist Plural (7).');
  verify('Dies ist Plural (8).');
  verify('Dies ist Plural (9).');
  verify('Dies ist Plural (10).');
  verify('Dies ist Plural (11).');
  verify('Dies ist Plural (20).');
  verify('Dies ist Plural (100).');
  verify('Dies ist Plural (101).');
  verify('Dies ist Plural (100000).');
  verify('Alice ging zu ihrem house');
  verify('Bob ging zu seinem house');
  verify('cat ging zu seinem litter box');
  verify('Alice, Bob gingen zum magasin');
  verify('Alice ging in dem magasin');
  verify('Niemand ging zu magasin');
  verify('Bob, Bob gingen zum magasin');
  verify('Alice, Alice gingen zum magasin');
  verify('Null');
  verify('ein');
  verify('Mann');
  verify('Frau');
  verify('7 Mann');
  verify('7 Kanadischen dollar');
  verify('5 einige Währung oder anderen.');
  verify('1 Kanadischer dollar');
  verify('2 Kanadischen dollar');
  verify('eins:');
  verify('2 Dinge:');
  verify('Hallo Welt');
  verify('Hallo Welt');
  verify('mieten');
  verify('Miete');
  verify('Fünf Cent US \$ 0.05');
  verify(r"interessant (de): '<>{}= +-_$()&^%$#@!~`'");
}
