/* LanguageTool, a natural language style checker
* Copyright (C) 2013 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.dev.wikipedia.atom;
import org.junit.Ignore;
import org.junit.Test;
import org.languagetool.language.English;
import org.languagetool.language.German;
import org.languagetool.tools.Tools;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class AtomFeedCheckerTest {
private static final String DB_URL = "jdbc:derby:atomFeedChecksDB;create=true";
@Ignore("Interactive use only - for testing the 'recent changes' XML we get from the API")
@Test
public void testCheckManually() throws IOException {
AtomFeedChecker atomFeedChecker = new AtomFeedChecker(new English());
CheckResult checkResult = atomFeedChecker.checkChanges(new FileInputStream("/home/dnaber/wiki.xml"));
List<ChangeAnalysis> changeAnalysisList = checkResult.getCheckResults();
for (ChangeAnalysis changeAnalysis : changeAnalysisList) {
System.out.println(changeAnalysis.getTitle());
for (WikipediaRuleMatch match : changeAnalysis.getRemovedMatches()) {
System.out.println(" [-] " + match);
}
for (WikipediaRuleMatch match : changeAnalysis.getAddedMatches()) {
System.out.println(" [+] " + match);
}
System.out.println("----------------------");
}
}
@Test
public void testCheck() throws IOException {
AtomFeedChecker atomFeedChecker = new AtomFeedChecker(new German());
CheckResult checkResult = atomFeedChecker.checkChanges(getStream());
List<ChangeAnalysis> changeAnalysis = checkResult.getCheckResults();
assertThat(changeAnalysis.size(), is(3));
assertThat(changeAnalysis.get(0).getAddedMatches().size(), is(1));
assertThat(changeAnalysis.get(0).getAddedMatches().get(0).getRule().getId(), is("DE_AGREEMENT"));
assertTrue(changeAnalysis.get(0).getAddedMatches().get(0).getErrorContext().contains("Fehler: <err>der Haus</err>"));
assertThat(changeAnalysis.get(0).getRemovedMatches().size(), is(0));
assertThat(changeAnalysis.get(1).getAddedMatches().size(), is(0));
assertThat(changeAnalysis.get(1).getRemovedMatches().size(), is(0));
assertThat(changeAnalysis.get(2).getAddedMatches().size(), is(0));
assertThat(changeAnalysis.get(2).getRemovedMatches().size(), is(0));
CheckResult checkResult2 = atomFeedChecker.checkChanges(getStream());
List<ChangeAnalysis> changeAnalysis2 = checkResult2.getCheckResults();
assertThat(changeAnalysis2.size(), is(3)); // not skipped because no database is used
}
@Test
public void testCheckToDatabase() throws IOException, SQLException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
initDatabase();
DatabaseConfig databaseConfig = new DatabaseConfig(DB_URL, "user", "pass");
AtomFeedChecker atomFeedChecker1 = new AtomFeedChecker(new German(), databaseConfig);
CheckResult checkResult = atomFeedChecker1.runCheck(getStream());
List<ChangeAnalysis> changeAnalysis = checkResult.getCheckResults();
assertThat(changeAnalysis.size(), is(3));
assertThat(changeAnalysis.get(0).getAddedMatches().size(), is(1));
assertThat(changeAnalysis.get(0).getAddedMatches().get(0).getRule().getId(), is("DE_AGREEMENT"));
assertTrue(changeAnalysis.get(0).getAddedMatches().get(0).getErrorContext().contains("Fehler: <err>der Haus</err>"));
assertThat(changeAnalysis.get(0).getRemovedMatches().size(), is(0));
assertThat(changeAnalysis.get(1).getAddedMatches().size(), is(0));
assertThat(changeAnalysis.get(1).getRemovedMatches().size(), is(0));
assertThat(changeAnalysis.get(2).getAddedMatches().size(), is(0));
assertThat(changeAnalysis.get(2).getRemovedMatches().size(), is(0));
Date latestCheckDate1 = atomFeedChecker1.getDatabase().getCheckDates().get("de");
assertThat(dateFormat.format(latestCheckDate1), is("2013-12-03 10:48"));
AtomFeedChecker atomFeedChecker2 = new AtomFeedChecker(new German(), databaseConfig);
CheckResult checkResult2 = atomFeedChecker2.runCheck(getStream());
List<ChangeAnalysis> changeAnalysis2 = checkResult2.getCheckResults();
// All articles could be skipped as they have been checked in the previous run:
assertThat(changeAnalysis2.size(), is(0));
assertThat(atomFeedChecker2.getDatabase().getCheckDates().size(), is(1));
Date latestCheckDate2 = atomFeedChecker2.getDatabase().getCheckDates().get("de");
assertThat(dateFormat.format(latestCheckDate2), is("2013-12-03 10:48"));
}
private void initDatabase() throws SQLException {
MatchDatabase database = new MatchDatabase(DB_URL, "user", "pass");
database.dropTables();
database.createTables();
}
private InputStream getStream() throws IOException {
return Tools.getStream("/org/languagetool/dev/wikipedia/atom/feed1.xml");
}
}