View Javadoc

1   package com.atlassian.webdriver.rule;
2   
3   import com.atlassian.pageobjects.browser.Browser;
4   import com.atlassian.pageobjects.browser.IgnoreBrowser;
5   import com.atlassian.pageobjects.browser.RequireBrowser;
6   import com.atlassian.webdriver.testing.rule.IgnoreBrowserRule;
7   import org.junit.Test;
8   import org.junit.internal.AssumptionViolatedException;
9   import org.junit.runner.RunWith;
10  import org.junit.runners.model.Statement;
11  import org.mockito.Mock;
12  import org.mockito.runners.MockitoJUnitRunner;
13  
14  import static org.hamcrest.Matchers.instanceOf;
15  import static org.hamcrest.Matchers.is;
16  import static org.junit.Assert.assertThat;
17  
18  /**
19   * Test case for {@link com.atlassian.webdriver.testing.rule.IgnoreBrowserRule}.
20   *
21   * @since 2.1
22   */
23  @RunWith(MockitoJUnitRunner.class)
24  public class TestIgnoreBrowserRule
25  {
26  
27      @Mock private Statement statement;
28  
29      @Test
30      public void shouldIgnoreForAnnotatedTestMethod()
31      {
32          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.HTMLUNIT);
33          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
34                  Descriptions.forTest(MockClassWithIgnoreMethods.class, "methodAnnotatedWithIgnoreBrowserHtmlUnit")));
35          invoker.invokeSafely();
36          assertFailedAssumption(invoker);
37      }
38  
39      @Test
40      public void shouldIgnoreForAnnotatedTestMethodWithMultipleValues()
41      {
42          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.ANDROID);
43          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
44                  Descriptions.forTest(MockClassWithIgnoreMethods.class, "methodAnnotatedWithIgnoreBrowserMultipleValues")));
45          invoker.invokeSafely();
46          assertFailedAssumption(invoker);
47      }
48  
49      @Test
50      public void shouldNotIgnoreForAnnotatedTestMethodIfNotMatching()
51      {
52          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.FIREFOX);
53          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
54                  Descriptions.forTest(MockClassWithIgnoreMethods.class, "methodAnnotatedWithIgnoreBrowserHtmlUnit")));
55          invoker.invokeSafely();
56          assertThat(invoker.isSuccess(), is(true));
57      }
58  
59      @Test
60      public void shouldIgnoreForAnnotatedMethodWithIgnoreAll()
61      {
62          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.CHROME);
63          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
64                  Descriptions.forTest(MockClassWithIgnoreMethods.class, "methodAnnotatedWithIgnoreAll")));
65          invoker.invokeSafely();
66          assertFailedAssumption(invoker);
67      }
68  
69      @Test
70      public void shouldIgnoreForIgnoreBrowserOnClass()
71      {
72          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.FIREFOX);
73          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
74                  Descriptions.forTest(MockIgnoreBrowserClass.class, "someMethod")));
75          invoker.invokeSafely();
76          assertFailedAssumption(invoker);
77      }
78  
79      @Test
80      public void shouldNotIgnoreForAnnotatedClassIfBrowserNotMatching()
81      {
82          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.CHROME);
83          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
84                  Descriptions.forTest(MockIgnoreBrowserClass.class, "someMethod")));
85          invoker.invokeSafely();
86          assertThat(invoker.isSuccess(), is(true));
87      }
88  
89  
90      @Test
91      public void shouldSkipForAnnotatedTestMethod()
92      {
93          final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.CHROME);
94          final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
95                  Descriptions.forTest(MockClassWithRequireMethods.class, "methodAnnotatedWithRequireBrowserHtmlUnit")));
96          invoker.invokeSafely();
97          assertFailedAssumption(invoker);
98      }
99  
100     @Test
101     public void shouldSkipForAnnotatedTestMethodWithMultipleValues()
102     {
103         final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.CHROME);
104         final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
105                 Descriptions.forTest(MockClassWithRequireMethods.class, "methodAnnotatedWithRequireBrowserMultipleValues")));
106         invoker.invokeSafely();
107         assertFailedAssumption(invoker);
108     }
109 
110     @Test
111     public void shouldNotSkipForAnnotatedTestMethodIfMatching()
112     {
113         final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.FIREFOX);
114         final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
115                 Descriptions.forTest(MockClassWithRequireMethods.class, "methodAnnotatedWithRequireBrowserMultipleValues")));
116         invoker.invokeSafely();
117         assertThat(invoker.isSuccess(), is(true));
118     }
119 
120     @Test
121     public void shouldNeverSkipForAnnotatedMethodWithRequireAll()
122     {
123         final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.CHROME);
124         final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
125                 Descriptions.forTest(MockClassWithRequireMethods.class, "methodAnnotatedWithRequireAll")));
126         invoker.invokeSafely();
127         assertThat(invoker.isSuccess(), is(true));
128     }
129 
130     @Test
131     public void shouldSkipForRequireBrowserOnClass()
132     {
133         final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.CHROME);
134         final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
135                 Descriptions.forTest(MockRequireBrowserClass.class, "someMethod")));
136         invoker.invokeSafely();
137         assertFailedAssumption(invoker);
138     }
139 
140     @Test
141     public void shouldNotSkipForRequireBrowserOnClassIfBrowserMatching()
142     {
143         final IgnoreBrowserRule rule = new IgnoreBrowserRule(Browser.FIREFOX);
144         final SafeStatementInvoker invoker = new SafeStatementInvoker(rule.apply(statement,
145                 Descriptions.forTest(MockRequireBrowserClass.class, "someMethod")));
146         invoker.invokeSafely();
147         assertThat(invoker.isSuccess(), is(true));
148     }
149 
150     private void assertFailedAssumption(SafeStatementInvoker invoker)
151     {
152         assertThat(invoker.isSuccess(), is(false));
153         assertThat(invoker.getError(), instanceOf(AssumptionViolatedException.class));
154     }
155 
156 
157     public static class MockClassWithIgnoreMethods
158     {
159         @Test
160         @IgnoreBrowser(value = Browser.HTMLUNIT, reason = "For some reason")
161         public void methodAnnotatedWithIgnoreBrowserHtmlUnit() {}
162 
163         @Test
164         @IgnoreBrowser(value = { Browser.HTMLUNIT, Browser.ANDROID, Browser.FIREFOX }, reason = "For some reason")
165         public void methodAnnotatedWithIgnoreBrowserMultipleValues() {}
166 
167         @Test
168         @IgnoreBrowser(value = Browser.ALL, reason = "For some reason")
169         public void methodAnnotatedWithIgnoreAll() {}
170     }
171 
172     @IgnoreBrowser(value = {Browser.HTMLUNIT, Browser.FIREFOX}, reason = "For some reason")
173     public static class MockIgnoreBrowserClass
174     {
175         @Test
176         public void someMethod() {}
177     }
178 
179 
180     public static class MockClassWithRequireMethods
181     {
182         @Test
183         @RequireBrowser(value = Browser.HTMLUNIT)
184         public void methodAnnotatedWithRequireBrowserHtmlUnit() {}
185 
186         @Test
187         @RequireBrowser(value = { Browser.HTMLUNIT, Browser.ANDROID, Browser.FIREFOX })
188         public void methodAnnotatedWithRequireBrowserMultipleValues() {}
189 
190         @Test
191         @RequireBrowser(value = Browser.ALL)
192         public void methodAnnotatedWithRequireAll() {}
193     }
194 
195     @RequireBrowser(value = {Browser.HTMLUNIT, Browser.FIREFOX})
196     public static class MockRequireBrowserClass
197     {
198         @Test
199         public void someMethod() {}
200     }
201 }