package com.crawljax.browser.matchers;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.hamcrest.Factory;
import org.hamcrest.FeatureMatcher;
import org.hamcrest.Matcher;
import org.junit.Test;
import com.crawljax.core.state.StateFlowGraph;
import com.crawljax.core.state.StateVertex;
public class StateFlowGraphMatchers {
/**
* @param edges
* The number of expected edges.
* @return A {@link Matcher} that inspects if the number of edges.
*/
@Factory
public static FeatureMatcher<StateFlowGraph, Integer> hasEdges(int edges) {
return new FeatureMatcher<StateFlowGraph, Integer>(equalTo(edges),
"Stateflowgraph with number of edges", "number of edges") {
@Override
protected Integer featureValueOf(StateFlowGraph actual) {
return actual.getAllEdges().size();
}
};
}
/**
* @param states
* The number of expected states.
* @return A {@link Matcher} that inspects if the number of states.
*/
@Factory
public static FeatureMatcher<StateFlowGraph, Integer> hasStates(int states) {
return new FeatureMatcher<StateFlowGraph, Integer>(equalTo(states),
"Stateflowgraph with number of states", "number of states") {
@Override
protected Integer featureValueOf(StateFlowGraph actual) {
return actual.getAllStates().size();
}
};
}
/**
* @param substring
* A {@link String} that occurs in the DOM.
* @return A {@link Matcher} that inspects if the number of edges.
*/
@Factory
public static FeatureMatcher<StateVertex, String> stateWithDomSubstring(String substring) {
return new FeatureMatcher<StateVertex, String>(containsString(substring),
"StateVertex with in the DOM", "substring") {
@Override
protected String featureValueOf(StateVertex actual) {
// System.out.println(actual.getDom());
return actual.getDom();
}
};
}
@Test
public void testStateWithDomSubstring() {
StateVertex vertex = mock(StateVertex.class);
when(vertex.getDom()).thenReturn("paap");
assertThat(vertex, is(stateWithDomSubstring("aap")));
assertThat(vertex, is(not(stateWithDomSubstring("bla"))));
}
}