You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PopupDateFieldExtendedRangeTest.java 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. /*
  2. * Copyright 2000-2014 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.tests.components.datefield;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.assertFalse;
  19. import static org.junit.Assert.assertTrue;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import org.junit.Before;
  23. import org.junit.Test;
  24. import org.openqa.selenium.Keys;
  25. import org.openqa.selenium.WebElement;
  26. import org.openqa.selenium.interactions.Actions;
  27. import com.vaadin.testbench.By;
  28. import com.vaadin.testbench.elements.ButtonElement;
  29. import com.vaadin.testbench.elements.DateFieldElement;
  30. import com.vaadin.testbench.parallel.BrowserUtil;
  31. import com.vaadin.tests.tb3.MultiBrowserTest;
  32. /**
  33. * Tests contents and functionality of PopupDateField's popup.
  34. *
  35. * @author Vaadin Ltd
  36. */
  37. public class PopupDateFieldExtendedRangeTest extends MultiBrowserTest {
  38. @Override
  39. @Before
  40. public void setup() throws Exception {
  41. super.setup();
  42. openTestURL();
  43. }
  44. @Test
  45. public void testFirstDateField() {
  46. List<DateFieldElement> dateFields = $(DateFieldElement.class).all();
  47. assertEquals("unexpected amount of datefields", 3, dateFields.size());
  48. DateFieldElement dateField = dateFields.get(0);
  49. // open the popup
  50. dateField.findElement(By.tagName("button")).click();
  51. assertTrue("popup not found when there should be one",
  52. isElementPresent(By.className("v-datefield-popup")));
  53. // verify contents
  54. WebElement popup = findElement(By.className("v-datefield-popup"));
  55. assertEquals(
  56. "unexpected month",
  57. "tammikuu 2011",
  58. popup.findElements(
  59. By.className("v-datefield-calendarpanel-month")).get(1)
  60. .getText());
  61. List<WebElement> headerElements = popup.findElement(
  62. By.className("v-datefield-calendarpanel-weekdays"))
  63. .findElements(By.tagName("td"));
  64. List<WebElement> weekdays = new ArrayList<WebElement>();
  65. for (WebElement headerElement : headerElements) {
  66. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  67. weekdays.add(headerElement);
  68. }
  69. }
  70. assertEquals("unexpected weekday count", 7, weekdays.size());
  71. assertEquals("unexpected first day of week", "MA", weekdays.get(0)
  72. .getText());
  73. assertEquals(
  74. "unexpected weeknumber count",
  75. 0,
  76. popup.findElements(
  77. By.className("v-datefield-calendarpanel-weeknumber"))
  78. .size());
  79. assertEquals(
  80. "unexpected selection",
  81. "1",
  82. popup.findElement(
  83. By.className("v-datefield-calendarpanel-day-selected"))
  84. .getText());
  85. assertEquals(
  86. "unexpected focus",
  87. "1",
  88. popup.findElement(
  89. By.className("v-datefield-calendarpanel-day-focused"))
  90. .getText());
  91. List<WebElement> days = popup.findElements(By
  92. .className("v-datefield-calendarpanel-day"));
  93. assertEquals("unexpected day count", 42, days.size());
  94. assertEquals("unexpected day content", "27", days.get(0).getText());
  95. assertEquals("unexpected day content", "4", days.get(8).getText());
  96. assertEquals("unexpected day content", "21", days.get(25).getText());
  97. assertEquals("unexpected day content", "6", days.get(41).getText());
  98. // move to the previous month
  99. popup.findElement(By.className("v-datefield-calendarpanel-prevmonth"))
  100. .findElement(By.tagName("button")).click();
  101. // verify contents
  102. assertEquals(
  103. "unexpected month",
  104. "joulukuu 2010",
  105. popup.findElements(
  106. By.className("v-datefield-calendarpanel-month")).get(1)
  107. .getText());
  108. assertEquals(
  109. "unexpected selection",
  110. "1",
  111. popup.findElement(
  112. By.className("v-datefield-calendarpanel-day-selected"))
  113. .getText());
  114. assertEquals(
  115. "unexpected focus",
  116. 0,
  117. popup.findElements(
  118. By.className("v-datefield-calendarpanel-day-focused"))
  119. .size());
  120. days = popup
  121. .findElements(By.className("v-datefield-calendarpanel-day"));
  122. assertEquals("unexpected day count", 42, days.size());
  123. assertEquals("unexpected day content", "29", days.get(0).getText());
  124. assertEquals("unexpected day content", "7", days.get(8).getText());
  125. assertEquals("unexpected day content", "24", days.get(25).getText());
  126. assertEquals("unexpected day content", "9", days.get(41).getText());
  127. // move to the previous year
  128. popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
  129. .findElement(By.tagName("button")).click();
  130. // verify contents
  131. assertEquals(
  132. "unexpected month",
  133. "joulukuu 2009",
  134. popup.findElements(
  135. By.className("v-datefield-calendarpanel-month")).get(1)
  136. .getText());
  137. assertEquals(
  138. "unexpected selection",
  139. 0,
  140. popup.findElements(
  141. By.className("v-datefield-calendarpanel-day-selected"))
  142. .size());
  143. assertEquals(
  144. "unexpected focus",
  145. 0,
  146. popup.findElements(
  147. By.className("v-datefield-calendarpanel-day-focused"))
  148. .size());
  149. days = popup
  150. .findElements(By.className("v-datefield-calendarpanel-day"));
  151. assertEquals("unexpected day count", 42, days.size());
  152. assertEquals("unexpected day content", "30", days.get(0).getText());
  153. assertEquals("unexpected day content", "8", days.get(8).getText());
  154. assertEquals("unexpected day content", "25", days.get(25).getText());
  155. assertEquals("unexpected day content", "10", days.get(41).getText());
  156. // close the popup by clicking the button again
  157. dateField.findElement(By.tagName("button")).click();
  158. assertFalse("popup found when there should be none",
  159. isElementPresent(By.className("v-datefield-popup")));
  160. }
  161. @Test
  162. public void testSecondDateField() throws InterruptedException {
  163. DateFieldElement dateField = $(DateFieldElement.class).all().get(1);
  164. ButtonElement button = $(ButtonElement.class).first();
  165. // change the date
  166. button.click();
  167. sleep(100);
  168. // open the popup
  169. dateField.findElement(By.tagName("button")).click();
  170. assertTrue("popup not found when there should be one",
  171. isElementPresent(By.className("v-datefield-popup")));
  172. // verify contents
  173. WebElement popup = findElement(By.className("v-datefield-popup"));
  174. assertEquals(
  175. "unexpected month",
  176. "February 2010",
  177. popup.findElements(
  178. By.className("v-datefield-calendarpanel-month")).get(1)
  179. .getText());
  180. List<WebElement> headerElements = popup.findElement(
  181. By.className("v-datefield-calendarpanel-weekdays"))
  182. .findElements(By.tagName("td"));
  183. List<WebElement> weekdays = new ArrayList<WebElement>();
  184. for (WebElement headerElement : headerElements) {
  185. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  186. weekdays.add(headerElement);
  187. }
  188. }
  189. assertEquals("unexpected weekday count", 7, weekdays.size());
  190. assertEquals("unexpected first day of week", "SUN", weekdays.get(0)
  191. .getText());
  192. assertEquals(
  193. "unexpected weeknumber count",
  194. 0,
  195. popup.findElements(
  196. By.className("v-datefield-calendarpanel-weeknumber"))
  197. .size());
  198. assertEquals(
  199. "unexpected selection",
  200. "16",
  201. popup.findElement(
  202. By.className("v-datefield-calendarpanel-day-selected"))
  203. .getText());
  204. assertEquals(
  205. "unexpected focus",
  206. "16",
  207. popup.findElement(
  208. By.className("v-datefield-calendarpanel-day-focused"))
  209. .getText());
  210. List<WebElement> days = popup.findElements(By
  211. .className("v-datefield-calendarpanel-day"));
  212. assertEquals("unexpected day count", 42, days.size());
  213. assertEquals("unexpected day content", "31", days.get(0).getText());
  214. assertEquals("unexpected day content", "8", days.get(8).getText());
  215. assertEquals("unexpected day content", "25", days.get(25).getText());
  216. assertEquals("unexpected day content", "13", days.get(41).getText());
  217. // navigate down
  218. WebElement popupBody = popup.findElement(By
  219. .className("v-datefield-calendarpanel"));
  220. popupBody.sendKeys(Keys.ARROW_DOWN);
  221. // ensure the focus changed
  222. assertEquals(
  223. "unexpected focus",
  224. "23",
  225. popup.findElement(
  226. By.className("v-datefield-calendarpanel-day-focused"))
  227. .getText());
  228. // navigate down
  229. popupBody.sendKeys(Keys.ARROW_DOWN);
  230. // verify contents
  231. assertEquals(
  232. "unexpected month",
  233. "March 2010",
  234. popup.findElements(
  235. By.className("v-datefield-calendarpanel-month")).get(1)
  236. .getText());
  237. assertEquals(
  238. "unexpected selection",
  239. 0,
  240. popup.findElements(
  241. By.className("v-datefield-calendarpanel-day-selected"))
  242. .size());
  243. assertEquals(
  244. "unexpected focus",
  245. "2",
  246. popup.findElement(
  247. By.className("v-datefield-calendarpanel-day-focused"))
  248. .getText());
  249. days = popup
  250. .findElements(By.className("v-datefield-calendarpanel-day"));
  251. assertEquals("unexpected day count", 42, days.size());
  252. assertEquals("unexpected day content", "28", days.get(0).getText());
  253. assertEquals("unexpected day content", "8", days.get(8).getText());
  254. assertEquals("unexpected day content", "25", days.get(25).getText());
  255. assertEquals("unexpected day content", "10", days.get(41).getText());
  256. // navigate left
  257. popupBody = popup
  258. .findElement(By.className("v-datefield-calendarpanel"));
  259. popupBody.sendKeys(Keys.ARROW_LEFT);
  260. // ensure the focus changed
  261. assertEquals(
  262. "unexpected focus",
  263. "1",
  264. popup.findElement(
  265. By.className("v-datefield-calendarpanel-day-focused"))
  266. .getText());
  267. // navigate left
  268. popupBody.sendKeys(Keys.ARROW_LEFT);
  269. // verify contents
  270. assertEquals(
  271. "unexpected month",
  272. "February 2010",
  273. popup.findElements(
  274. By.className("v-datefield-calendarpanel-month")).get(1)
  275. .getText());
  276. assertEquals(
  277. "unexpected selection",
  278. "16",
  279. popup.findElement(
  280. By.className("v-datefield-calendarpanel-day-selected"))
  281. .getText());
  282. assertEquals(
  283. "unexpected focus",
  284. "28",
  285. popup.findElement(
  286. By.className("v-datefield-calendarpanel-day-focused"))
  287. .getText());
  288. days = popup
  289. .findElements(By.className("v-datefield-calendarpanel-day"));
  290. assertEquals("unexpected day count", 42, days.size());
  291. assertEquals("unexpected day content", "31", days.get(0).getText());
  292. assertEquals("unexpected day content", "8", days.get(8).getText());
  293. assertEquals("unexpected day content", "25", days.get(25).getText());
  294. assertEquals("unexpected day content", "13", days.get(41).getText());
  295. // close the popup by clicking the input field
  296. dateField.findElement(By.tagName("input")).click();
  297. assertFalse("popup found when there should be none",
  298. isElementPresent(By.className("v-datefield-popup")));
  299. }
  300. @Test
  301. public void testThirdDateField() throws InterruptedException {
  302. DateFieldElement dateField = $(DateFieldElement.class).all().get(2);
  303. ButtonElement button = $(ButtonElement.class).first();
  304. // change the date
  305. button.click();
  306. sleep(100);
  307. // open the popup
  308. dateField.findElement(By.tagName("button")).click();
  309. assertTrue("popup not found when there should be one",
  310. isElementPresent(By.className("v-datefield-popup")));
  311. // verify contents
  312. WebElement popup = findElement(By.className("v-datefield-popup"));
  313. assertEquals(
  314. "unexpected month",
  315. "helmikuu 2010",
  316. popup.findElements(
  317. By.className("v-datefield-calendarpanel-month")).get(1)
  318. .getText());
  319. List<WebElement> headerElements = popup.findElement(
  320. By.className("v-datefield-calendarpanel-weekdays"))
  321. .findElements(By.tagName("td"));
  322. List<WebElement> weekdays = new ArrayList<WebElement>();
  323. for (WebElement headerElement : headerElements) {
  324. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  325. weekdays.add(headerElement);
  326. }
  327. }
  328. assertEquals("unexpected weekday count", 7, weekdays.size());
  329. assertEquals("unexpected first day of week", "MA", weekdays.get(0)
  330. .getText());
  331. List<WebElement> weeknumbers = popup.findElements(By
  332. .className("v-datefield-calendarpanel-weeknumber"));
  333. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  334. assertEquals("unexpected weeknumber content", "5", weeknumbers.get(0)
  335. .getText());
  336. assertEquals("unexpected weeknumber content", "10", weeknumbers.get(5)
  337. .getText());
  338. assertEquals(
  339. "unexpected selection",
  340. "16",
  341. popup.findElement(
  342. By.className("v-datefield-calendarpanel-day-selected"))
  343. .getText());
  344. assertEquals(
  345. "unexpected focus",
  346. "16",
  347. popup.findElement(
  348. By.className("v-datefield-calendarpanel-day-focused"))
  349. .getText());
  350. List<WebElement> days = popup.findElements(By
  351. .className("v-datefield-calendarpanel-day"));
  352. assertEquals("unexpected day count", 42, days.size());
  353. assertEquals("unexpected day content", "1", days.get(0).getText());
  354. assertEquals("unexpected day content", "9", days.get(8).getText());
  355. assertEquals("unexpected day content", "26", days.get(25).getText());
  356. assertEquals("unexpected day content", "14", days.get(41).getText());
  357. // navigate to previous month
  358. WebElement popupBody = popup.findElement(By
  359. .className("v-datefield-calendarpanel"));
  360. new Actions(driver).keyDown(Keys.SHIFT).perform();
  361. popupBody.sendKeys(Keys.ARROW_LEFT);
  362. new Actions(driver).keyUp(Keys.SHIFT).perform();
  363. // TODO: remove this once #14406 has been fixed
  364. if (BrowserUtil.isIE(getDesiredCapabilities())
  365. && !BrowserUtil.isIE8(getDesiredCapabilities())) {
  366. popup.findElement(
  367. By.className("v-datefield-calendarpanel-prevmonth"))
  368. .findElement(By.tagName("button")).click();
  369. }
  370. // verify contents
  371. assertEquals(
  372. "unexpected month",
  373. "tammikuu 2010",
  374. popup.findElements(
  375. By.className("v-datefield-calendarpanel-month")).get(1)
  376. .getText());
  377. weeknumbers = popup.findElements(By
  378. .className("v-datefield-calendarpanel-weeknumber"));
  379. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  380. assertEquals("unexpected weeknumber content", "53", weeknumbers.get(0)
  381. .getText());
  382. assertEquals("unexpected weeknumber content", "5", weeknumbers.get(5)
  383. .getText());
  384. assertEquals(
  385. "unexpected selection",
  386. 0,
  387. popup.findElements(
  388. By.className("v-datefield-calendarpanel-day-selected"))
  389. .size());
  390. // TODO: remove this check once #14406 has been fixed -- clicking the
  391. // button instead of navigating with arrow keys steals the focus
  392. if (!BrowserUtil.isIE(getDesiredCapabilities())
  393. || BrowserUtil.isIE8(getDesiredCapabilities())) {
  394. assertEquals(
  395. "unexpected focus",
  396. "16",
  397. popup.findElement(
  398. By.className("v-datefield-calendarpanel-day-focused"))
  399. .getText());
  400. }
  401. days = popup
  402. .findElements(By.className("v-datefield-calendarpanel-day"));
  403. assertEquals("unexpected day count", 42, days.size());
  404. assertEquals("unexpected day content", "28", days.get(0).getText());
  405. assertEquals("unexpected day content", "5", days.get(8).getText());
  406. assertEquals("unexpected day content", "22", days.get(25).getText());
  407. assertEquals("unexpected day content", "7", days.get(41).getText());
  408. // navigate to previous year
  409. new Actions(driver).keyDown(Keys.SHIFT).perform();
  410. popupBody.sendKeys(Keys.ARROW_DOWN);
  411. new Actions(driver).keyUp(Keys.SHIFT).perform();
  412. // TODO: remove this once #14406 has been fixed
  413. popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
  414. .findElement(By.tagName("button")).click();
  415. // verify contents
  416. assertEquals(
  417. "unexpected month",
  418. "tammikuu 2009",
  419. popup.findElements(
  420. By.className("v-datefield-calendarpanel-month")).get(1)
  421. .getText());
  422. weeknumbers = popup.findElements(By
  423. .className("v-datefield-calendarpanel-weeknumber"));
  424. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  425. assertEquals("unexpected weeknumber content", "1", weeknumbers.get(0)
  426. .getText());
  427. assertEquals("unexpected weeknumber content", "6", weeknumbers.get(5)
  428. .getText());
  429. assertEquals(
  430. "unexpected selection",
  431. 0,
  432. popup.findElements(
  433. By.className("v-datefield-calendarpanel-day-selected"))
  434. .size());
  435. // TODO: remove this check once #14406 has been fixed -- clicking the
  436. // button instead of navigating with arrow keys steals the focus
  437. if (false) {
  438. assertEquals(
  439. "unexpected focus",
  440. "16",
  441. popup.findElement(
  442. By.className("v-datefield-calendarpanel-day-focused"))
  443. .getText());
  444. }
  445. days = popup
  446. .findElements(By.className("v-datefield-calendarpanel-day"));
  447. assertEquals("unexpected day count", 42, days.size());
  448. assertEquals("unexpected day content", "29", days.get(0).getText());
  449. assertEquals("unexpected day content", "6", days.get(8).getText());
  450. assertEquals("unexpected day content", "23", days.get(25).getText());
  451. assertEquals("unexpected day content", "8", days.get(41).getText());
  452. // close the popup by clicking an unrelated element
  453. button.click();
  454. assertFalse("popup found when there should be none",
  455. isElementPresent(By.className("v-datefield-popup")));
  456. }
  457. }