package org.jbehave.eclipse;
import org.jbehave.core.configuration.Keywords;
import org.jbehave.core.steps.StepType;
import org.jbehave.eclipse.util.Filter;
public enum Keyword {
Meta {
@Override
public String asString(Keywords keywords) {
return keywords.meta();
}
},
MetaProperty {
@Override
public String asString(Keywords keywords) {
return keywords.metaProperty();
}
},
Narrative {
@Override
public String asString(Keywords keywords) {
return keywords.narrative();
}
},
InOrderTo {
@Override
public String asString(Keywords keywords) {
return keywords.inOrderTo();
}
},
AsA {
@Override
public String asString(Keywords keywords) {
return keywords.asA();
}
},
IWantTo {
@Override
public String asString(Keywords keywords) {
return keywords.iWantTo();
}
},
SoThat {
@Override
public String asString(Keywords keywords) {
return keywords.soThat();
}
},
Scenario {
@Override
public String asString(Keywords keywords) {
return keywords.scenario();
}
},
GivenStories {
@Override
public String asString(Keywords keywords) {
return keywords.givenStories();
}
},
ExamplesTable {
@Override
public String asString(Keywords keywords) {
return keywords.examplesTable();
}
},
ExamplesTableRow {
@Override
public String asString(Keywords keywords) {
return keywords.examplesTableRow();
}
},
ExamplesTableHeaderSeparator {
@Override
public String asString(Keywords keywords) {
return keywords.examplesTableHeaderSeparator();
}
},
ExamplesTableValueSeparator {
@Override
public String asString(Keywords keywords) {
return keywords.examplesTableValueSeparator();
}
},
ExamplesTableIgnorableSeparator{
@Override
public String asString(Keywords keywords) {
return keywords.examplesTableIgnorableSeparator();
}
},
Given {
@Override
public String asString(Keywords keywords) {
return keywords.given();
}
},
When {
@Override
public String asString(Keywords keywords) {
return keywords.when();
}
},
Then {
@Override
public String asString(Keywords keywords) {
return keywords.then();
}
},
And {
@Override
public String asString(Keywords keywords) {
return keywords.and();
}
},
Ignorable {
@Override
public String asString(Keywords keywords) {
return keywords.ignorable();
}
};
private static Keywords keywords = new Keywords();
public String asString() {
return asString(keywords);
}
public String asString(Keywords keywords) {
throw new AbstractMethodError();
}
public boolean isStep() {
return isStep(this);
}
public boolean isNarrative() {
return isNarrative(this);
}
public boolean isExampleTable() {
return isExampleTable(this);
}
public boolean isComment() {
return this==Ignorable;
}
public static Keyword lookup(StringBuilder builder, Keywords keywords) {
int len = builder.length();
for(Keyword jk : values()) {
String asString = jk.asString(keywords);
if(asString.length()!=builder.length()) {
continue;
}
boolean match = true;
for(int i=0;i<len && match;i++) {
if(builder.charAt(i)!=asString.charAt(i))
match = false;
}
if(match) {
return jk;
}
}
return null;
}
public static Filter<Keyword> stepFilter() {
return new Filter<Keyword>() {
public boolean isAccepted(Keyword keyword) {
return isStep(keyword);
}
};
}
public static boolean isStep(Keyword keyword) {
if(keyword==null)
return false;
switch(keyword) {
case Given:
case When:
case Then:
case And:
return true;
default:
return false;
}
}
public boolean isSameAs(StepType type) {
switch(type) {
case GIVEN:
return this==Given;
case WHEN:
return this==When;
case THEN:
return this==Then;
default:
return false;
}
}
public static boolean isNarrative(Keyword keyword) {
if(keyword==null)
return false;
switch(keyword) {
case Narrative:
case InOrderTo:
case AsA:
case IWantTo:
return true;
default:
return false;
}
}
public static boolean isExampleTable(Keyword keyword) {
if(keyword==null)
return false;
switch(keyword) {
case ExamplesTable:
case ExamplesTableHeaderSeparator:
case ExamplesTableIgnorableSeparator:
case ExamplesTableRow:
case ExamplesTableValueSeparator:
return true;
default:
return false;
}
}
}