package com.gmail.dpierron.calibre.datamodel;
import com.gmail.dpierron.calibre.configuration.Configuration;
import com.gmail.dpierron.calibre.configuration.ReadOnlyConfigurationInterface;
import com.gmail.dpierron.calibre.datamodel.test.TestDataModel;
import org.junit.Assert;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class DataModelTest {
@Test
public void testDataModel() {
ReadOnlyConfigurationInterface conf = new ReadOnlyConfigurationInterface() {
public File getDatabaseFolder() {
String fileName = DataModelTest.class.getResource("../metadata.db").getFile();
File file = new File(fileName).getParentFile();
System.out.println("DataModelTest.testDataModel using database folder : " + file);
return file;
}
};
Configuration.setConfiguration(conf);
new TestDataModel().testDataModel(false);
}
class FakeBook implements SplitableByLetter {
String title;
FakeBook(String title) {
this.title = title;
}
public String getTitleToSplitByLetter() {
return title;
}
}
Comparator<FakeBook> comparator = new Comparator<FakeBook>() {
public int compare(FakeBook o1, FakeBook o2) {
String s1 = (o1 == null ? "" : o1.getTitleToSplitByLetter());
String s2 = (o2 == null ? "" : o2.getTitleToSplitByLetter());
return s1.compareTo(s2);
}
};
@Test
public void testSplitByLetter() throws Exception {
int expected[] = new int[]{2, 18, 3, 12, 23};
BufferedReader r = null;
try {
r = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("russian.txt"), "utf-8"));
List<FakeBook> books = new LinkedList<FakeBook>();
List<String> lines = new LinkedList<String>();
String line;
while ((line = r.readLine()) != null) {
lines.add(line);
books.add(new FakeBook(line));
}
Map<String, List<FakeBook>> result = DataModel.splitByLetter(books, comparator);
for (int i = 0; i < 5; i++) {
String letter = lines.get(i).substring(0, 1).toUpperCase();
List<FakeBook> listOfBooksByLetter = result.get(letter);
Assert.assertEquals(expected[i], listOfBooksByLetter.size());
for (FakeBook book : listOfBooksByLetter) {
Assert.assertEquals(book.getTitleToSplitByLetter().substring(0, 1).toUpperCase(), letter);
}
}
} finally {
if (r != null)
r.close();
}
}
@Test
public void testSplit() throws Exception {
String[] names = new String[] {"Morrisson", "More", "Morris", "Maman", "Papa", "pépé"};
List<FakeBook> books = new LinkedList<FakeBook>();
for (String line : names) {
books.add(new FakeBook(line));
}
Map<String, List<FakeBook>> result = DataModel.splitByLetter(books, comparator);
Assert.assertNotNull(result);
//for (int i = 0; i < 5; i++) {
// String letter = lines.get(i).substring(0, 1).toUpperCase();
// List<FakeBook> listOfBooksByLetter = result.get(letter);
// Assert.assertEquals(expected[i], listOfBooksByLetter.size());
// for (FakeBook book : listOfBooksByLetter) {
// Assert.assertEquals(book.getTitleToSplitByLetter().substring(0, 1).toUpperCase(), letter);
// }
//}
}
}