package cucumber.example.android.cukeulator.test; import android.test.ActivityInstrumentationTestCase2; import android.widget.TextView; import cucumber.api.CucumberOptions; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.example.android.cukeulator.CalculatorActivity; import cucumber.example.android.cukeulator.R; import static cucumber.example.android.cukeulator.test.Utils.clickOnView; /** * We extend ActivityInstrumentationTestCase2 in order to have access to methods like getActivity * and getInstrumentation. Depending on what methods we are going to need, we can put our * step definitions inside classes extending any of the following Android test classes: * <p/> * ActivityInstrumentationTestCase2 * InstrumentationTestCase * AndroidTestCase * <p/> * The CucumberOptions annotation is mandatory for exactly one of the classes in the test project. * Only the first annotated class that is found will be used, others are ignored. If no class is * annotated, an exception is thrown. * <p/> * The options need to at least specify features = "features". Features must be placed inside * assets/features/ of the test project (or a subdirectory thereof). */ @CucumberOptions(features = "features") public class CalculatorActivitySteps extends ActivityInstrumentationTestCase2<CalculatorActivity> { public CalculatorActivitySteps(SomeDependency dependency) { super(CalculatorActivity.class); assertNotNull(dependency); } @Given("^I have a CalculatorActivity$") public void I_have_a_CalculatorActivity() { assertNotNull(getActivity()); } @When("^I press (\\d)$") public void I_press_d(int d) { CalculatorActivity activity = getActivity(); switch (d) { case 0: clickOnView(activity, R.id.btn_d_0); break; case 1: clickOnView(activity, R.id.btn_d_1); break; case 2: clickOnView(activity, R.id.btn_d_2); break; case 3: clickOnView(activity, R.id.btn_d_3); break; case 4: clickOnView(activity, R.id.btn_d_4); break; case 5: clickOnView(activity, R.id.btn_d_5); break; case 6: clickOnView(activity, R.id.btn_d_6); break; case 7: clickOnView(activity, R.id.btn_d_7); break; case 8: clickOnView(activity, R.id.btn_d_8); break; case 9: clickOnView(activity, R.id.btn_d_9); break; } } @When("^I press ([+–x\\/=])$") public void I_press_op(char op) { CalculatorActivity activity = getActivity(); switch (op) { case '+': clickOnView(activity, R.id.btn_op_add); break; case '–': clickOnView(activity, R.id.btn_op_subtract); break; case 'x': clickOnView(activity, R.id.btn_op_multiply); break; case '/': clickOnView(activity, R.id.btn_op_divide); break; case '=': clickOnView(activity, R.id.btn_op_equals); break; } } @Then("^I should see (\\S+) on the display$") public void I_should_see_s_on_the_display(String s) { TextView display = (TextView) getActivity().findViewById(R.id.txt_calc_display); String displayed_result = display.getText().toString(); assertEquals(s, displayed_result); } }