package org.jbehave.core.steps; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Set; import org.jbehave.core.steps.PatternVariantBuilder; import org.junit.Test; public class PatternVariantBuilderBehaviour { @Test public void shouldReturnItselfForNoPatternString() { PatternVariantBuilder builder = new PatternVariantBuilder("No variants"); assertEquals("No variants", builder.getInput()); Set<String> variants = builder.allVariants(); assertEquals("No variants", variants.iterator().next()); assertEquals(1, variants.size()); } @Test public void shouldReturnTwoVariantsForOnePattern() { PatternVariantBuilder builder = new PatternVariantBuilder("There are {Two|One} variants"); assertEquals("There are {Two|One} variants", builder.getInput()); Set<String> result = builder.allVariants(); assertEquals(2, result.size()); assertTrue(result.contains("There are One variants")); assertTrue(result.contains("There are Two variants")); } @Test public void shouldReturnFourVariantsForTwoPatterns() { PatternVariantBuilder builder = new PatternVariantBuilder("There are {Two|One} variants, {hooray|alas}!"); Set<String> result = builder.allVariants(); assertEquals(4, result.size()); assertTrue(result.contains("There are One variants, hooray!")); assertTrue(result.contains("There are Two variants, hooray!")); assertTrue(result.contains("There are One variants, alas!")); assertTrue(result.contains("There are Two variants, alas!")); } @Test public void shouldReturnFourVariantsForTwoPatternsWithOptionElements() { PatternVariantBuilder builder = new PatternVariantBuilder("There are {One|} variants{, hooray|}!"); Set<String> result = builder.allVariants(); assertEquals(4, result.size()); assertTrue(result.contains("There are One variants, hooray!")); assertTrue(result.contains("There are variants, hooray!")); assertTrue(result.contains("There are One variants!")); assertTrue(result.contains("There are variants!")); } @Test public void shouldReturnFourVariantsForTwoPatternsWithOptionElementsWithWhitespaceCompression() { PatternVariantBuilder builder = new PatternVariantBuilder("There are {One|} variants{, hooray|}!"); Set<String> result = builder.allVariants(true); // collapse whitespaces to 1 assertEquals(4, result.size()); assertTrue(result.contains("There are One variants, hooray!")); assertTrue(result.contains("There are variants, hooray!")); assertTrue(result.contains("There are One variants!")); assertTrue(result.contains("There are variants!")); } @Test public void shouldHandleSpecialCharacters() { PatternVariantBuilder builder = new PatternVariantBuilder("When $A {+|plus|is added to} $B"); Set<String> result = builder.allVariants(); assertEquals(3, result.size()); assertTrue(result.contains("When $A + $B")); assertTrue(result.contains("When $A plus $B")); assertTrue(result.contains("When $A is added to $B")); } @Test public void hasUnclosedBracket() { PatternVariantBuilder builder = new PatternVariantBuilder("When $A {+|plus|is added to $B"); Set<String> result = builder.allVariants(); assertEquals(1, result.size()); assertTrue(result.contains("When $A {+|plus|is added to $B")); } @Test public void hasUnclosedBrackets() { PatternVariantBuilder builder = new PatternVariantBuilder("When $A {+|plus|is added to} $B and }{$C"); Set<String> result = builder.allVariants(); assertEquals(3, result.size()); assertTrue(result.contains("When $A + $B and }{$C")); assertTrue(result.contains("When $A plus $B and }{$C")); assertTrue(result.contains("When $A is added to $B and }{$C")); } }