// Copyright 2014 Thomas Müller // This file is part of HMMLA, which is licensed under GPLv3. package hmmla.test; import static org.junit.Assert.*; import hmmla.io.PosFileOptions; import hmmla.io.PosReader; import hmmla.io.PosWriter; import hmmla.io.Sentence; import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.junit.Test; public class PosIoTest { private static String writeSentencesToFile(Iterable<Sentence> sentences) { File file; try { file = File.createTempFile("sentences", ".txt"); } catch (IOException e) { throw new RuntimeException(e); } PosWriter writer = new PosWriter(file.getAbsolutePath()); writer.write(sentences); writer.close(); return file.getAbsolutePath(); } private List<Sentence> readSentencesFromFile(String option_string) { List<Sentence> sentences = new LinkedList<Sentence>(); PosReader reader = new PosReader(option_string); for (Sentence sentence : reader) { sentences.add(sentence); } return sentences; } @Test public void testReaderBoundaryChecks() { List<Sentence> expected = new LinkedList<Sentence>(); expected.add(new Sentence("Das_d ist_v mein_d Testsatz_n ._p")); String file_name = writeSentencesToFile(expected); List<Sentence> actual = readSentencesFromFile("form-index=1,tag-index=2," + file_name); assertEquals(expected, actual); try { actual = readSentencesFromFile("form-index=5,tag-index=2," + file_name); fail(); }catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "form_index"); } try { actual = readSentencesFromFile("form-index=-1,tag-index=2," + file_name); fail(); }catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "form_index"); } try { actual = readSentencesFromFile("form-index=1,tag-index=10," + file_name); fail(); }catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "tag_index"); } expected.clear(); expected.add(new Sentence("0 1 2 3 4")); actual = readSentencesFromFile("form-index=0,tag-index=-1," + file_name); assertEquals(expected, actual); expected.clear(); expected.add(new Sentence("Das ist mein Testsatz .")); actual = readSentencesFromFile("form-index=1,tag-index=-1," + file_name); assertEquals(expected, actual); } @Test public void testOptions() { PosFileOptions options; options = new PosFileOptions("form-index=1,filename"); assertEquals(options.getFormIndex(), 1); assertEquals(options.getTagIndex(), -1); assertEquals(options.getLimit(), -1); assertEquals(options.getFilename(), "filename"); try { options = new PosFileOptions("form-index=1,form-index,filename"); fail(); } catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "filename"); } try { options = new PosFileOptions("form-index=1,form-index=2,filename"); fail(); } catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "form-index"); } try { options = new PosFileOptions(""); fail(); } catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "no filename"); } try { options = new PosFileOptions("file=name"); fail(); } catch (RuntimeException e) { assertEquals(e.getCause().getMessage(), "option"); } } }