1 package com.atlassian.pageobjects.elements.test;
2
3 import com.atlassian.pageobjects.Page;
4 import com.atlassian.pageobjects.binder.WaitUntil;
5 import com.atlassian.pageobjects.elements.ElementBy;
6 import com.atlassian.pageobjects.elements.PageElement;
7 import com.atlassian.pageobjects.elements.query.Poller;
8 import com.google.common.collect.Iterables;
9 import org.junit.Test;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 public class TestElementByInjection extends AbstractPageElementBrowserTest
16 {
17 @Test
18 public void testParentInjection()
19 {
20 ElementsPageWithParents elementsPage = product.visit(ElementsPageWithParents.class);
21
22 assertTrue(elementsPage.parentList.isPresent());
23 assertEquals("test4_parentList", elementsPage.parentList.getAttribute("id"));
24 assertTrue(elementsPage.childList.isPresent());
25 assertEquals("test4_childList", elementsPage.childList.getAttribute("id"));
26 assertTrue(elementsPage.leafList.isPresent());
27 assertEquals("test4_leafList", elementsPage.leafList.getAttribute("id"));
28 assertEquals(3, Iterables.size(elementsPage.children));
29 for (PageElement child : elementsPage.children)
30 {
31 assertTrue(child.isPresent());
32 assertTrue(child.hasClass("test4_item"));
33 }
34 }
35
36 @Test
37 public void testParentInjectionWithNonExistingChildren()
38 {
39 ElementsPageWithNonExistingChildren elementsPage = product.visit(ElementsPageWithNonExistingChildren.class);
40
41 assertTrue(elementsPage.parentList.isPresent());
42 assertEquals("test4_parentList", elementsPage.parentList.getAttribute("id"));
43 assertFalse(elementsPage.nonExistingTag.isPresent());
44 assertFalse(elementsPage.nonExistingId.isPresent());
45 assertTrue(Iterables.isEmpty(elementsPage.nonExistingClassName));
46 }
47
48 @Test
49 public void testParentInjectionWithNonExistingParent()
50 {
51 try
52 {
53 product.visit(ElementsPageWithNonExistingParent.class);
54 }
55 catch(IllegalStateException expected)
56 {
57 assertTrue(expected.getMessage().contains("nonExistingParent"));
58 }
59 }
60
61 @Test
62 public void testParentInjectionWithParentOfWrongType()
63 {
64 try
65 {
66 product.visit(ElementsPageWithParentOfWrongType.class);
67 }
68 catch(IllegalStateException expected)
69 {
70 assertTrue(expected.getMessage().contains("childWithBadParents"));
71 assertTrue(expected.getMessage().contains("iterableParent"));
72 }
73 }
74
75
76 public static final class ElementsPageWithParents implements Page
77 {
78 @ElementBy(id = "test4_parentList")
79 private PageElement parentList;
80
81 @ElementBy(within = "parentList", id = "test4_childList")
82 private PageElement childList;
83
84 @ElementBy(within = "childList", tagName = "ul")
85 private PageElement leafList;
86
87 @ElementBy(within = "leafList", className = "test4_item")
88 private Iterable<PageElement> children;
89
90
91 public String getUrl()
92 {
93 return "/html/elements.html";
94 }
95
96 @WaitUntil
97 private void waitUntilPresent()
98 {
99 Poller.waitUntilTrue(parentList.timed().isPresent());
100 }
101 }
102
103 public static final class ElementsPageWithNonExistingChildren implements Page
104 {
105 @ElementBy(id = "test4_parentList")
106 private PageElement parentList;
107
108 @ElementBy(within = "parentList", tagName = "td")
109 private PageElement nonExistingTag;
110
111 @ElementBy(within = "parentList", id = "no-such-id")
112 private PageElement nonExistingId;
113
114 @ElementBy(within = "parentList", className = "no-such-class")
115 private Iterable<PageElement> nonExistingClassName;
116
117
118 public String getUrl()
119 {
120 return "/html/elements.html";
121 }
122
123 @WaitUntil
124 private void waitUntilPresent()
125 {
126 Poller.waitUntilTrue(parentList.timed().isPresent());
127 }
128 }
129
130 public static final class ElementsPageWithNonExistingParent implements Page
131 {
132 @ElementBy(id = "test4_parentList")
133 private PageElement parentList;
134
135 @ElementBy(within = "noSuchField", id = "test4_childList")
136 private PageElement nonExistingParent;
137
138 public String getUrl()
139 {
140 return "/html/elements.html";
141 }
142
143 @WaitUntil
144 private void waitUntilPresent()
145 {
146 Poller.waitUntilTrue(parentList.timed().isPresent());
147 }
148 }
149
150 public static final class ElementsPageWithParentOfWrongType implements Page
151 {
152 @ElementBy(id = "test4_parentList")
153 private PageElement parentList;
154
155 @ElementBy(within = "parentList", className = "test4_item")
156 private Iterable<PageElement> iterableParent;
157
158 @ElementBy(within = "iterableParent", tagName = "td")
159 private PageElement childWithBadParents;
160
161 public String getUrl()
162 {
163 return "/html/elements.html";
164 }
165
166 @WaitUntil
167 private void waitUntilPresent()
168 {
169 Poller.waitUntilTrue(parentList.timed().isPresent());
170 }
171 }
172 }