package hudson.plugins.emailext.plugins; import hudson.model.AbstractBuild; import hudson.plugins.emailext.ExtendedEmailPublisher; import org.jvnet.hudson.test.HudsonTestCase; import java.io.IOException; import java.lang.reflect.Field; import static org.mockito.Mockito.*; public class ContentBuilderTest extends HudsonTestCase { private ExtendedEmailPublisher publisher; public void setUp() throws Exception { super.setUp(); publisher = mock(ExtendedEmailPublisher.class); publisher.defaultContent = "For only 10 easy payment of $69.99 , AWESOME-O 4000 can be yours!"; publisher.defaultSubject = "How would you like your very own AWESOME-O 4000?"; Field f = ExtendedEmailPublisher.DescriptorImpl.class.getDeclaredField( "defaultBody" ); f.setAccessible( true ); f.set( ExtendedEmailPublisher.DESCRIPTOR, "Give me $4000 and I'll mail you a check for $40,000!" ); f = ExtendedEmailPublisher.DescriptorImpl.class.getDeclaredField( "defaultSubject" ); f.setAccessible( true ); f.set( ExtendedEmailPublisher.DESCRIPTOR, "Nigerian needs your help!" ); } public void testTokenizer1() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("foo"); assertFalse(tokenizer.find()); } public void testTokenizer2() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("$PROJECT_URL$asdf"); assertTrue(tokenizer.find()); assertEquals("PROJECT_URL", tokenizer.getTokenName()); assertEquals(0, tokenizer.getArgs().size()); assertTrue(tokenizer.find()); assertEquals("asdf", tokenizer.getTokenName()); assertEquals(0, tokenizer.getArgs().size()); assertFalse(tokenizer.find()); } public void testTokenizer3() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("$PROJECT_URL/asdf"); assertTrue(tokenizer.find()); assertEquals("PROJECT_URL", tokenizer.getTokenName()); assertEquals(0, tokenizer.getArgs().size()); assertFalse(tokenizer.find()); } public void testTokenizer4() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${PROJECT_URL}asdf"); assertTrue(tokenizer.find()); assertEquals("PROJECT_URL", tokenizer.getTokenName()); assertEquals(0, tokenizer.getArgs().size()); assertFalse(tokenizer.find()); } public void testTokenizer5() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${ BUILD_URL\t\t}asdf"); assertTrue(tokenizer.find()); assertEquals("BUILD_URL", tokenizer.getTokenName()); assertEquals(0, tokenizer.getArgs().size()); assertFalse(tokenizer.find()); } public void testTokenizer6() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${BUILD_URL,123 ,\t456.789 }"); assertFalse(tokenizer.find()); } public void testTokenizer7() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${BUILD_URL, true}"); assertFalse(tokenizer.find()); } public void testTokenizer8() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${BUILD_URL, \"a string\"}"); assertFalse(tokenizer.find()); } public void testTokenizer9() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${BUILD_URL, \"a string \\\" \\\\ \\' \\n sdfgsdgf\"}"); assertFalse(tokenizer.find()); } public void testTokenizer10() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer( "${BUILD_URL,a1=123 ,\t arg_two =\t 456.789 }\n" + "${ELSE, S=true, s=\"a string\"}\n"); assertTrue(tokenizer.find()); assertEquals("BUILD_URL", tokenizer.getTokenName()); assertEquals(2, tokenizer.getArgs().size()); assertEquals(123, tokenizer.getArgs().get("a1")); assertEquals(456.789f, tokenizer.getArgs().get("arg_two")); assertTrue(tokenizer.find()); assertEquals("ELSE", tokenizer.getTokenName()); assertEquals(2, tokenizer.getArgs().size()); assertEquals(true, tokenizer.getArgs().get("S")); assertEquals("a string", tokenizer.getArgs().get("s")); assertFalse(tokenizer.find()); } public void testTokenizer11() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer("${PROJECT_URL, BADDY=\"a string \\\" \\\\ \\' \\n sdfgsdgf\"}"); assertTrue(tokenizer.find()); assertEquals("PROJECT_URL", tokenizer.getTokenName()); assertEquals(1, tokenizer.getArgs().size()); assertEquals("a string \" \\ \' \n sdfgsdgf", tokenizer.getArgs().get("BADDY")); assertFalse(tokenizer.find()); } public void testTokenizer12() { ContentBuilder.Tokenizer tokenizer; tokenizer = new ContentBuilder.Tokenizer( "${BUILD_URL, S=false}\n" + "${null,null=true, f= false}"); assertTrue(tokenizer.find()); assertEquals("BUILD_URL", tokenizer.getTokenName()); assertEquals(1, tokenizer.getArgs().size()); assertEquals(false, tokenizer.getArgs().get("S")); assertTrue(tokenizer.find()); assertEquals("null", tokenizer.getTokenName()); assertEquals(2, tokenizer.getArgs().size()); assertEquals(true, tokenizer.getArgs().get("null")); assertEquals(false, tokenizer.getArgs().get("f")); assertFalse(tokenizer.find()); } public void testTransformText_shouldExpand_$PROJECT_DEFAULT_CONTENT() throws IOException, InterruptedException { assertEquals(publisher.defaultContent, new ContentBuilder().transformText( "$PROJECT_DEFAULT_CONTENT", publisher, null, mock( AbstractBuild.class ) )); assertEquals(publisher.defaultContent, new ContentBuilder().transformText( "${PROJECT_DEFAULT_CONTENT}", publisher, null, mock( AbstractBuild.class ) )); } public void testTransformText_shouldExpand_$PROJECT_DEFAULT_SUBJECT() throws IOException, InterruptedException { assertEquals(publisher.defaultSubject, new ContentBuilder().transformText( "$PROJECT_DEFAULT_SUBJECT", publisher, null, mock( AbstractBuild.class ) )); assertEquals(publisher.defaultSubject, new ContentBuilder().transformText( "${PROJECT_DEFAULT_SUBJECT}", publisher, null, mock( AbstractBuild.class ) )); } public void testTransformText_shouldExpand_$DEFAULT_CONTENT() throws IOException, InterruptedException { assertEquals( ExtendedEmailPublisher.DESCRIPTOR.getDefaultBody(), new ContentBuilder().transformText( "$DEFAULT_CONTENT", publisher, null, mock( AbstractBuild.class ) ) ); assertEquals( ExtendedEmailPublisher.DESCRIPTOR.getDefaultBody(), new ContentBuilder().transformText( "${DEFAULT_CONTENT}", publisher, null, mock( AbstractBuild.class ) ) ); } public void testTransformText_shouldExpand_$DEFAULT_SUBJECT() throws IOException, InterruptedException { assertEquals( ExtendedEmailPublisher.DESCRIPTOR.getDefaultSubject(), new ContentBuilder().transformText( "$DEFAULT_SUBJECT", publisher, null, mock( AbstractBuild.class ) ) ); assertEquals( ExtendedEmailPublisher.DESCRIPTOR.getDefaultSubject(), new ContentBuilder().transformText( "${DEFAULT_SUBJECT}", publisher, null, mock( AbstractBuild.class ) ) ); } }