@Override public FSMTransition choose(TestSuite suite, List<FSMTransition> choices) { int testIndex = suite.getAllTestCases().size(); List<String> path = suite.getCurrentTest().getAllStepNames(); log.d("path for the current (explored) test:" + path); log.i("Exploring step " + testIndex + "." + path.size()); TestCoverage suiteCoverage = suite.getCoverage(); // create trace if DOT graph is wanted TraceNode[] trace = initTrace(path, testIndex); ExplorationState state = new ExplorationState(config, suiteCoverage); String choice = null; if (choices.size() == 1) { // this handles the scenario startup, where there is always just one choice (and other similar // scenarios) choice = choices.get(0).getStringName(); path.add(choice); } else { // initiate exploration of the possible paths choice = exploreLocal(suite, state, path, trace[1]); } writeDot(path, trace[0]); // we have to find the transition here based on string matching because returning the actual // FSMTransition // object would give a reference to the wrong instance of the model object for (FSMTransition transition : choices) { if (transition.getStringName().equals(choice)) { return transition; } } throw new IllegalStateException( "Exploration choice (" + choice + ") not available. OSMO is bugging?"); }