package org.ebookdroid.common.settings.books; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import org.ebookdroid.common.settings.types.DocumentViewMode; import org.ebookdroid.common.settings.types.PageAlign; import org.ebookdroid.common.settings.types.RotationType; import org.ebookdroid.core.PageIndex; import org.ebookdroid.core.curl.PageAnimationType; import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.List; import java.util.Map; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; @RunWith(AndroidJUnit4.class) public class DBSettingsManagerMigrationTest { private static final String BOOK_FILENAME = "testfilename.pdf"; private static final String BOOK2_FILENAME = "testfilename2.pdf"; private static final String BOOK_TYPE_SPECIFIC_JSON = "{\"foo\":\"bar\"}"; private static final String BOOK2_TYPE_SPECIFIC_JSON = "{\"foo\":\"baz\"}"; private static List<Bookmark> createBook1Bookmarks() { ArrayList<Bookmark> bookmarks = new ArrayList<>(); bookmarks.add(new Bookmark("bookmark", new PageIndex(12, 34), 5.0f, 10.0f)); bookmarks.add(new Bookmark("bookmark2", new PageIndex(12, 34), 5.0f, 10.0f)); return bookmarks; } private static BookSettings createBook1() { BookSettings bs = new BookSettings(BOOK_FILENAME); bs.lastUpdated = 123L; bs.firstPageOffset = 2; bs.currentPage = PageIndex.LAST; bs.zoom = 55; bs.splitPages = true; bs.splitRTL = true; bs.rotation = RotationType.AUTOMATIC; bs.viewMode = DocumentViewMode.HORIZONTAL_SCROLL; bs.pageAlign = PageAlign.HEIGHT; bs.animationType = PageAnimationType.CURLER; bs.bookmarks.addAll(createBook1Bookmarks()); bs.cropPages = true; bs.offsetX = 4.5f; bs.offsetY = -1.5f; bs.nightMode = true; bs.positiveImagesInNightMode = true; bs.contrast = 20; bs.gamma = 15; bs.exposure = 10; bs.autoLevels = true; bs.typeSpecific = TestUtils.parseJSON(BOOK_TYPE_SPECIFIC_JSON); return bs; } private static void checkBook1(BookSettings bs) { assertThat(bs, is(notNullValue())); assertThat(bs.persistent, is(true)); assertThat(bs.lastChanged, is(0L)); assertThat(bs.fileName, is(BOOK_FILENAME)); assertThat(bs.lastUpdated, is(123L)); assertThat(bs.firstPageOffset, is(2)); assertThat(bs.currentPage, is(PageIndex.LAST)); assertThat(bs.zoom, is(55)); assertThat(bs.splitPages, is(true)); assertThat(bs.splitRTL, is(true)); assertThat(bs.rotation, is(RotationType.AUTOMATIC)); assertThat(bs.viewMode, is(DocumentViewMode.HORIZONTAL_SCROLL)); assertThat(bs.pageAlign, is(PageAlign.HEIGHT)); assertThat(bs.animationType, is(PageAnimationType.CURLER)); assertThat(bs.bookmarks, is(createBook1Bookmarks())); assertThat(bs.cropPages, is(true)); assertThat(bs.offsetX, is(4.5f)); assertThat(bs.offsetY, is(-1.5f)); assertThat(bs.nightMode, is(true)); assertThat(bs.positiveImagesInNightMode, is(true)); assertThat(bs.contrast, is(20)); assertThat(bs.gamma, is(15)); assertThat(bs.exposure, is(10)); assertThat(bs.autoLevels, is(true)); assertThat(bs.typeSpecific.toString(), is(BOOK_TYPE_SPECIFIC_JSON)); } private static List<Bookmark> createBook2Bookmarks() { ArrayList<Bookmark> bookmarks = new ArrayList<>(); bookmarks.add(new Bookmark("bookmark3", new PageIndex(13, 35), 0.0f, 0.0f)); return bookmarks; } private static BookSettings createBook2() { BookSettings bs = new BookSettings(BOOK2_FILENAME); bs.lastUpdated = 456L; bs.firstPageOffset = 0; bs.currentPage = new PageIndex(44, 0); bs.zoom = 0; bs.splitPages = false; bs.splitRTL = false; bs.rotation = RotationType.UNSPECIFIED; bs.viewMode = DocumentViewMode.SINGLE_PAGE; bs.pageAlign = PageAlign.AUTO; bs.animationType = PageAnimationType.NONE; bs.bookmarks.addAll(createBook2Bookmarks()); bs.cropPages = false; bs.offsetX = 100.0f; bs.offsetY = 0.0f; bs.nightMode = false; bs.positiveImagesInNightMode = false; bs.contrast = 5; bs.gamma = 4; bs.exposure = 3; bs.autoLevels = false; bs.typeSpecific = TestUtils.parseJSON(BOOK2_TYPE_SPECIFIC_JSON); return bs; } private static void checkBook2(BookSettings bs) { assertThat(bs, is(notNullValue())); assertThat(bs.persistent, is(true)); assertThat(bs.lastChanged, is(0L)); assertThat(bs.fileName, is(BOOK2_FILENAME)); assertThat(bs.lastUpdated, is(456L)); assertThat(bs.firstPageOffset, is(0)); assertThat(bs.currentPage, is(new PageIndex(44, 0))); assertThat(bs.zoom, is(0)); assertThat(bs.splitPages, is(false)); assertThat(bs.splitRTL, is(false)); assertThat(bs.rotation, is(RotationType.UNSPECIFIED)); assertThat(bs.viewMode, is(DocumentViewMode.SINGLE_PAGE)); assertThat(bs.pageAlign, is(PageAlign.AUTO)); assertThat(bs.animationType, is(PageAnimationType.NONE)); assertThat(bs.bookmarks, is(createBook2Bookmarks())); assertThat(bs.cropPages, is(false)); assertThat(bs.offsetX, is(100f)); assertThat(bs.offsetY, is(0f)); assertThat(bs.nightMode, is(false)); assertThat(bs.positiveImagesInNightMode, is(false)); assertThat(bs.contrast, is(5)); assertThat(bs.gamma, is(4)); assertThat(bs.exposure, is(3)); assertThat(bs.autoLevels, is(false)); assertThat(bs.typeSpecific.toString(), is(BOOK2_TYPE_SPECIFIC_JSON)); } private static void setupDB(DBSettingsManager manager) { assertThat(manager.storeBookSettings(createBook1()), is(true)); assertThat(manager.storeBookSettings(createBook2()), is(true)); } private static void checkDB(DBSettingsManager manager) { Map<String, BookSettings> allBooks = manager.getAllBooks(); assertThat(allBooks.size(), is(2)); assertThat(allBooks.containsKey(BOOK_FILENAME), is(true)); assertThat(allBooks.containsKey(BOOK2_FILENAME), is(true)); checkBook1(allBooks.get(BOOK_FILENAME)); checkBook2(allBooks.get(BOOK2_FILENAME)); } @Test public void testBook1InitialSettings() { checkBook1(createBook1()); } @Test public void testBook2InitialSettings() { checkBook2(createBook2()); } @Test public void test8To9() { Context ctx = InstrumentationRegistry.getTargetContext(); ctx.deleteDatabase("test8To9.db"); DBSettingsManager db = new DBSettingsManager(ctx, "test8To9.db", 8); setupDB(db); checkDB(db); db.close(); db = new DBSettingsManager(ctx, "test8To9.db", 9); checkDB(db); db.close(); } }