package com.llamacorp.equate.test;
import android.support.test.espresso.Espresso;
import android.support.test.runner.AndroidJUnit4;
import com.llamacorp.equate.test.IdlingResource.ViewPagerIdlingResource;
import com.llamacorp.equate.view.CalcActivity;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.registerIdlingResources;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static com.llamacorp.equate.test.EspressoTestUtils.assertExpressionEquals;
import static com.llamacorp.equate.test.EspressoTestUtils.assertResultPreviewEquals;
import static com.llamacorp.equate.test.EspressoTestUtils.assertResultPreviewInvisible;
import static com.llamacorp.equate.test.EspressoTestUtils.clickButtons;
import static com.llamacorp.equate.test.EspressoTestUtils.clickPrevAnswer;
import static com.llamacorp.equate.test.EspressoTestUtils.clickPrevQuery;
import static com.llamacorp.equate.test.EspressoTestUtils.clickUnit;
import static com.llamacorp.equate.test.EspressoTestUtils.getPagerIdle;
import static com.llamacorp.equate.test.EspressoTestUtils.selectUnitTypeDirect;
import static com.llamacorp.equate.test.EspressoTestUtils.setUp;
@RunWith(AndroidJUnit4.class)
public class TestEspressoCalcActivity {
private ViewPagerIdlingResource mPagerIdle;
@Rule
public MyActivityTestRule<CalcActivity> mActivityTestRule =
new MyActivityTestRule<>(CalcActivity.class);
@Before
public void setUpTest() {
setUp(mActivityTestRule);
mPagerIdle = getPagerIdle(mActivityTestRule);
registerIdlingResources(mPagerIdle);
}
@After
public void unregisterIntentServiceIdlingResource() {
if (mPagerIdle != null)
Espresso.unregisterIdlingResources(mPagerIdle);
}
@Test
public void testCalcActivity() {
clickButtons("C");
assertExpressionEquals("");
assertResultPreviewInvisible();
clickButtons("(");
assertExpressionEquals("(");
clickButtons(".");
assertExpressionEquals("(.");
clickButtons("1");
assertExpressionEquals("(.1");
assertResultPreviewEquals("= 0.1");
clickButtons("+b");
assertExpressionEquals("(.1");
clickButtons(")4");
assertExpressionEquals("(.1)*4");
assertResultPreviewEquals("= 0.4");
clickButtons("=");
assertExpressionEquals("0.4");
assertResultPreviewInvisible();
clickButtons("C2E2+5%=");
// if this test fails because a % is put instead of a E, make sure
// that the Settings -> Accessibility -> Hold Time is set to long
assertExpressionEquals("210");
clickPrevQuery();
assertExpressionEquals("2E2+5%");
clickButtons("bb56=");
assertExpressionEquals("256");
clickButtons("+");
clickPrevAnswer();
clickButtons("=");
assertExpressionEquals("512");
clickButtons("Ca1+a0=");
assertExpressionEquals("768");
}
@Test
public void testClickUnitTypesDirect() {
clickButtons("C12345");
// used to be Currency, that proved to be unstable in test, probably due
// to web updates.
selectUnitTypeDirect("Temp");
clickButtons("26");
selectUnitTypeDirect("Energy");
clickButtons("b");
onView(withText("Power")).perform(click());
clickButtons("67");
clickButtons("C4*5=");
assertExpressionEquals("20");
// expression should clear out solve flag
clickUnit("MW");
//TODO fix this:
assertExpressionEquals("Convert 20 MW to:");
}
@Test
public void testOldSequence() {
clickButtons("C(.1+b)4");
assertExpressionEquals("(.1)*4");
clickButtons("=");
assertExpressionEquals("0.4");
//now take 0.4, divide it by the last answer ("a0" is answer 0 answers ago) and get result
clickButtons("/a0=");
assertExpressionEquals("1");
clickButtons("q1bbb-6.1E0)^(a0+q0=");
assertExpressionEquals("36");
clickButtons(".5=");
// assertQueryAnswerExprConvbutton(".5", "0.5", "0.5", "");
clickButtons("q0=");
// assertQueryAnswerExprConvbutton(".5", "0.5", "0.5", "");
clickButtons("+bq0=");
// assertPrevAnswerEquals("Syntax Error", 0);
assertExpressionEquals("Syntax Error");
//clear out the syntax error and try to click it again (should do nothing)
clickButtons("ba0");
// assertPrevAnswerEquals("Syntax Error", 0);
assertExpressionEquals("");
clickButtons("=");
assertExpressionEquals("");
clickButtons("-=");
assertExpressionEquals("");
clickButtons("54+46=");
assertExpressionEquals("100");
}
}