package org.languagetool.tokenizers.es;

/* LanguageTool, a natural language style checker
 * Copyright (C) 2005 Daniel Naber (http://www.danielnaber.de)
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
 * USA
 */


import org.junit.Test;
import org.languagetool.TestTools;
import org.languagetool.language.Spanish;
import org.languagetool.tokenizers.SRXSentenceTokenizer;
import org.languagetool.tokenizers.SentenceTokenizer;

public class SpanishSentenceTokenizerTest {

  private final SentenceTokenizer stokenizer = new SRXSentenceTokenizer(new Spanish());

  @Test
  public final void testTokenize() {
    
    // Simple sentences
    testSplit("Esto es una frase. ", "Esto es otra frase.");
    testSplit("Esto es una frase.[34] ", "Esto es otra frase.");
    testSplit("¿Nos vamos? ", "Hay que irse.");
    testSplit("¿Vamos? ", "Hay que irse.");
    testSplit("¡Corre! ", "Hay que irse.");
    
    // Ellipsis
    testSplit("Entonces... apareció él.");
    testSplit("Entonces… apareció él.");
    testSplit("Entoncess… ", "Apareció él.");
    testSplit("«El tal del tal…» sale de aquí");
    testSplit("invitarle –cuando sea–… a tomar café.");
    
    // Initials
    testSplit("A la atención de A. Comes.");
    testSplit("A la atenció de À. Comes.");
    testSplit("Núm. operación 220130000138.");
    testSplit("N. operación 220130000138.");
    testSplit("N.º operación 220130000138.");  

    // Abbreviations
    testSplit("las Sras. diputadas");
    testSplit("No Mr. Spock sino otro.");
    testSplit("Ver el cap. 24 del libro.");
    testSplit("Ver el cap. IX del libro.");
    testSplit("Vive en el núm. 24 de la calle.");
    testSplit("El Dr. Joan no vendrá.");
    testSplit("Distingguido Sr. Juan,");
    testSplit("Muy Hble. Sr. Presidente");
    testSplit("de San Nicolás (del s. XII; coro gótico del s. XIV) y de San Mateo.");
    testSplit("fue el 5o. clasificado.");
    testSplit("Fue el 5º. ", "Y el otro el 4º.");
    testSplit("Art. 2.1: Estarán obligados...");
    testSplit("Hasta las pp. 50-52.");
    testSplit("Hasta las pp. XI-XII.");
    testSplit("y es del vol. 3 de la colección");
    testSplit("En EE.UU.");
    testSplit("En EE. UU. por los DD. HH. después de los JJ. OO.");
    testSplit("En U.S.A. años 30.");
    testSplit("En U. S. A. años 30.");
    testSplit("P. ej. esto.");
    testSplit("Ahora p. ej. esto.");
    testSplit("Ahora p. e. esto.");
    testSplit("Son las 5hrs. del domingo.");
    testSplit("Son las 2as. jornadas.");
    testSplit("En EE.UU. esto no pasa.");
    testSplit("En EE. UU. esto no pasa.");
    testSplit("Me voy a EE. UU. ", "Buen viaje.");
    testSplit("Uno (ca. 2010), dos (c. 2011), tres (ca. XIX), cuatro (c. XX)");
    testSplit("Ayto. de Madrid.");
    testSplit("¿Quién sabe hablar francés mejor: Tom o Mary?");
    testSplit("Hola, Albert: ", "Me puedes decir tu correo?");

    // Exception to abbreviations    
    testSplit("Esto pasa el PP. ", "Pero, por otra parte,");
    testSplit("Cebolla, ajo, calabaza, etc. ", "Compramos en fruitería.");
    // Units
    testSplit("1 500 m/s. ", "Nacen en");
    testSplit("Son de 1 g. ", "Han sido acondicionadas.");
    testSplit("Son de 1 m. ", "Han sido acondicionadas.");
    testSplit("Vivían 50 h. ", "Después el pueblo creció.");
    testSplit("El acto será a las 15.30 h. de la tarde.");
    
    //Error: missing space. It is not split in order to trigger other errors. 
    testSplit("cuando G.Oueddei se convierte en líder");
    testSplit("el jesuita alemany J.E. Nithard");
  }

  private void testSplit(final String... sentences) {
    TestTools.testSplit(sentences, stokenizer);
  }

}
