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
20
21
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 }