Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

HtmlImportUITest.java 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package com.vaadin.tests.htmlimport;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertTrue;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import org.junit.Test;
  9. import org.openqa.selenium.WebElement;
  10. import com.vaadin.testbench.By;
  11. import com.vaadin.tests.tb3.MultiBrowserTest;
  12. public class HtmlImportUITest extends MultiBrowserTest {
  13. @Test
  14. public void importsLoadedAfterJs() {
  15. openTestURL();
  16. WebElement log = findElement(By.id("clientlog")); // Defined by ui.js
  17. List<WebElement> messages = log.findElements(By.className("message"));
  18. // assertEquals("Some log messages are missing or extra", 3,
  19. // messages.size());
  20. // JS before HTML, UI deps in bootstrap, rest dynamically
  21. // ui.js just sets up the logging
  22. assertEquals("ui.html", messages.get(0).getText());
  23. // Apparently Chrome does not guarantee that "label.js" is executed
  24. // before "label.html", at least in the way we are loading HTML and JS.
  25. // Therefore, this just checks the order of the import statements
  26. List<WebElement> headContents = findElements(By.xpath("//head/*"));
  27. Map<String, Integer> htmlImportIndexes = new HashMap<String, Integer>();
  28. Map<String, Integer> jsIndexes = new HashMap<String, Integer>();
  29. for (int i = 0; i < headContents.size(); i++) {
  30. WebElement e = headContents.get(i);
  31. if (e.getTagName().equalsIgnoreCase("link")
  32. && e.getAttribute("rel").equalsIgnoreCase("import")) {
  33. // HTML import
  34. String href = e.getAttribute("href");
  35. String file = href.substring(href.lastIndexOf('/') + 1);
  36. assertFalse("Multiple HTML imports for " + file,
  37. htmlImportIndexes.containsKey(file));
  38. htmlImportIndexes.put(file, i);
  39. } else if (e.getTagName().equalsIgnoreCase("script")) {
  40. // JS
  41. String src = e.getAttribute("src");
  42. String file = src.substring(src.lastIndexOf('/') + 1);
  43. assertFalse("Multiple script tags for " + file,
  44. jsIndexes.containsKey(file));
  45. jsIndexes.put(file, i);
  46. }
  47. }
  48. // label.* + label2.* are from super + sub class loaded in
  49. // that defined order
  50. // labelX.* are on another component so it can come before or after
  51. int superJsIndex = jsIndexes.get("label.js");
  52. int superHtmlIndex = htmlImportIndexes.get("label.html");
  53. int subJsIndex = jsIndexes.get("label2.js");
  54. int subHtmlIndex = htmlImportIndexes.get("label2.html");
  55. int otherJsIndex = jsIndexes.get("labelX.js");
  56. int otherHtmlIndex = htmlImportIndexes.get("labelX.html");
  57. assertTrue("super js should be before super html",
  58. superJsIndex < superHtmlIndex);
  59. assertTrue("super dependencies should be before sub js",
  60. superHtmlIndex < subJsIndex);
  61. assertTrue("sub js should be before sub html",
  62. subJsIndex < subHtmlIndex);
  63. }
  64. }