/* LanguageTool, a natural language style checker
 * Copyright (C) 2006 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
 */
package org.languagetool.tokenizers.nl;

import org.junit.Test;
import org.languagetool.TestTools;
import org.languagetool.language.Dutch;
import org.languagetool.tokenizers.SRXSentenceTokenizer;

/**
 * @author Daniel Naber
 * @author Adapted by R. Baars for Dutch
 * @author Pander OpenTaal added examples from Wikipedia and Taaladvies
 */
public class DutchSRXSentenceTokenizerTest {

  private final SRXSentenceTokenizer stokenizer = new SRXSentenceTokenizer(new Dutch());

  @Test
  public void testTokenize() {
    // NOTE: sentences here need to end with a space character so they
    // have correct whitespace when appended:
    testSplit("Dit is een zin.");
    testSplit("Dit is een zin. ", "Nog een.");
    testSplit("Een zin! ", "Nog een.");
    testSplit("Een zin... ", "Nog een.");
    testSplit("Op http://www.test.de vind je een website.");
    testSplit("De brief is op 3-10 gedateerd.");
    testSplit("De brief is op 31-1 gedateerd.");
    testSplit("De breif is op 3-10-2000 gedateerd.");

    testSplit("Vandaag is het 13-12-2004.");
    testSplit("Op 24.09 begint het.");
    testSplit("Om 17:00 begint het.");
    testSplit("In paragraaf 3.9.1 is dat beschreven.");

    testSplit("Januari jl. is dat vastgelegd.");
    testSplit("Appel en pruimen enz. werden gekocht.");
    testSplit("De afkorting n.v.t. betekent niet van toepassing.");

    testSplit("Bla et al. blah blah.");

    testSplit("Dat is,, of het is bla.");
    testSplit("Dat is het.. ", "Zo gaat het verder.");

    testSplit("Dit hier is een(!) zin.");
    testSplit("Dit hier is een(!!) zin.");
    testSplit("Dit hier is een(?) zin.");
    testSplit("Dit hier is een(???) zin.");
    testSplit("Dit hier is een(???) zin.");

    testSplit("Als voetballer wordt hij nooit een prof. ", "Maar prof. N.A.W. Th.Ch. Janssen wordt dat wel.");

    // TODO, zin na dubbele punt
    testSplit("Dat was het: helemaal niets.");
    testSplit("Dat was het: het is een nieuwe zin.");

    // https://nl.wikipedia.org/wiki/Aanhalingsteken
    testSplit("Jan zei: \"Hallo.\"");
    testSplit("Jan zei: “Hallo.”");
    testSplit("„Hallo,” zei Jan, „waar ga je naartoe?”");
    testSplit("„Gisteren”, zei Jan, „was het veel beter weer.”");
    testSplit("Jan zei: „Annette zei ‚Hallo’.”");
    testSplit("Jan zei: “Annette zei ‘Hallo’.”");
    testSplit("Jan zei: «Annette zei ‹Hallo›.»");
    testSplit("Wegens zijn „ziekte” hoefde hij niet te werken.");
    testSplit("de letter „a”");
    testSplit("het woord „beta” is afkomstig van ...");

    // http://taaladvies.net/taal/advies/vraag/11
    testSplit("De voorzitter zei: 'Ik zie hier geen been in.'");
    testSplit("De voorzitter zei: \"Ik zie hier geen been in.\"");
    testSplit("De koning zei: \"Ik herinner me nog dat iemand 'Vive la république' riep tijdens mijn eedaflegging.\"");
    testSplit("De koning zei: 'Ik herinner me nog dat iemand \"Vive la république\" riep tijdens mijn eedaflegging.'");
    testSplit("De koning zei: 'Ik herinner me nog dat iemand 'Vive la république' riep tijdens mijn eedaflegging.'");
    testSplit("Otto dacht: wat een nare verhalen hoor je toch tegenwoordig.");

    // http://taaladvies.net/taal/advies/vraag/871
    testSplit("'Ik vrees', zei Rob, 'dat de brug zal instorten.'");
    testSplit("'Ieder land', aldus minister Powell, 'moet rekenschap afleggen over de wijze waarop het zijn burgers behandelt.'");
    testSplit("'Zeg Rob,' vroeg Jolanda, 'denk jij dat de brug zal instorten?'");
    testSplit("'Deze man heeft er niets mee te maken,' aldus korpschef Jan de Vries, 'maar hij heeft momenteel geen leven.'");
    testSplit("'Ik vrees,' zei Rob, 'dat de brug zal instorten.'");
    testSplit("'Ieder land,' aldus minister Powell, 'moet rekenschap afleggen over de wijze waarop het zijn burgers behandelt.'");
    testSplit("'Zeg Rob,' vroeg Jolanda, 'denk jij dat de brug zal instorten?'");
    testSplit("'Deze man heeft er niets mee te maken,' aldus korpschef Jan de Vries, 'maar hij heeft momenteel geen leven.'");

    // http://taaladvies.net/taal/advies/vraag/872
    testSplit("Zij antwoordde: 'Ik denk niet dat ik nog langer met je om wil gaan.'");
    testSplit("Zij fluisterde iets van 'eeuwig trouw' en 'altijd blijven houden van'.");
    testSplit("'Heb je dat boek al gelezen?', vroeg hij.");
    testSplit("De auteur vermeldt: 'Deze opvatting van het vorstendom heeft lang doorgewerkt.'");

    // http://taaladvies.net/taal/advies/vraag/1557
    testSplit("'Gaat u zitten', zei zij. ", "'De dokter komt zo.'");
    testSplit("'Mijn broer woont ook in Den Haag', vertelde ze. ", "'Hij woont al een paar jaar samen.'");
    testSplit("'Je bent grappig', zei ze. ", "'Echt, ik vind je grappig.'");
    testSplit("'Is Jan thuis?', vroeg Piet. ", "'Ik wil hem wat vragen.'");
    testSplit("'Ik denk er niet over!', riep ze. ", "'Dat gaat echt te ver, hoor!'");
    testSplit("'Ik vermoed', zei Piet, 'dat Jan al wel thuis is.'");
  }

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

}
