package org.jbehave.eclipse.editor.step; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import java.util.Arrays; import java.util.List; import org.jbehave.eclipse.editor.step.ParametrizedStep; import org.jbehave.eclipse.editor.step.ParametrizedStep.Token; import org.jbehave.eclipse.editor.step.ParametrizedStep.WeightChain; import org.junit.Test; public class ParametrizedStringTest { @Test public void getParameters () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.getParameters(), equalTo(asList("name"))); } @Test public void getParameters_parameterAtEnd () { ParametrizedStep s = new ParametrizedStep("a user named $name"); assertThat(s.getParameters(), equalTo(asList("name"))); } @Test public void getTokens () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); List<Token> tokens = s.getTokens(); assertThat(tokens.get(0).value(), equalTo("a user named ")); assertThat(tokens.get(1).value(), equalTo("name")); assertThat(tokens.get(2).value(), equalTo(" clicks")); } @Test public void getTokens_ex1() { ParametrizedStep s = new ParametrizedStep("a user named \"$name\""); List<Token> tokens = s.getTokens(); assertThat(tokens.get(0).value(), equalTo("a user named \"")); assertThat(tokens.get(1).value(), equalTo("name")); assertThat(tokens.get(2).value(), equalTo("\"")); } @Test public void acceptsInputPart_noParameter () { assertThat(pString("a user clicks").acceptsBeginning("a use"), is(1)); assertThat(pString("a user clicks").acceptsBeginning("a user clicks"), is(2)); assertThat(pString("a user clicks").acceptsBeginning("a man"), is(0)); } @Test public void weightChain_noParameter_ex1 () { ParametrizedStep s = new ParametrizedStep("a user clicks"); WeightChain chain = s.calculateWeightChain("a use"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a use"))); } @Test public void weightChain_noParameter_ex2 () { ParametrizedStep s = new ParametrizedStep("a user clicks"); WeightChain chain = s.calculateWeightChain("a user clicks"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user clicks"))); } @Test public void weightChain_noParameter_ex3 () { ParametrizedStep s = new ParametrizedStep("a user clicks"); WeightChain chain = s.calculateWeightChain("a man"); assertThat(chain.tokenize(), equalTo(Arrays.<String>asList())); } @Test public void complete_noParameter_ex1 () { ParametrizedStep s = new ParametrizedStep("a user clicks"); String complete = s.complete("a use"); assertThat(complete, equalTo("r clicks")); } @Test public void complete_noParameter_ex2 () { ParametrizedStep s = new ParametrizedStep("a user clicks"); String complete = s.complete("a user clicks"); assertThat(complete, equalTo("")); } @Test public void complete_noParameter_ex3 () { ParametrizedStep s = new ParametrizedStep("a user clicks"); String complete = s.complete("a man"); assertThat(complete, equalTo("")); } private static ParametrizedStep pString(String input) { return new ParametrizedStep(input); } @Test public void acceptsInputPart_withParameter_beforeParameter_insideLiteral_ex1 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a use"), is(1)); } @Test public void weightChain_withParameter_beforeParameter_insideLiteral_ex1 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a use"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a use"))); } @Test public void complete_withParameter_beforeParameter_insideLiteral_ex1 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a use"); assertThat(complete, equalTo("r named $name clicks")); } @Test public void acceptsInputPart_withParameter_beforeParameter_insideLiteral_ex2 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a user named"), is(1)); } @Test public void weightChain_withParameter_beforeParameter_insideLiteral_ex2 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a user named"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named"))); } @Test public void complete_withParameter_beforeParameter_insideLiteral_ex2 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a user named"); assertThat(complete, equalTo(" $name clicks")); } @Test public void acceptsInputPart_withParameter_beforeParameter_fullLiteral () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a user named "), is(2)); } @Test public void weightChain_withParameter_beforeParameter_fullLiteral () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a user named "); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named "))); } @Test public void complete_withParameter_beforeParameter_fullLiteral () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a user named "); assertThat(complete, equalTo("$name clicks")); } @Test public void acceptsInputPart_withParameter_beforeParameter_invalidLiteral () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a user whose "), is(0)); } @Test public void weightChain_withParameter_beforeParameter_invalidLiteral () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a user whose "); assertThat(chain.tokenize(), equalTo(Arrays.<String>asList())); } @Test public void complete_withParameter_beforeParameter_invalidLiteral () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a user whose "); assertThat(complete, equalTo("")); } @Test public void acceptsInputPart_withParameter_insideParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a user named Travis"), is(3)); } @Test public void weightChain_withParameter_insideParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a user named Travis"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ", "Travis"))); } @Test public void complete_withParameter_insideParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a user named Travis"); assertThat(complete, equalTo(" clicks")); } @Test public void acceptsInputPart_withParameter_afterParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a user named Travis cli"), is(4)); } @Test public void weightChain_withParameter_afterParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a user named Travis cli"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ", "Travis", " cli"))); } @Test public void complete_withParameter_afterParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a user named Travis cli"); assertThat(complete, equalTo("cks")); } @Test public void acceptsInputPart_withParameter_fullMatch () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.acceptsBeginning("a user named Travis clicks"), is(5)); } @Test public void weightChain_withParameter_fullMatch () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); WeightChain chain = s.calculateWeightChain("a user named Travis clicks"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ", "Travis", " clicks"))); } @Test public void complete_withParameter_fullMatch () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); String complete = s.complete("a user named Travis clicks"); assertThat(complete, equalTo("")); } @Test public void weightChain_ex1() { ParametrizedStep s = new ParametrizedStep("a user named \"$name\""); WeightChain chain = s.calculateWeightChain("a user named \"Bob\""); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named \"","Bob","\""))); } @Test public void acceptsInputPart_with2Parameters_before2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); assertThat(s.acceptsBeginning("a user named Travis cli"), is(4)); assertThat(s.acceptsBeginning("a user named Travis clicks on "), is(5)); } @Test public void weightChain_with2Parameters_before2ndParameter_ex1 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); WeightChain chain = s.calculateWeightChain("a user named Travis cli"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ", "Travis", " cli"))); } @Test public void weightChain_with2Parameters_before2ndParameter_ex2 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); WeightChain chain = s.calculateWeightChain("a user named Travis clicks on "); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ", "Travis", " clicks on "))); } @Test public void complete_with2Parameters_before2ndParameter_ex1 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); String complete = s.complete("a user named Travis cli"); assertThat(complete, equalTo("cks on $button button")); } @Test public void complete_with2Parameters_before2ndParameter_ex2 () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); String complete = s.complete("a user named Travis clicks on "); assertThat(complete, equalTo("$button button")); } @Test public void acceptsInputPart_with2Parameters_inside2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); assertThat(s.acceptsBeginning("a user named Travis clicks on enter"), is(6)); } @Test public void weightChain_with2Parameters_inside2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); WeightChain chain = s.calculateWeightChain("a user named Travis clicks on enter"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ","Travis"," clicks on ", "enter"))); } @Test public void complete_with2Parameters_inside2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); String complete = s.complete("a user named Travis clicks on enter"); assertThat(complete, equalTo(" button")); } @Test public void acceptsInputPart_with2Parameters_after2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); assertThat(s.acceptsBeginning("a user named Travis clicks on enter butt"), is(7)); } @Test public void weightChain_with2Parameters_after2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); WeightChain chain = s.calculateWeightChain("a user named Travis clicks on enter butt"); assertThat(chain.tokenize(), equalTo(Arrays.asList("a user named ", "Travis", " clicks on ", "enter", " butt"))); } @Test public void complete_with2Parameters_after2ndParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); String complete = s.complete("a user named Travis clicks on enter butt"); assertThat(complete, equalTo("on")); } @Test public void acceptsInputPart_with2Parameters_fullMatch () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); assertThat(s.acceptsBeginning("a user named Travis clicks on enter button"), is(8)); } @Test public void weightChain_with2Parameters_fullMatch () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); WeightChain chain = s.calculateWeightChain("a user named Travis clicks on enter button"); List<String> inputFrags = chain.tokenize(); assertThat(inputFrags, equalTo(Arrays.asList("a user named ", "Travis", " clicks on ", "enter", " button"))); } @Test public void complete_with2Parameters_fullMatch () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); String complete = s.complete("a user named Travis clicks on enter button"); assertThat(complete, equalTo("")); } @Test public void matches_noParameter () { ParametrizedStep s = new ParametrizedStep("a user clicks"); assertThat(s.matches("a user clicks"), is(true)); assertThat(s.matches("a user clicks "), is(false)); assertThat(s.matches("a user named"), is(false)); assertThat(s.matches("a user clicks on a button"), is(false)); } @Test public void matches_withOneParameter () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks"); assertThat(s.matches("a user named Travis clicks"), is(true)); assertThat(s.matches("a user named $name clicks"), is(true)); assertThat(s.matches("a user named Travis has clicked"), is(false)); } @Test public void matches_withTwoParameters () { ParametrizedStep s = new ParametrizedStep("a user named $name clicks on $button button"); assertThat(s.matches("a user named Travis clicks on enter button"), is(true)); assertThat(s.matches("a user named $name clicks on $butoon button"), is(true)); assertThat(s.matches("a user named Travis clicks on enter "), is(false)); } @Test public void weightChain_withNewlines () { ParametrizedStep s = new ParametrizedStep("a user named $name with the following properties $exampleTable"); String content = "a user named Bob with the following properties \n" + "|key|value|\n" + "|Login|networkAgentLogin|\n" + "|Password|networkAgentPassword|\n"; WeightChain chain = s.calculateWeightChain(content); List<String> tokenList = chain.tokenize(); //for(String token : tokenList) { // System.out.println(">>"+escapeNL(token)+"<<"); //} assertThat(tokenList.subList(0, 3), equalTo(Arrays.asList("a user named ", "Bob", " with the following properties "))); assertThat(tokenList.get(3), equalTo("\n" + "|key|value|\n" + "|Login|networkAgentLogin|\n" + "|Password|networkAgentPassword|\n")); } @Test public void weightChain_withNewlines_noParameterBefore () { ParametrizedStep s = new ParametrizedStep("a user named Bob with the following properties $exampleTable"); String content = "a user named Bob with the following properties \n" + "|key|value|\n" + "|Login|networkAgentLogin|\n" + "|Password|networkAgentPassword|\n"; WeightChain chain = s.calculateWeightChain(content); List<String> tokenList = chain.tokenize(); //for(String token : tokenList) { // System.out.println(">>"+escapeNL(token)+"<<"); //} assertThat(tokenList.get(0), equalTo("a user named Bob with the following properties ")); assertThat(tokenList.get(1), equalTo("\n" + "|key|value|\n" + "|Login|networkAgentLogin|\n" + "|Password|networkAgentPassword|\n")); } }