package com.fsck.k9.mailstore.migrations;
import android.content.ContentValues;
import com.fsck.k9.K9RobolectricTestRunner;
import com.fsck.k9.mailstore.migrations.MigrationTo51.MimeStructureState;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(K9RobolectricTestRunner.class) // required for ContentValues
public class MigrationMimeStructureStateTest {
@Test(expected = IllegalStateException.class)
public void init_popParent_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
state.popParent();
}
@Test(expected = IllegalStateException.class)
public void init_apply_apply_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state.applyValues(cv);
}
@Test(expected = IllegalStateException.class)
public void init_nextchild_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
state.nextChild(1);
}
@Test(expected = IllegalStateException.class)
public void init_nextmulti_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
state.nextMultipartChild(1);
}
@Test(expected = IllegalStateException.class)
public void init_apply_nextmulti_nextchild_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state.nextMultipartChild(1);
state.nextChild(1);
}
@Test(expected = IllegalStateException.class)
public void init_apply_nextchild_nextmulti_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state.nextChild(1);
state.nextMultipartChild(1);
}
@Test
public void init_apply_shouldYieldStartValues() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
Assert.assertEquals(-1L, cv.get("parent"));
Assert.assertEquals(0, cv.get("seq"));
Assert.assertEquals(2, cv.size());
}
@Test(expected = IllegalStateException.class)
public void init_apply_nextchild_apply_shouldCrash() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state = state.nextChild(123);
cv.clear();
state.applyValues(cv);
}
@Test
public void init_apply_nextmulti_apply_shouldYieldMultipartChildValues() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state = state.nextMultipartChild(123);
cv.clear();
state.applyValues(cv);
Assert.assertEquals(123L, cv.get("root"));
Assert.assertEquals(123L, cv.get("parent"));
Assert.assertEquals(1, cv.get("seq"));
Assert.assertEquals(3, cv.size());
}
@Test
public void init_apply_nextmulti_apply_nextmulti_apply_shouldYieldSecondMultipartChildValues() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state = state.nextMultipartChild(123);
cv.clear();
state.applyValues(cv);
state = state.nextMultipartChild(456);
cv.clear();
state.applyValues(cv);
Assert.assertEquals(123L, cv.get("root"));
Assert.assertEquals(456L, cv.get("parent"));
Assert.assertEquals(2, cv.get("seq"));
Assert.assertEquals(3, cv.size());
}
@Test
public void init_apply_nextmulti_apply_pop_apply_shouldYieldFirstParentIdValues() throws Exception {
MimeStructureState state = MimeStructureState.getNewRootState();
ContentValues cv = new ContentValues();
state.applyValues(cv);
state = state.nextMultipartChild(123);
cv.clear();
state.applyValues(cv);
state = state.nextMultipartChild(456);
state = state.popParent();
cv.clear();
state.applyValues(cv);
Assert.assertEquals(123L, cv.get("root"));
Assert.assertEquals(123L, cv.get("parent"));
Assert.assertEquals(2, cv.get("seq"));
Assert.assertEquals(3, cv.size());
}
}