/* TODO:on fait qqch: Let's eat? */
  public void _test_on_mangera() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();
    phrases.add(new PicWordAction("on", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("manger", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("future", Pic2NLG.ActionType.TENSE_PRESENT));

    assertEquals("On mangera", converter.convertPhrasesToNLG(phrases));
  }
  /* object not specified directly */
  public void test_tu_es_joli() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();
    phrases.add(new PicWordAction("you", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("be", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("beautiful", Pic2NLG.ActionType.ADJECTIVE));

    assertEquals("You are beautiful", converter.convertPhrasesToNLG(phrases));
  }
  public void test_remercier_de_explicit() {
    ArrayList<PicWordAction> phrases = get_text_je_veux_vous_remercier(true);

    // TODO: after second noun the context is object!
    // TODO: phrases.add(new PicWordAction("plural",
    // Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals("I want to thank you for everything", converter.convertPhrasesToNLG(phrases));
  }
  /* tests simple negation */
  public void test_nous_voulons_manger_negated() {
    ArrayList<PicWordAction> phrases = text_je_veux_manger();

    phrases.set(0, new PicWordAction("We", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("true", Pic2NLG.ActionType.NEGATED));

    assertEquals("We do not want to eat", converter.convertPhrasesToNLG(phrases));
  }
  /* object not specified directly */
  public void ntest_il_court_tres_viteadverb_phrase() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();
    phrases.add(new PicWordAction("he", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("run", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("very", Pic2NLG.ActionType.ADVERB));
    phrases.add(new PicWordAction("quickly", Pic2NLG.ActionType.ADVERB));

    assertEquals("He runs very quickly", converter.convertPhrasesToNLG(phrases));
  }
  /* object not specified directly */
  public void _NOT_IMPORTANT_test_il_court_tres_tres_viteadverb_phrase() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();
    phrases.add(new PicWordAction("il", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("courir", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("très", Pic2NLG.ActionType.ADVERB));
    phrases.add(new PicWordAction("très", Pic2NLG.ActionType.ADVERB));

    phrases.add(new PicWordAction("vite", Pic2NLG.ActionType.ADVERB));

    assertEquals("Il court très très vite", converter.convertPhrasesToNLG(phrases));
  }
  /*
   * TODO: Let's go to sleep. reflexive verbs -- use of reflexive verb +
   * future proche
   */
  public void _test_lets_go_to_sleep() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();
    phrases.add(new PicWordAction("on", Pic2NLG.ActionType.NOUN));

    NLGElement se_coucher = Pic2NLG.factory.createNLGElement("coucher");
    se_coucher.setFeature(LexicalFeature.REFLEXIVE, true);

    phrases.add(new PicWordAction(se_coucher, Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("futur_proche", Pic2NLG.ActionType.TENSE_PRESENT));

    assertEquals("On va se coucher", converter.convertPhrasesToNLG(phrases));
  }
  public void _test_je_veux_manger_negated_de_object() {
    ArrayList<PicWordAction> phrases = text_je_veux_manger();
    phrases.add(new PicWordAction("true", Pic2NLG.ActionType.NEGATED));
    // TODO: this is not grammatically correct in case of manger

    NPPhraseSpec noun = Pic2NLG.factory.createNounPhrase("soupe");
    // TODO: try to determine the determiner automatically
    noun.setDeterminer("de");
    phrases.add(new PicWordAction(noun, Pic2NLG.ActionType.NOUN));
    // TODO: after second noun the context is object!
    // TODO: phrases.add(new PicWordAction("plural",
    // Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals("Je ne veux pas manger de soupe", converter.convertPhrasesToNLG(phrases));
  }
  /* tests simple negation */
  public void test_nous_voulons_manger_multi_objects() {
    ArrayList<PicWordAction> phrases = text_je_veux_manger();

    phrases.set(0, new PicWordAction("We", Pic2NLG.ActionType.NOUN));

    phrases.add(new PicWordAction("potatoes", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("fish", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("cabage", Pic2NLG.ActionType.NOUN));

    phrases.add(new PicWordAction("carrots", Pic2NLG.ActionType.NOUN));

    // some, '', or the
    assertEquals("We want to eat potatoes, fish, carrots", converter.convertPhrasesToNLG(phrases));
  }
  /*
   * determinants - un, une, le, la, les TODO: note! the gender matters only
   * on the Noun not it's specifier! e.g. one may feed le chatte --> will be
   * fixed --> la chatte
   */
  public void test_le_chat_determinants() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();

    phrases.add(
        new PicWordAction(Pic2NLG.factory.createNounPhrase("the", "cat"), Pic2NLG.ActionType.NOUN));

    VPPhraseSpec verb = Pic2NLG.factory.createVerbPhrase("sleep");
    // verb.setFeature(LexicalFeature.REFLEXIVE, true);

    phrases.add(new PicWordAction(verb, Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("futur_proche", Pic2NLG.ActionType.TENSE_PRESENT));

    assertEquals("The cat goes to sleep", converter.convertPhrasesToNLG(phrases));
  }
  /**
   * Plural test + [ default prep? De ] bonbons
   *
   * <p>Default prepositions may be: manger - de; aller - a; DE:
   * http://french.about.com/library/prepositions/bl_prep_de_verb.htm TODO: A + Verb Inf:
   * http://french.about.com/library/prepositions/bl_prep_a_verb.htm TODO: A + Indirect Object:
   * http://french.about.com/library/prepositions/bl_prep_a_verb2.htm etc
   *
   * <p>TODO: can we figure out default preposition and what if more probable to have a plural or
   * singular for a certain phrase? I'm afraid that involves complex semantic decisions... see
   * grammar check tools!
   */
  public void _test_je_veux_manger_negated_de_object_plural() {
    ArrayList<PicWordAction> phrases = text_je_veux_manger();
    phrases.add(new PicWordAction("true", Pic2NLG.ActionType.NEGATED));

    NPPhraseSpec noun = Pic2NLG.factory.createNounPhrase("bonbon");
    noun.setPlural(true);
    // TODO: try to determine the determiner automatically
    noun.setDeterminer("de");

    phrases.add(new PicWordAction(noun, Pic2NLG.ActionType.NOUN));

    // TODO: after second noun the context is the object!
    phrases.add(new PicWordAction("plural", Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals("Je ne veux pas manger de bonbons", converter.convertPhrasesToNLG(phrases));
  }
  public void test_on_va_partir_de_Nice_de_NounIndObj_auto() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();

    phrases.add(new PicWordAction("we", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("leave", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("futur_proche", Pic2NLG.ActionType.TENSE_PRESENT));

    NPPhraseSpec noun = Pic2NLG.factory.createNounPhrase("Nice");
    // TODO: try to determine the determiner automatically
    // noun.setDeterminer("de");
    phrases.add(new PicWordAction(noun, Pic2NLG.ActionType.NOUN));
    // TODO: after second noun the context is object!
    // TODO: phrases.add(new PicWordAction("plural",
    // Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals("We are going to leave Nice", converter.convertPhrasesToNLG(phrases));
  }
  public void test_je_veux_manger_a_automatically() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();

    phrases.add(new PicWordAction("I", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("live", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("futur_proche", Pic2NLG.ActionType.TENSE_PRESENT));

    NPPhraseSpec noun = Pic2NLG.factory.createNounPhrase("Paris");
    // TODO: try to determine the determiner automatically
    // noun.setDeterminer("a");
    phrases.add(new PicWordAction(noun, Pic2NLG.ActionType.NOUN));
    // TODO: after second noun the context is object!
    // TODO: phrases.add(new PicWordAction("plural",
    // Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals("I am going to live in Paris", converter.convertPhrasesToNLG(phrases));
  }
  /** Test the genders of multi-gender words, like chanteuse */
  public void _test_je_veux_etre_chanteuse_gender() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();
    // je avoir [past] assez bonbon [plural] ==> j'ai eu assez des bonbons
    phrases.add(new PicWordAction("je", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("vouloir", Pic2NLG.ActionType.VERB));

    // phrases.add(new PicWordAction("past", Pic2NLG.wordTYPE.TENSE));
    phrases.add(new PicWordAction("etre", Pic2NLG.ActionType.VERB));

    NLGElement chanteuse = Pic2NLG.factory.createNounPhrase("un", "chanteur");
    chanteuse.setFeature(LexicalFeature.GENDER, Gender.FEMININE);

    System.out.println(chanteuse);
    phrases.add(new PicWordAction(chanteuse, Pic2NLG.ActionType.NOUN));

    // TODO: phrases.add(new PicWordAction("plural",
    // Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals("Je veux etre une chanteuse", converter.convertPhrasesToNLG(phrases));
  }
  /**
   * Verbs with: de + verb infinitive, e.g. continuer de faire qqch Indirect object which is action.
   *
   * <p>so we have: [subject + modal+ verb [ de + [ verb + object ] ] ]
   *
   * <p>TODO: futur proche do not work, if a specific modal has already been selected -- double
   * modal.
   */
  public void NOT_IMPORTANT_test_on_va_continuer_de_manger_les_crepes_de_VerbInfin_auto() {
    ArrayList<PicWordAction> phrases = new ArrayList<PicWordAction>();

    phrases.add(new PicWordAction("we", Pic2NLG.ActionType.NOUN));
    phrases.add(new PicWordAction("continuer", Pic2NLG.ActionType.VERB));
    phrases.add(new PicWordAction("eat", Pic2NLG.ActionType.VERB));

    phrases.add(new PicWordAction("futur_proche", Pic2NLG.ActionType.TENSE_PRESENT));

    NPPhraseSpec noun = Pic2NLG.factory.createNounPhrase("pancake");
    noun.setPlural(true);
    // TODO: try to determine the determiner automatically
    // noun.setDeterminer("de");
    phrases.add(new PicWordAction(noun, Pic2NLG.ActionType.NOUN));
    // TODO: after second noun the context is object!
    // TODO: phrases.add(new PicWordAction("plural",
    // Pic2NLG.ActionType.NUMBER_AGREEMENT));
    assertEquals(
        "We are going to continue eating pancakes", converter.convertPhrasesToNLG(phrases));
  }
  public void test_jai_eu_assez_de_bonbons_adjective() {
    ArrayList<PicWordAction> phrases = text_jai_eu_assez_de_bonbons(false);
    phrases.add(new PicWordAction("delitious", Pic2NLG.ActionType.ADJECTIVE));

    assertEquals("I had enough of delitious candies", converter.convertPhrasesToNLG(phrases));
  }
 public void test_jai_eu_assez_de_bonbons_explicit_de() {
   assertEquals(
       "I had enough candies", converter.convertPhrasesToNLG(text_jai_eu_assez_de_bonbons(true)));
 }
 /* a simple phrase with a modal: vouloir, pouvoir, devoir, etc */
 public void test_je_veux_manger() {
   assertEquals("I want to eat", converter.convertPhrasesToNLG(text_je_veux_manger()));
 }