aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/WEB-INF/web.xml15
-rw-r--r--WebContent/statictestfiles/browserfeatures/WebkitPositionAbsoluteScrollbars.html69
-rw-r--r--client/src/com/vaadin/client/ApplicationConnection.java3
-rw-r--r--client/src/com/vaadin/client/communication/AtmospherePushConnection.java12
-rw-r--r--client/src/com/vaadin/client/ui/VTabsheet.java11
-rw-r--r--client/src/com/vaadin/client/ui/VTreeTable.java2
-rw-r--r--client/src/com/vaadin/client/ui/tree/TreeConnector.java20
-rw-r--r--server/src/com/vaadin/event/EventRouter.java39
-rw-r--r--server/src/com/vaadin/server/VaadinService.java15
-rw-r--r--server/src/com/vaadin/ui/AbstractField.java17
-rw-r--r--server/tests/src/com/vaadin/tests/event/EventRouterTest.java111
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/abstractfield/AbsFieldValueConversionError.java15
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandler.java6
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandlerImpl.java10
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java2
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java1604
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj75
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Token.java2
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java2
-rw-r--r--theme-compiler/tests/resources/sasslang/css/106-test_pseudoclass_remains_at_end_of_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/106-test_pseudoclass_remains_at_end_of_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/107-test_pseudoelement_goes_lefter_than_not.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/107-test_pseudoelement_goes_lefter_than_not.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/108-test_pseudoelement_goes_lefter_than_pseudoclass.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/108-test_pseudoelement_goes_lefter_than_pseudoclass.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/109-test_pseudoelement_remains_at_end_of_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/109-test_pseudoelement_remains_at_end_of_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/110-test_redundant_selector_elimination.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/110-test_redundant_selector_elimination.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/112-test_target_with_child.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/112-test_target_with_child.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/2-test_basic.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/2-test_basic.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/33-test_extend_redundancy_elimination_never_eliminates_base_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/33-test_extend_redundancy_elimination_never_eliminates_base_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/333-test_empty_content.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/333-test_empty_content.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/350-test_interpolation.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/350-test_interpolation.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/368-test_mixins_with_args.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/368-test_mixins_with_args.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/369-test_mixins_with_empty_args.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/369-test_mixins_with_empty_args.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/390-test_parent_selector_with_parent_and_subject.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/390-test_parent_selector_with_parent_and_subject.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/420-test_warn_directive.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/420-test_warn_directive.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/55-test_long_extendee.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/55-test_long_extendee.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/63-test_multiple_extendees.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/63-test_multiple_extendees.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/65-test_multiple_extends_with_multiple_extenders_and_single_target.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/65-test_multiple_extends_with_multiple_extenders_and_single_target.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/66-test_multiple_extends_with_single_extender_and_single_target.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/66-test_multiple_extends_with_single_extender_and_single_target.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/67-test_multiple_targets.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/67-test_multiple_targets.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/7-test_combinator_unification_angle_sibling.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/7-test_combinator_unification_angle_sibling.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/70-test_nested_extender.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/70-test_nested_extender.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/80-test_nested_extender_merges_with_same_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/80-test_nested_extender_merges_with_same_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/81-test_nested_extender_runs_unification.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/81-test_nested_extender_runs_unification.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/85-test_nested_extender_with_child_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/85-test_nested_extender_with_child_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/86-test_nested_extender_with_child_selector_merges_with_same_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/86-test_nested_extender_with_child_selector_merges_with_same_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/90-test_nested_extender_with_sibling_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/90-test_nested_extender_with_sibling_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/91-test_nested_selector_with_child_selector_hack_extendee.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/91-test_nested_selector_with_child_selector_hack_extendee.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/96-test_nested_target.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/96-test_nested_target.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/css/98-test_not_remains_at_end_of_selector.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/98-test_not_remains_at_end_of_selector.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/106-test_pseudoclass_remains_at_end_of_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/106-test_pseudoclass_remains_at_end_of_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/107-test_pseudoelement_goes_lefter_than_not.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/107-test_pseudoelement_goes_lefter_than_not.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/108-test_pseudoelement_goes_lefter_than_pseudoclass.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/108-test_pseudoelement_goes_lefter_than_pseudoclass.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/109-test_pseudoelement_remains_at_end_of_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/109-test_pseudoelement_remains_at_end_of_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/110-test_redundant_selector_elimination.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/110-test_redundant_selector_elimination.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/112-test_target_with_child.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/112-test_target_with_child.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/2-test_basic.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/2-test_basic.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/33-test_extend_redundancy_elimination_never_eliminates_base_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/33-test_extend_redundancy_elimination_never_eliminates_base_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/333-test_empty_content.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/333-test_empty_content.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/350-test_interpolation.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/350-test_interpolation.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/368-test_mixins_with_args.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/368-test_mixins_with_args.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/369-test_mixins_with_empty_args.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/369-test_mixins_with_empty_args.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/390-test_parent_selector_with_parent_and_subject.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/390-test_parent_selector_with_parent_and_subject.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/420-test_warn_directive.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/420-test_warn_directive.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/55-test_long_extendee.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/55-test_long_extendee.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/63-test_multiple_extendees.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/63-test_multiple_extendees.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/65-test_multiple_extends_with_multiple_extenders_and_single_target.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/65-test_multiple_extends_with_multiple_extenders_and_single_target.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/66-test_multiple_extends_with_single_extender_and_single_target.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/66-test_multiple_extends_with_single_extender_and_single_target.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/67-test_multiple_targets.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/67-test_multiple_targets.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/7-test_combinator_unification_angle_sibling.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/7-test_combinator_unification_angle_sibling.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/70-test_nested_extender.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/70-test_nested_extender.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/80-test_nested_extender_merges_with_same_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/80-test_nested_extender_merges_with_same_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/81-test_nested_extender_runs_unification.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/81-test_nested_extender_runs_unification.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/85-test_nested_extender_with_child_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/85-test_nested_extender_with_child_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/86-test_nested_extender_with_child_selector_merges_with_same_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/86-test_nested_extender_with_child_selector_merges_with_same_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/90-test_nested_extender_with_sibling_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/90-test_nested_extender_with_sibling_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/91-test_nested_selector_with_child_selector_hack_extendee.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/91-test_nested_selector_with_child_selector_hack_extendee.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/96-test_nested_target.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/96-test_nested_target.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/98-test_not_remains_at_end_of_selector.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/98-test_not_remains_at_end_of_selector.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslangbroken/css/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.css (renamed from theme-compiler/tests/resources/sasslang/css/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.css)0
-rw-r--r--theme-compiler/tests/resources/sasslangbroken/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css (renamed from theme-compiler/tests/resources/sasslang/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css)0
-rw-r--r--theme-compiler/tests/resources/sasslangbroken/scss/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.scss (renamed from theme-compiler/tests/resources/sasslang/scss/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.scss)0
-rw-r--r--theme-compiler/tests/resources/sasslangbroken/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss (renamed from theme-compiler/tests/resources/sasslang/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss)0
-rw-r--r--uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java2
-rw-r--r--uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.html26
-rw-r--r--uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.java49
-rw-r--r--uitest/src/com/vaadin/tests/browserfeatures/WebkitPositionAbsoluteScrollbarsTest.java39
-rw-r--r--uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClick.java53
-rw-r--r--uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClickTest.java69
-rw-r--r--uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivity.java74
-rw-r--r--uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivityTest.java85
-rw-r--r--uitest/src/com/vaadin/tests/components/window/SubWindowsTextSelectionTest.java3
-rw-r--r--uitest/src/com/vaadin/tests/push/BasicPushTest.java2
-rw-r--r--uitest/src/com/vaadin/tests/push/ExtremelyLongPushTime.java50
-rw-r--r--uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreaming.java33
-rw-r--r--uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreamingTest.java21
-rw-r--r--uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeTest.java67
-rw-r--r--uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocket.java34
-rw-r--r--uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocketTest.java31
-rw-r--r--uitest/src/com/vaadin/tests/push/IdlePushChannelStreamingTest.java23
-rw-r--r--uitest/src/com/vaadin/tests/push/IdlePushChannelTest.java37
-rw-r--r--uitest/src/com/vaadin/tests/push/IdlePushChannelWebsocketTest.java35
-rw-r--r--uitest/src/com/vaadin/tests/push/PushLargeData.java12
-rw-r--r--uitest/src/com/vaadin/tests/push/PushLargeDataStreamingTest.java4
-rw-r--r--uitest/src/com/vaadin/tests/push/PushLargeDataWebsocketTest.java4
-rw-r--r--uitest/src/com/vaadin/tests/push/TogglePushTest.java4
-rw-r--r--uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java23
-rw-r--r--uitest/src/com/vaadin/tests/tb3/ExcludeFromSuite.java28
-rw-r--r--uitest/src/com/vaadin/tests/tb3/TB3TestSuite.java18
113 files changed, 1987 insertions, 869 deletions
diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml
index 8a917966a1..f98b7c78d1 100644
--- a/WebContent/WEB-INF/web.xml
+++ b/WebContent/WEB-INF/web.xml
@@ -77,6 +77,16 @@
</servlet>
<servlet>
+ <!--
+ This servlet is a separate instance for the sole purpose of
+ testing #12446 (com.vaadin.tests.components.ui.TimeoutRedirectResetsOnActivity)
+ because it modifies the VaadinService timeout parameters
+ -->
+ <servlet-name>VaadinApplicationRunnerWithTimeoutRedirect</servlet-name>
+ <servlet-class>com.vaadin.launcher.ApplicationRunnerServlet</servlet-class>
+ </servlet>
+
+ <servlet>
<servlet-name>VaadinApplicationRunnerWithPush</servlet-name>
<servlet-class>com.vaadin.launcher.ApplicationRunnerServlet</servlet-class>
<init-param>
@@ -117,6 +127,11 @@
</servlet-mapping>
<servlet-mapping>
+ <servlet-name>VaadinApplicationRunnerWithTimeoutRedirect</servlet-name>
+ <url-pattern>/12446/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
<servlet-name>VaadinApplicationRunnerWithPush</servlet-name>
<url-pattern>/run-push/*</url-pattern>
</servlet-mapping>
diff --git a/WebContent/statictestfiles/browserfeatures/WebkitPositionAbsoluteScrollbars.html b/WebContent/statictestfiles/browserfeatures/WebkitPositionAbsoluteScrollbars.html
new file mode 100644
index 0000000000..7547816006
--- /dev/null
+++ b/WebContent/statictestfiles/browserfeatures/WebkitPositionAbsoluteScrollbars.html
@@ -0,0 +1,69 @@
+<!doctype>
+<html><head>
+ <style>
+ #spacer {
+ width: 100px;
+ height: 100px;
+ background: blue;
+ }
+ #scrollable {
+ background: white;
+ border: 1px solid black;
+ overflow: auto;
+ position: relative;
+ width: 250px;
+ }
+ #container {
+ position:relative;
+ display:inline-block;
+ width:100%;
+ height:130px;
+ }
+ #margin {
+ position: absolute;
+ width: 200px;
+ top: 12px;
+ margin-right: 12px;
+ left: 12px;
+ height: 110px;
+ }
+ </style>
+ </head>
+ <body>
+ <div>
+ Starting point: No horizontal scrollbar<br/>
+ Expected: Get back to starting point after clicking through steps (do 1, do 2, cancel 1, cancel 2)<br/>
+ Actual: Scrollbars after doing the steps<br/><br/>
+ </div>
+<button id="step1" onclick="step1();">Step 1 - Enlarge container</button>
+<button id="step2" onclick="step2();">Step 2 - Move child</button>
+<button id="step3" onclick="step3();">Step 3 - Reduce container</button>
+<button id="step4" onclick="step4();">Step 4 - Return child</button>
+<div id="scrollable">
+<div id="container">
+<div id="margin" style="">
+<div id="spacer" style="height: 100px; width: 100%;">
+</div>
+</div>
+</div>
+</div>
+
+<script>
+function step1() {
+ document.getElementById("container").style.width="110%";
+}
+function step2() {
+ document.getElementById("margin").style.left="200px";
+}
+function step3() {
+ document.getElementById("container").style.width="100%";
+}
+function step4() {
+ document.getElementById("margin").style.left="12px";
+}
+
+</script>
+
+
+</body>
+</html>
diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java
index 68fb57b8c0..156249f7e4 100644
--- a/client/src/com/vaadin/client/ApplicationConnection.java
+++ b/client/src/com/vaadin/client/ApplicationConnection.java
@@ -1426,6 +1426,9 @@ public class ApplicationConnection {
if (meta.containsKey("timedRedirect")) {
final ValueMap timedRedirect = meta
.getValueMap("timedRedirect");
+ if (redirectTimer != null) {
+ redirectTimer.cancel();
+ }
redirectTimer = new Timer() {
@Override
public void run() {
diff --git a/client/src/com/vaadin/client/communication/AtmospherePushConnection.java b/client/src/com/vaadin/client/communication/AtmospherePushConnection.java
index 320ba9ebe7..95584412cd 100644
--- a/client/src/com/vaadin/client/communication/AtmospherePushConnection.java
+++ b/client/src/com/vaadin/client/communication/AtmospherePushConnection.java
@@ -348,6 +348,14 @@ public class AtmospherePushConnection implements PushConnection {
state = State.CONNECT_PENDING;
}
+ protected void onClientTimeout(AtmosphereResponse response) {
+ state = State.DISCONNECTED;
+ errorHandler
+ .onError(
+ "Client unexpectedly disconnected. Ensure client timeout is disabled.",
+ -1);
+ }
+
protected void onReconnect(JavaScriptObject request,
final AtmosphereResponse response) {
if (state == State.CONNECTED) {
@@ -442,6 +450,7 @@ public class AtmospherePushConnection implements PushConnection {
fallbackTransport: 'streaming',
contentType: 'application/json; charset=UTF-8',
reconnectInterval: 5000,
+ timeout: -1,
maxReconnectOnClose: 10000000,
trackMessageLength: true,
enableProtocol: false,
@@ -476,6 +485,9 @@ public class AtmospherePushConnection implements PushConnection {
config.onReconnect = $entry(function(request, response) {
self.@com.vaadin.client.communication.AtmospherePushConnection::onReconnect(*)(request, response);
});
+ config.onClientTimeout = $entry(function(request) {
+ self.@com.vaadin.client.communication.AtmospherePushConnection::onClientTimeout(*)(request);
+ });
return $wnd.jQueryVaadin.atmosphere.subscribe(config);
}-*/;
diff --git a/client/src/com/vaadin/client/ui/VTabsheet.java b/client/src/com/vaadin/client/ui/VTabsheet.java
index 1275308ed7..379b6107f4 100644
--- a/client/src/com/vaadin/client/ui/VTabsheet.java
+++ b/client/src/com/vaadin/client/ui/VTabsheet.java
@@ -840,6 +840,10 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
if (tab == null) {
tab = tb.addTab();
}
+ if (selected) {
+ renderContent(tabUidl.getChildUIDL(0));
+ tb.selectTab(index);
+ }
tab.updateFromUIDL(tabUidl);
tab.setEnabledOnServer((!disabledTabKeys.contains(tabKeys.get(index))));
tab.setHiddenOnServer(hidden);
@@ -856,11 +860,6 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
* and tabs won't be too narrow in certain browsers
*/
tab.recalculateCaptionWidth();
-
- if (selected) {
- renderContent(tabUidl.getChildUIDL(0));
- tb.selectTab(index);
- }
}
/**
@@ -1087,7 +1086,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
@Override
public void onBlur(BlurEvent event) {
- if (focusedTab != null && event.getSource() instanceof Tab) {
+ if (focusedTab != null && focusedTab == event.getSource()) {
focusedTab = null;
if (client.hasEventListeners(this, EventId.BLUR)) {
client.updateVariable(id, EventId.BLUR, "", true);
diff --git a/client/src/com/vaadin/client/ui/VTreeTable.java b/client/src/com/vaadin/client/ui/VTreeTable.java
index 097b9c7ab2..54c9c2d30c 100644
--- a/client/src/com/vaadin/client/ui/VTreeTable.java
+++ b/client/src/com/vaadin/client/ui/VTreeTable.java
@@ -131,7 +131,7 @@ public class VTreeTable extends VScrollTable {
private int indentWidth = -1;
private int maxIndent = 0;
- VTreeTableScrollBody() {
+ protected VTreeTableScrollBody() {
super();
}
diff --git a/client/src/com/vaadin/client/ui/tree/TreeConnector.java b/client/src/com/vaadin/client/ui/tree/TreeConnector.java
index ef016c31b7..7560a0f56b 100644
--- a/client/src/com/vaadin/client/ui/tree/TreeConnector.java
+++ b/client/src/com/vaadin/client/ui/tree/TreeConnector.java
@@ -18,6 +18,7 @@ package com.vaadin.client.ui.tree;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import com.google.gwt.aria.client.Roles;
import com.google.gwt.dom.client.Element;
@@ -136,9 +137,24 @@ public class TreeConnector extends AbstractComponentConnector implements
getWidget().lastSelection = getWidget().getNodeByKey(
getWidget().lastSelection.key);
}
+
if (getWidget().focusedNode != null) {
- getWidget().setFocusedNode(
- getWidget().getNodeByKey(getWidget().focusedNode.key));
+
+ Set<String> selectedIds = getWidget().selectedIds;
+
+ // If the focused node is not between the selected nodes, we need to
+ // refresh the focused node to prevent an undesired scroll. #12618.
+ if (!selectedIds.isEmpty()
+ && !selectedIds.contains(getWidget().focusedNode.key)) {
+ String keySelectedId = selectedIds.iterator().next();
+
+ TreeNode nodeToSelect = getWidget().getNodeByKey(keySelectedId);
+
+ getWidget().setFocusedNode(nodeToSelect);
+ } else {
+ getWidget().setFocusedNode(
+ getWidget().getNodeByKey(getWidget().focusedNode.key));
+ }
}
if (getWidget().lastSelection == null
diff --git a/server/src/com/vaadin/event/EventRouter.java b/server/src/com/vaadin/event/EventRouter.java
index 73bfa33881..fdc543143b 100644
--- a/server/src/com/vaadin/event/EventRouter.java
+++ b/server/src/com/vaadin/event/EventRouter.java
@@ -23,6 +23,10 @@ import java.util.EventObject;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.logging.Logger;
+
+import com.vaadin.server.ErrorEvent;
+import com.vaadin.server.ErrorHandler;
/**
* <code>EventRouter</code> class implementing the inheritable event listening
@@ -154,6 +158,25 @@ public class EventRouter implements MethodEventSource {
* the Event to be sent to all listeners.
*/
public void fireEvent(EventObject event) {
+ fireEvent(event, null);
+ }
+
+ /**
+ * Sends an event to all registered listeners. The listeners will decide if
+ * the activation method should be called or not.
+ * <p>
+ * If an error handler is set, the processing of other listeners will
+ * continue after the error handler method call unless the error handler
+ * itself throws an exception.
+ *
+ * @param event
+ * the Event to be sent to all listeners.
+ * @param errorHandler
+ * error handler to use to handle any exceptions thrown by
+ * listeners or null to let the exception propagate to the
+ * caller, preventing further listener calls
+ */
+ public void fireEvent(EventObject event, ErrorHandler errorHandler) {
// It is not necessary to send any events if there are no listeners
if (listenerList != null) {
@@ -164,7 +187,16 @@ public class EventRouter implements MethodEventSource {
// will filter out unwanted events.
final Object[] listeners = listenerList.toArray();
for (int i = 0; i < listeners.length; i++) {
- ((ListenerMethod) listeners[i]).receiveEvent(event);
+ ListenerMethod listenerMethod = (ListenerMethod) listeners[i];
+ if (null != errorHandler) {
+ try {
+ listenerMethod.receiveEvent(event);
+ } catch (Exception e) {
+ errorHandler.error(new ErrorEvent(e));
+ }
+ } else {
+ listenerMethod.receiveEvent(event);
+ }
}
}
@@ -208,4 +240,9 @@ public class EventRouter implements MethodEventSource {
}
return listeners;
}
+
+ private Logger getLogger() {
+ return Logger.getLogger(EventRouter.class.getName());
+ }
+
}
diff --git a/server/src/com/vaadin/server/VaadinService.java b/server/src/com/vaadin/server/VaadinService.java
index 44ceaaaf87..216adce3c8 100644
--- a/server/src/com/vaadin/server/VaadinService.java
+++ b/server/src/com/vaadin/server/VaadinService.java
@@ -414,6 +414,9 @@ public abstract class VaadinService implements Serializable {
/**
* Adds a listener that gets notified when a Vaadin service session that has
* been initialized for this service is destroyed.
+ * <p>
+ * The session being destroyed is locked and its UIs have been removed when
+ * the listeners are called.
*
* @see #addSessionInitListener(SessionInitListener)
*
@@ -455,8 +458,11 @@ public abstract class VaadinService implements Serializable {
}
});
}
+ // for now, use the session error handler; in the future, could
+ // have an API for using some other handler for session init and
+ // destroy listeners
eventRouter.fireEvent(new SessionDestroyEvent(
- VaadinService.this, session));
+ VaadinService.this, session), session.getErrorHandler());
}
});
}
@@ -770,7 +776,12 @@ public abstract class VaadinService implements Serializable {
private void onVaadinSessionStarted(VaadinRequest request,
VaadinSession session) throws ServiceException {
- eventRouter.fireEvent(new SessionInitEvent(this, session, request));
+ // for now, use the session error handler; in the future, could have an
+ // API for using some other handler for session init and destroy
+ // listeners
+
+ eventRouter.fireEvent(new SessionInitEvent(this, session, request),
+ session.getErrorHandler());
ServletPortletHelper.checkUiProviders(session, this);
}
diff --git a/server/src/com/vaadin/ui/AbstractField.java b/server/src/com/vaadin/ui/AbstractField.java
index 6a52d6b849..b96e331889 100644
--- a/server/src/com/vaadin/ui/AbstractField.java
+++ b/server/src/com/vaadin/ui/AbstractField.java
@@ -783,15 +783,16 @@ public abstract class AbstractField<T> extends AbstractComponent implements
ConversionException e) {
String conversionError = getConversionError();
- if (dataSourceType != null) {
- conversionError = conversionError.replace("{0}",
- dataSourceType.getSimpleName());
- }
- if (e != null) {
- conversionError = conversionError.replace("{1}",
- e.getLocalizedMessage());
+ if (conversionError != null) {
+ if (dataSourceType != null) {
+ conversionError = conversionError.replace("{0}",
+ dataSourceType.getSimpleName());
+ }
+ if (e != null) {
+ conversionError = conversionError.replace("{1}",
+ e.getLocalizedMessage());
+ }
}
-
return conversionError;
}
diff --git a/server/tests/src/com/vaadin/tests/event/EventRouterTest.java b/server/tests/src/com/vaadin/tests/event/EventRouterTest.java
new file mode 100644
index 0000000000..dbbeaf778e
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/event/EventRouterTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.event;
+
+import java.lang.reflect.Method;
+
+import org.easymock.EasyMock;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.event.EventRouter;
+import com.vaadin.server.ErrorEvent;
+import com.vaadin.server.ErrorHandler;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Component.Listener;
+import com.vaadin.util.ReflectTools;
+
+/**
+ * Test EventRouter and related error handling.
+ */
+public class EventRouterTest {
+
+ private static final Method COMPONENT_EVENT_METHOD = ReflectTools
+ .findMethod(Component.Listener.class, "componentEvent",
+ Component.Event.class);
+
+ private EventRouter router;
+ private Component component;
+ private ErrorHandler errorHandler;
+ private Listener listener;
+
+ @Before
+ public void createMocks() {
+ router = new EventRouter();
+ component = EasyMock.createNiceMock(Component.class);
+ errorHandler = EasyMock.createMock(ErrorHandler.class);
+ listener = EasyMock.createMock(Component.Listener.class);
+ router.addListener(Component.Event.class, listener,
+ COMPONENT_EVENT_METHOD);
+ }
+
+ @Test
+ public void fireEvent_noException_eventReceived() {
+ listener.componentEvent(EasyMock.<Component.Event> anyObject());
+
+ EasyMock.replay(component, listener, errorHandler);
+ router.fireEvent(new Component.Event(component), errorHandler);
+ EasyMock.verify(listener, errorHandler);
+ }
+
+ @Test
+ public void fireEvent_exceptionFromListenerAndNoHandler_exceptionPropagated() {
+ listener.componentEvent(EasyMock.<Component.Event> anyObject());
+ EasyMock.expectLastCall().andThrow(
+ new RuntimeException("listener failed"));
+
+ EasyMock.replay(component, listener);
+ try {
+ router.fireEvent(new Component.Event(component));
+ Assert.fail("Did not receive expected exception from listener");
+ } catch (RuntimeException e) {
+ // e is a ListenerMethod@MethodException
+ Assert.assertEquals("listener failed", e.getCause().getMessage());
+ }
+ EasyMock.verify(listener);
+ }
+
+ @Test
+ public void fireEvent_exceptionFromListener_errorHandlerCalled() {
+ listener.componentEvent(EasyMock.<Component.Event> anyObject());
+ EasyMock.expectLastCall().andThrow(
+ new RuntimeException("listener failed"));
+ errorHandler.error(EasyMock.<ErrorEvent> anyObject());
+
+ EasyMock.replay(component, listener, errorHandler);
+ router.fireEvent(new Component.Event(component), errorHandler);
+ EasyMock.verify(listener, errorHandler);
+ }
+
+ @Test
+ public void fireEvent_multipleListenersAndException_errorHandlerCalled() {
+ Listener listener2 = EasyMock.createMock(Component.Listener.class);
+ router.addListener(Component.Event.class, listener2,
+ COMPONENT_EVENT_METHOD);
+
+ listener.componentEvent(EasyMock.<Component.Event> anyObject());
+ EasyMock.expectLastCall().andThrow(
+ new RuntimeException("listener failed"));
+ errorHandler.error(EasyMock.<ErrorEvent> anyObject());
+ // second listener should be called despite an error in the first
+ listener2.componentEvent(EasyMock.<Component.Event> anyObject());
+
+ EasyMock.replay(component, listener, listener2, errorHandler);
+ router.fireEvent(new Component.Event(component), errorHandler);
+ EasyMock.verify(listener, listener2, errorHandler);
+ }
+}
diff --git a/server/tests/src/com/vaadin/tests/server/component/abstractfield/AbsFieldValueConversionError.java b/server/tests/src/com/vaadin/tests/server/component/abstractfield/AbsFieldValueConversionError.java
index ad762f8931..887f1b8ff3 100644
--- a/server/tests/src/com/vaadin/tests/server/component/abstractfield/AbsFieldValueConversionError.java
+++ b/server/tests/src/com/vaadin/tests/server/component/abstractfield/AbsFieldValueConversionError.java
@@ -54,6 +54,21 @@ public class AbsFieldValueConversionError extends TestCase {
}
+ public void testNullConversionMessages() {
+ TextField tf = new TextField();
+ tf.setConverter(new StringToIntegerConverter());
+ tf.setPropertyDataSource(new MethodProperty<String>(paulaBean, "age"));
+ tf.setConversionError(null);
+ tf.setValue("abc");
+ try {
+ tf.validate();
+ fail();
+ } catch (InvalidValueException e) {
+ Assert.assertEquals(null, e.getMessage());
+ }
+
+ }
+
public void testDefaultConversionErrorMessage() {
TextField tf = new TextField();
tf.setConverter(new StringToIntegerConverter());
diff --git a/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandler.java b/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandler.java
index e6916e5070..3bf6c056c4 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandler.java
@@ -51,8 +51,6 @@ public interface SCSSDocumentHandler extends DocumentHandler {
void endNestedProperties(String name);
- void includeDirective(String name, List<LexicalUnitImpl> args);
-
void importStyle(String uri, SACMediaList media, boolean isURL);
void property(String name, LexicalUnitImpl value, boolean important,
@@ -99,8 +97,8 @@ public interface SCSSDocumentHandler extends DocumentHandler {
void contentDirective();
- void startIncludeContentBlock(String name, List<LexicalUnitImpl> args);
+ void startInclude(String name, List<LexicalUnitImpl> args);
- void endIncludeContentBlock();
+ void endInclude();
}
diff --git a/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandlerImpl.java b/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandlerImpl.java
index 99f00e3889..633ab98b9c 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandlerImpl.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandlerImpl.java
@@ -245,12 +245,6 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
}
@Override
- public void includeDirective(String name, List<LexicalUnitImpl> args) {
- MixinNode node = new MixinNode(name, args);
- nodeStack.peek().appendChild(node);
- }
-
- @Override
public void importStyle(String uri, SACMediaList media, boolean isURL) {
ImportNode node = new ImportNode(uri, media, isURL);
nodeStack.peek().appendChild(node);
@@ -375,7 +369,7 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
}
@Override
- public void startIncludeContentBlock(String name, List<LexicalUnitImpl> args) {
+ public void startInclude(String name, List<LexicalUnitImpl> args) {
MixinNode node = new MixinNode(name, args);
nodeStack.peek().appendChild(node);
nodeStack.push(node);
@@ -383,7 +377,7 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
}
@Override
- public void endIncludeContentBlock() {
+ public void endInclude() {
nodeStack.pop();
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java b/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java
index e43320453c..c22f19451b 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java
@@ -127,4 +127,4 @@ interface CharStream {
void Done();
}
-/* JavaCC - OriginalChecksum=18aae0a549695f0fec96a11297b442bb (do not edit this line) */
+/* JavaCC - OriginalChecksum=deb80d024b50bdc8bfaadaf528157233 (do not edit this line) */
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
index 86d028a7d4..eee53608b5 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
@@ -3908,7 +3908,7 @@ boolean isPseudoElement = false;
break;
case VARIABLE:
name = variableName();
- name = "$"+name;
+ name = "$"+name;
break;
case FUNCTION:
name = functionName();
@@ -3932,8 +3932,24 @@ boolean isPseudoElement = false;
jj_consume_token(-1);
throw new ParseException();
}
+ documentHandler.startInclude(name, args);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case LBRACE:
+ includeDirectiveBlockContents();
+ break;
case SEMICOLON:
+ includeDirectiveTerminator();
+ break;
+ default:
+ jj_la1[165] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ documentHandler.endInclude();
+ }
+
+ final public void includeDirectiveTerminator() throws ParseException {
+ try {
label_110:
while (true) {
jj_consume_token(SEMICOLON);
@@ -3944,7 +3960,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[165] = jj_gen;
+ jj_la1[166] = jj_gen;
break label_111;
}
jj_consume_token(S);
@@ -3954,98 +3970,93 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[166] = jj_gen;
+ jj_la1[167] = jj_gen;
break label_110;
}
}
- documentHandler.includeDirective(name, args);
- break;
- case LBRACE:
- jj_consume_token(LBRACE);
- label_112:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[167] = jj_gen;
- break label_112;
- }
- jj_consume_token(S);
+ } catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
+ }
+ }
+
+ final public void includeDirectiveBlockContents() throws ParseException {
+ jj_consume_token(LBRACE);
+ label_112:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[168] = jj_gen;
+ break label_112;
}
- documentHandler.startIncludeContentBlock(name, args);
- label_113:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case PLUS:
- case PRECEDES:
- case SIBLING:
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case TO:
- case FROM:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case PERCENTAGE:
- case HASH:
- ;
- break;
- default:
- jj_la1[168] = jj_gen;
- break label_113;
- }
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case PLUS:
- case PRECEDES:
- case SIBLING:
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case HASH:
- styleRuleOrDeclarationOrNestedProperties();
- break;
- case TO:
- case FROM:
- case PERCENTAGE:
- keyframeSelector();
- break;
- default:
- jj_la1[169] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ jj_consume_token(S);
+ }
+ label_113:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case TO:
+ case FROM:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case IDENT:
+ case PERCENTAGE:
+ case HASH:
+ ;
+ break;
+ default:
+ jj_la1[169] = jj_gen;
+ break label_113;
}
- jj_consume_token(RBRACE);
- label_114:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[170] = jj_gen;
- break label_114;
- }
- jj_consume_token(S);
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case IDENT:
+ case HASH:
+ styleRuleOrDeclarationOrNestedProperties();
+ break;
+ case TO:
+ case FROM:
+ case PERCENTAGE:
+ keyframeSelector();
+ break;
+ default:
+ jj_la1[170] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
}
- documentHandler.endIncludeContentBlock();
- break;
- default:
- jj_la1[171] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
+ }
+ jj_consume_token(RBRACE);
+ label_114:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[171] = jj_gen;
+ break label_114;
+ }
+ jj_consume_token(S);
}
}
@@ -4662,39 +4673,71 @@ boolean isPseudoElement = false;
final public void debugDirective() throws ParseException {
jj_consume_token(DEBUG_SYM);
- String content = skipStatementUntilSemiColon();
+ String content = skipStatementUntil(new int[] {SEMICOLON,RBRACE});
// TODO should evaluate the content expression, call documentHandler.debugDirective() etc.
System.out.println(content);
- label_141:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[209] = jj_gen;
- break label_141;
+ try {
+ label_141:
+ while (true) {
+ jj_consume_token(SEMICOLON);
+ label_142:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[209] = jj_gen;
+ break label_142;
+ }
+ jj_consume_token(S);
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case SEMICOLON:
+ ;
+ break;
+ default:
+ jj_la1[210] = jj_gen;
+ break label_141;
+ }
}
- jj_consume_token(S);
+ } catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
}
}
final public void warnDirective() throws ParseException {
jj_consume_token(WARN_SYM);
- String content = skipStatementUntilSemiColon();
+ String content = skipStatementUntil(new int[] {SEMICOLON,RBRACE});
// TODO should evaluate the content expression, call documentHandler.warnDirective() etc.
System.err.println(content);
- label_142:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[210] = jj_gen;
- break label_142;
+ try {
+ label_143:
+ while (true) {
+ jj_consume_token(SEMICOLON);
+ label_144:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[211] = jj_gen;
+ break label_144;
+ }
+ jj_consume_token(S);
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case SEMICOLON:
+ ;
+ break;
+ default:
+ jj_la1[212] = jj_gen;
+ break label_143;
+ }
}
- jj_consume_token(S);
+ } catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
}
}
@@ -4718,20 +4761,20 @@ boolean isPseudoElement = false;
exclusive = false;
break;
default:
- jj_la1[211] = jj_gen;
+ jj_la1[213] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
to = skipStatementUntilLeftBrace();
- label_143:
+ label_145:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[212] = jj_gen;
- break label_143;
+ jj_la1[214] = jj_gen;
+ break label_145;
}
jj_consume_token(S);
}
@@ -4752,83 +4795,91 @@ boolean isPseudoElement = false;
final public void extendDirective() throws ParseException {
ArrayList<String> list;
jj_consume_token(EXTEND_SYM);
- label_144:
+ label_146:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[213] = jj_gen;
- break label_144;
+ jj_la1[215] = jj_gen;
+ break label_146;
}
jj_consume_token(S);
}
list = selectorList();
- label_145:
- while (true) {
- jj_consume_token(SEMICOLON);
- label_146:
+ documentHandler.extendDirective(list);
+ try {
+ label_147:
while (true) {
+ jj_consume_token(SEMICOLON);
+ label_148:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[216] = jj_gen;
+ break label_148;
+ }
+ jj_consume_token(S);
+ }
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
+ case SEMICOLON:
;
break;
default:
- jj_la1[214] = jj_gen;
- break label_146;
+ jj_la1[217] = jj_gen;
+ break label_147;
}
- jj_consume_token(S);
- }
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case SEMICOLON:
- ;
- break;
- default:
- jj_la1[215] = jj_gen;
- break label_145;
}
+ } catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
}
- documentHandler.extendDirective(list);
}
final public void contentDirective() throws ParseException {
jj_consume_token(CONTENT_SYM);
- label_147:
+ label_149:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[216] = jj_gen;
- break label_147;
+ jj_la1[218] = jj_gen;
+ break label_149;
}
jj_consume_token(S);
}
- label_148:
- while (true) {
- jj_consume_token(SEMICOLON);
- label_149:
+ try {
+ label_150:
while (true) {
+ jj_consume_token(SEMICOLON);
+ label_151:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[219] = jj_gen;
+ break label_151;
+ }
+ jj_consume_token(S);
+ }
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
+ case SEMICOLON:
;
break;
default:
- jj_la1[217] = jj_gen;
- break label_149;
+ jj_la1[220] = jj_gen;
+ break label_150;
}
- jj_consume_token(S);
- }
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case SEMICOLON:
- ;
- break;
- default:
- jj_la1[218] = jj_gen;
- break label_148;
}
+ } catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
}
documentHandler.contentDirective();
}
@@ -4854,28 +4905,28 @@ boolean isPseudoElement = false;
LexicalUnit exp;
name = property();
jj_consume_token(COLON);
- label_150:
+ label_152:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[219] = jj_gen;
- break label_150;
+ jj_la1[221] = jj_gen;
+ break label_152;
}
jj_consume_token(S);
}
jj_consume_token(LBRACE);
- label_151:
+ label_153:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[220] = jj_gen;
- break label_151;
+ jj_la1[222] = jj_gen;
+ break label_153;
}
jj_consume_token(S);
}
@@ -4886,29 +4937,29 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[221] = jj_gen;
+ jj_la1[223] = jj_gen;
;
}
- label_152:
+ label_154:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[222] = jj_gen;
- break label_152;
+ jj_la1[224] = jj_gen;
+ break label_154;
}
jj_consume_token(SEMICOLON);
- label_153:
+ label_155:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[223] = jj_gen;
- break label_153;
+ jj_la1[225] = jj_gen;
+ break label_155;
}
jj_consume_token(S);
}
@@ -4918,21 +4969,21 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[224] = jj_gen;
+ jj_la1[226] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
documentHandler.endNestedProperties(name);
- label_154:
+ label_156:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[225] = jj_gen;
- break label_154;
+ jj_la1[227] = jj_gen;
+ break label_156;
}
jj_consume_token(S);
}
@@ -4949,7 +5000,7 @@ LexicalUnit exp;
debuggingDirective();
break;
default:
- jj_la1[226] = jj_gen;
+ jj_la1[228] = jj_gen;
if (jj_2_6(2147483647)) {
styleRule();
} else if (jj_2_7(3)) {
@@ -4970,7 +5021,7 @@ LexicalUnit exp;
styleRule();
break;
default:
- jj_la1[227] = jj_gen;
+ jj_la1[229] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5015,15 +5066,15 @@ LexicalUnit exp;
name = property();
save = token;
jj_consume_token(COLON);
- label_155:
+ label_157:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[228] = jj_gen;
- break label_155;
+ jj_la1[230] = jj_gen;
+ break label_157;
}
jj_consume_token(S);
}
@@ -5067,7 +5118,7 @@ LexicalUnit exp;
important = prio();
break;
default:
- jj_la1[229] = jj_gen;
+ jj_la1[231] = jj_gen;
;
}
Token next = getToken(1);
@@ -5086,15 +5137,15 @@ LexicalUnit exp;
break;
case LBRACE:
jj_consume_token(LBRACE);
- label_156:
+ label_158:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[230] = jj_gen;
- break label_156;
+ jj_la1[232] = jj_gen;
+ break label_158;
}
jj_consume_token(S);
}
@@ -5105,29 +5156,29 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[231] = jj_gen;
+ jj_la1[233] = jj_gen;
;
}
- label_157:
+ label_159:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[232] = jj_gen;
- break label_157;
+ jj_la1[234] = jj_gen;
+ break label_159;
}
jj_consume_token(SEMICOLON);
- label_158:
+ label_160:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[233] = jj_gen;
- break label_158;
+ jj_la1[235] = jj_gen;
+ break label_160;
}
jj_consume_token(S);
}
@@ -5137,27 +5188,27 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[234] = jj_gen;
+ jj_la1[236] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
- label_159:
+ label_161:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[235] = jj_gen;
- break label_159;
+ jj_la1[237] = jj_gen;
+ break label_161;
}
jj_consume_token(S);
}
documentHandler.endNestedProperties(name);
break;
default:
- jj_la1[236] = jj_gen;
+ jj_la1[238] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5207,15 +5258,15 @@ LexicalUnit exp;
name = property();
save = token;
jj_consume_token(COLON);
- label_160:
+ label_162:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[237] = jj_gen;
- break label_160;
+ jj_la1[239] = jj_gen;
+ break label_162;
}
jj_consume_token(S);
}
@@ -5225,7 +5276,7 @@ LexicalUnit exp;
important = prio();
break;
default:
- jj_la1[238] = jj_gen;
+ jj_la1[240] = jj_gen;
;
}
documentHandler.property(name, exp, important);
@@ -5268,15 +5319,15 @@ LexicalUnit exp;
*/
final public boolean prio() throws ParseException {
jj_consume_token(IMPORTANT_SYM);
- label_161:
+ label_163:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[239] = jj_gen;
- break label_161;
+ jj_la1[241] = jj_gen;
+ break label_163;
}
jj_consume_token(S);
}
@@ -5286,15 +5337,15 @@ LexicalUnit exp;
final public boolean guarded() throws ParseException {
jj_consume_token(GUARDED_SYM);
- label_162:
+ label_164:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[240] = jj_gen;
- break label_162;
+ jj_la1[242] = jj_gen;
+ break label_164;
}
jj_consume_token(S);
}
@@ -5319,15 +5370,15 @@ LexicalUnit exp;
* 3. parenthesis is not supported now.
*/
n = jj_consume_token(COMMA);
- label_163:
+ label_165:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[241] = jj_gen;
- break label_163;
+ jj_la1[243] = jj_gen;
+ break label_165;
}
jj_consume_token(S);
}
@@ -5337,15 +5388,15 @@ LexicalUnit exp;
break;
case DIV:
n = jj_consume_token(DIV);
- label_164:
+ label_166:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[242] = jj_gen;
- break label_164;
+ jj_la1[244] = jj_gen;
+ break label_166;
}
jj_consume_token(S);
}
@@ -5355,15 +5406,15 @@ LexicalUnit exp;
break;
case ANY:
n = jj_consume_token(ANY);
- label_165:
+ label_167:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[243] = jj_gen;
- break label_165;
+ jj_la1[245] = jj_gen;
+ break label_167;
}
jj_consume_token(S);
}
@@ -5373,15 +5424,15 @@ LexicalUnit exp;
break;
case MOD:
n = jj_consume_token(MOD);
- label_166:
+ label_168:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[244] = jj_gen;
- break label_166;
+ jj_la1[246] = jj_gen;
+ break label_168;
}
jj_consume_token(S);
}
@@ -5391,7 +5442,7 @@ LexicalUnit exp;
break;
case PLUS:
n = jj_consume_token(PLUS);
- label_167:
+ label_169:
while (true) {
jj_consume_token(S);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -5399,8 +5450,8 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[245] = jj_gen;
- break label_167;
+ jj_la1[247] = jj_gen;
+ break label_169;
}
}
{if (true) return LexicalUnitImpl.createAdd(n.beginLine,
@@ -5409,7 +5460,7 @@ LexicalUnit exp;
break;
case MINUS:
n = jj_consume_token(MINUS);
- label_168:
+ label_170:
while (true) {
jj_consume_token(S);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -5417,8 +5468,8 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[246] = jj_gen;
- break label_168;
+ jj_la1[248] = jj_gen;
+ break label_170;
}
}
{if (true) return LexicalUnitImpl.createMinus(n.beginLine,
@@ -5426,7 +5477,7 @@ LexicalUnit exp;
prev);}
break;
default:
- jj_la1[247] = jj_gen;
+ jj_la1[249] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5441,12 +5492,12 @@ LexicalUnit exp;
char op;
first = term(null);
res = first;
- label_169:
+ label_171:
while (true) {
if (jj_2_8(2)) {
;
} else {
- break label_169;
+ break label_171;
}
if (jj_2_9(2)) {
res = operator(res);
@@ -5473,7 +5524,7 @@ LexicalUnit exp;
{if (true) return '+';}
break;
default:
- jj_la1[248] = jj_gen;
+ jj_la1[250] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5526,7 +5577,7 @@ LexicalUnit exp;
result = variableTerm(prev);
break;
default:
- jj_la1[249] = jj_gen;
+ jj_la1[251] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5579,7 +5630,7 @@ LexicalUnitImpl result = null;
op = unaryOperator();
break;
default:
- jj_la1[250] = jj_gen;
+ jj_la1[252] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -5695,7 +5746,7 @@ LexicalUnitImpl result = null;
result = function(op, prev);
break;
default:
- jj_la1[251] = jj_gen;
+ jj_la1[253] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5728,7 +5779,7 @@ LexicalUnitImpl result = null;
s+=".";
break;
default:
- jj_la1[252] = jj_gen;
+ jj_la1[254] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -5745,7 +5796,7 @@ LexicalUnitImpl result = null;
n = jj_consume_token(FROM);
break;
default:
- jj_la1[253] = jj_gen;
+ jj_la1[255] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5792,25 +5843,25 @@ LexicalUnitImpl result = null;
result = unicode(prev);
break;
default:
- jj_la1[254] = jj_gen;
+ jj_la1[256] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[255] = jj_gen;
+ jj_la1[257] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_170:
+ label_172:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[256] = jj_gen;
- break label_170;
+ jj_la1[258] = jj_gen;
+ break label_172;
}
jj_consume_token(S);
}
@@ -5826,15 +5877,15 @@ LexicalUnitImpl result = null;
Token n;
LexicalUnit params = null;
n = jj_consume_token(FUNCTION);
- label_171:
+ label_173:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[257] = jj_gen;
- break label_171;
+ jj_la1[259] = jj_gen;
+ break label_173;
}
jj_consume_token(S);
}
@@ -5885,7 +5936,7 @@ LexicalUnitImpl result = null;
params = expr();
break;
default:
- jj_la1[258] = jj_gen;
+ jj_la1[260] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -6342,15 +6393,15 @@ LexicalUnitImpl result = null;
// TODO required by original parser but not used by Vaadin?
final public void _parseRule() throws ParseException {
String ret = null;
- label_172:
+ label_174:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[259] = jj_gen;
- break label_172;
+ jj_la1[261] = jj_gen;
+ break label_174;
}
jj_consume_token(S);
}
@@ -6385,7 +6436,7 @@ LexicalUnitImpl result = null;
fontFace();
break;
default:
- jj_la1[260] = jj_gen;
+ jj_la1[262] = jj_gen;
ret = skipStatement();
if ((ret == null) || (ret.length() == 0)) {
{if (true) return;}
@@ -6400,15 +6451,15 @@ LexicalUnitImpl result = null;
}
final public void _parseImportRule() throws ParseException {
- label_173:
+ label_175:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[261] = jj_gen;
- break label_173;
+ jj_la1[263] = jj_gen;
+ break label_175;
}
jj_consume_token(S);
}
@@ -6416,15 +6467,15 @@ LexicalUnitImpl result = null;
}
final public void _parseMediaRule() throws ParseException {
- label_174:
+ label_176:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[262] = jj_gen;
- break label_174;
+ jj_la1[264] = jj_gen;
+ break label_176;
}
jj_consume_token(S);
}
@@ -6432,15 +6483,15 @@ LexicalUnitImpl result = null;
}
final public void _parseDeclarationBlock() throws ParseException {
- label_175:
+ label_177:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[263] = jj_gen;
- break label_175;
+ jj_la1[265] = jj_gen;
+ break label_177;
}
jj_consume_token(S);
}
@@ -6450,29 +6501,29 @@ LexicalUnitImpl result = null;
declaration();
break;
default:
- jj_la1[264] = jj_gen;
+ jj_la1[266] = jj_gen;
;
}
- label_176:
+ label_178:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[265] = jj_gen;
- break label_176;
+ jj_la1[267] = jj_gen;
+ break label_178;
}
jj_consume_token(SEMICOLON);
- label_177:
+ label_179:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[266] = jj_gen;
- break label_177;
+ jj_la1[268] = jj_gen;
+ break label_179;
}
jj_consume_token(S);
}
@@ -6482,7 +6533,7 @@ LexicalUnitImpl result = null;
declaration();
break;
default:
- jj_la1[267] = jj_gen;
+ jj_la1[269] = jj_gen;
;
}
}
@@ -6491,15 +6542,15 @@ LexicalUnitImpl result = null;
final public ArrayList<String> _parseSelectors() throws ParseException {
ArrayList<String> p = null;
try {
- label_178:
+ label_180:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[268] = jj_gen;
- break label_178;
+ jj_la1[270] = jj_gen;
+ break label_180;
}
jj_consume_token(S);
}
@@ -6511,6 +6562,13 @@ LexicalUnitImpl result = null;
throw new Error("Missing return statement in function");
}
+ void acceptMissingSemicolonBeforeRbrace(ParseException parseException) throws ParseException {
+ Token next = getToken(1);
+ if (next.kind != RBRACE) {
+ throw parseException;
+ }
+ }
+
private boolean jj_2_1(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_1(); }
@@ -6574,29 +6632,14 @@ LexicalUnitImpl result = null;
finally { jj_save(8, xla); }
}
- private boolean jj_3R_213() {
- if (jj_scan_token(MOD)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- private boolean jj_3R_212() {
- if (jj_scan_token(ANY)) return true;
+ private boolean jj_3R_202() {
+ if (jj_scan_token(VARIABLE)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
- return false;
- }
-
- private boolean jj_3R_211() {
- if (jj_scan_token(DIV)) return true;
- Token xsp;
+ if (jj_scan_token(COLON)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -6604,54 +6647,25 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_210() {
- if (jj_scan_token(COMMA)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_220() {
+ if (jj_3R_219()) return true;
return false;
}
- private boolean jj_3R_188() {
+ private boolean jj_3R_184() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_210()) {
- jj_scanpos = xsp;
- if (jj_3R_211()) {
- jj_scanpos = xsp;
- if (jj_3R_212()) {
- jj_scanpos = xsp;
- if (jj_3R_213()) {
- jj_scanpos = xsp;
- if (jj_3R_214()) {
- jj_scanpos = xsp;
- if (jj_3R_215()) return true;
- }
- }
- }
- }
- }
- return false;
- }
-
- private boolean jj_3R_216() {
- if (jj_scan_token(GUARDED_SYM)) return true;
- Token xsp;
+ if (jj_3R_202()) jj_scanpos = xsp;
+ if (jj_scan_token(CONTAINS)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
+ if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
return false;
}
- private boolean jj_3R_218() {
- if (jj_3R_217()) return true;
- return false;
- }
-
- private boolean jj_3R_217() {
+ private boolean jj_3R_219() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(18)) {
@@ -6668,68 +6682,61 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_179() {
- if (jj_3R_189()) return true;
+ private boolean jj_3R_181() {
+ if (jj_3R_191()) return true;
if (jj_scan_token(COLON)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
- if (jj_3R_190()) return true;
- xsp = jj_scanpos;
- if (jj_3R_191()) jj_scanpos = xsp;
if (jj_3R_192()) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_193()) jj_scanpos = xsp;
+ if (jj_3R_194()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_192()) { jj_scanpos = xsp; break; }
+ if (jj_3R_194()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_194() {
+ private boolean jj_3R_196() {
if (jj_scan_token(S)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_218()) jj_scanpos = xsp;
+ if (jj_3R_220()) jj_scanpos = xsp;
return false;
}
- private boolean jj_3R_193() {
- if (jj_3R_217()) return true;
+ private boolean jj_3R_195() {
+ if (jj_3R_219()) return true;
return false;
}
- private boolean jj_3R_180() {
+ private boolean jj_3R_182() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_193()) {
+ if (jj_3R_195()) {
jj_scanpos = xsp;
- if (jj_3R_194()) return true;
+ if (jj_3R_196()) return true;
}
return false;
}
- private boolean jj_3R_200() {
- if (jj_scan_token(VARIABLE)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- if (jj_scan_token(COLON)) return true;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_222() {
+ if (jj_scan_token(HASH)) return true;
return false;
}
- private boolean jj_3R_182() {
+ private boolean jj_3R_292() {
+ if (jj_scan_token(IDENT)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_293() {
+ if (jj_scan_token(FUNCTION)) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_200()) jj_scanpos = xsp;
- if (jj_scan_token(CONTAINS)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -6738,119 +6745,138 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_220() {
- if (jj_scan_token(HASH)) return true;
+ private boolean jj_3_7() {
+ if (jj_3R_188()) return true;
return false;
}
- private boolean jj_3R_290() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_291() {
+ if (jj_scan_token(COLON)) return true;
return false;
}
- private boolean jj_3R_291() {
- if (jj_scan_token(FUNCTION)) return true;
+ private boolean jj_3R_209() {
+ if (jj_scan_token(LBRACE)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_224() {
+ if (jj_scan_token(COLON)) return true;
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ xsp = jj_scanpos;
+ if (jj_3R_291()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_292()) {
+ jj_scanpos = xsp;
+ if (jj_3R_293()) return true;
}
- if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
return false;
}
- private boolean jj_3R_289() {
- if (jj_scan_token(COLON)) return true;
+ private boolean jj_3R_208() {
+ if (jj_3R_192()) return true;
return false;
}
- private boolean jj_3R_222() {
+ private boolean jj_3_6() {
+ if (jj_3R_187()) return true;
+ if (jj_scan_token(LBRACE)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_188() {
+ if (jj_3R_207()) return true;
if (jj_scan_token(COLON)) return true;
Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
xsp = jj_scanpos;
- if (jj_3R_289()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_290()) {
+ if (jj_3R_208()) {
jj_scanpos = xsp;
- if (jj_3R_291()) return true;
+ if (jj_3R_209()) return true;
}
return false;
}
- private boolean jj_3_7() {
- if (jj_3R_186()) return true;
+ private boolean jj_3R_271() {
+ if (jj_3R_192()) return true;
return false;
}
- private boolean jj_3R_207() {
- if (jj_scan_token(LBRACE)) return true;
+ private boolean jj_3R_312() {
+ if (jj_scan_token(STRING)) return true;
return false;
}
- private boolean jj_3R_310() {
- if (jj_scan_token(STRING)) return true;
+ private boolean jj_3R_261() {
+ if (jj_scan_token(FUNCTION)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_271()) jj_scanpos = xsp;
+ if (jj_scan_token(RPARAN)) return true;
return false;
}
- private boolean jj_3R_308() {
+ private boolean jj_3R_310() {
if (jj_scan_token(STARMATCH)) return true;
return false;
}
- private boolean jj_3R_309() {
+ private boolean jj_3R_311() {
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_307() {
+ private boolean jj_3R_309() {
if (jj_scan_token(DOLLARMATCH)) return true;
return false;
}
- private boolean jj_3R_306() {
+ private boolean jj_3R_308() {
if (jj_scan_token(CARETMATCH)) return true;
return false;
}
- private boolean jj_3R_305() {
+ private boolean jj_3R_307() {
if (jj_scan_token(DASHMATCH)) return true;
return false;
}
- private boolean jj_3R_304() {
+ private boolean jj_3R_306() {
if (jj_scan_token(INCLUDES)) return true;
return false;
}
- private boolean jj_3R_206() {
- if (jj_3R_190()) return true;
- return false;
- }
-
- private boolean jj_3R_271() {
+ private boolean jj_3R_273() {
if (jj_scan_token(INTERPOLATION)) return true;
return false;
}
- private boolean jj_3R_303() {
+ private boolean jj_3R_305() {
if (jj_scan_token(EQ)) return true;
return false;
}
- private boolean jj_3R_296() {
+ private boolean jj_3R_298() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_303()) {
- jj_scanpos = xsp;
- if (jj_3R_304()) {
- jj_scanpos = xsp;
if (jj_3R_305()) {
jj_scanpos = xsp;
if (jj_3R_306()) {
jj_scanpos = xsp;
if (jj_3R_307()) {
jj_scanpos = xsp;
- if (jj_3R_308()) return true;
+ if (jj_3R_308()) {
+ jj_scanpos = xsp;
+ if (jj_3R_309()) {
+ jj_scanpos = xsp;
+ if (jj_3R_310()) return true;
}
}
}
@@ -6861,9 +6887,9 @@ LexicalUnitImpl result = null;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
xsp = jj_scanpos;
- if (jj_3R_309()) {
+ if (jj_3R_311()) {
jj_scanpos = xsp;
- if (jj_3R_310()) return true;
+ if (jj_3R_312()) return true;
}
while (true) {
xsp = jj_scanpos;
@@ -6872,29 +6898,22 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_6() {
- if (jj_3R_185()) return true;
- if (jj_scan_token(LBRACE)) return true;
+ private boolean jj_3R_252() {
+ if (jj_3R_265()) return true;
return false;
}
- private boolean jj_3R_186() {
- if (jj_3R_205()) return true;
- if (jj_scan_token(COLON)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- xsp = jj_scanpos;
- if (jj_3R_206()) {
- jj_scanpos = xsp;
- if (jj_3R_207()) return true;
- }
+ private boolean jj_3R_251() {
+ if (jj_3R_264()) return true;
return false;
}
- private boolean jj_3R_223() {
+ private boolean jj_3R_250() {
+ if (jj_3R_263()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_225() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
while (true) {
@@ -6907,83 +6926,65 @@ LexicalUnitImpl result = null;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
xsp = jj_scanpos;
- if (jj_3R_296()) jj_scanpos = xsp;
+ if (jj_3R_298()) jj_scanpos = xsp;
if (jj_scan_token(RBRACKET)) return true;
return false;
}
- private boolean jj_3R_269() {
- if (jj_3R_190()) return true;
- return false;
- }
-
- private boolean jj_3R_302() {
+ private boolean jj_3R_304() {
if (jj_scan_token(INTERPOLATION)) return true;
return false;
}
- private boolean jj_3R_257() {
+ private boolean jj_3R_259() {
if (jj_scan_token(PARENT)) return true;
return false;
}
- private boolean jj_3R_256() {
+ private boolean jj_3R_258() {
if (jj_scan_token(ANY)) return true;
return false;
}
- private boolean jj_3R_266() {
+ private boolean jj_3R_268() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_270()) {
+ if (jj_3R_272()) {
jj_scanpos = xsp;
- if (jj_3R_271()) return true;
+ if (jj_3R_273()) return true;
}
return false;
}
- private boolean jj_3R_270() {
+ private boolean jj_3R_272() {
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_219() {
+ private boolean jj_3R_221() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_255()) {
+ if (jj_3R_257()) {
jj_scanpos = xsp;
- if (jj_3R_256()) {
+ if (jj_3R_258()) {
jj_scanpos = xsp;
- if (jj_3R_257()) return true;
- }
+ if (jj_3R_259()) return true;
}
- return false;
- }
-
- private boolean jj_3R_255() {
- Token xsp;
- if (jj_3R_266()) return true;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_266()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_259() {
- if (jj_scan_token(FUNCTION)) return true;
+ private boolean jj_3R_257() {
Token xsp;
+ if (jj_3R_268()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ if (jj_3R_268()) { jj_scanpos = xsp; break; }
}
- xsp = jj_scanpos;
- if (jj_3R_269()) jj_scanpos = xsp;
- if (jj_scan_token(RPARAN)) return true;
return false;
}
- private boolean jj_3R_183() {
+ private boolean jj_3R_185() {
if (jj_scan_token(COMMA)) return true;
Token xsp;
while (true) {
@@ -6993,32 +6994,40 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_250() {
- if (jj_3R_263()) return true;
- return false;
- }
-
- private boolean jj_3R_249() {
- if (jj_3R_262()) return true;
+ private boolean jj_3R_303() {
+ if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_248() {
- if (jj_3R_261()) return true;
+ private boolean jj_3R_286() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_303()) {
+ jj_scanpos = xsp;
+ if (jj_3R_304()) return true;
+ }
return false;
}
- private boolean jj_3R_301() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_262() {
+ if (jj_scan_token(DOT)) return true;
return false;
}
- private boolean jj_3R_284() {
+ private boolean jj_3R_249() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_301()) {
+ if (jj_3R_262()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(72)) {
jj_scanpos = xsp;
- if (jj_3R_302()) return true;
+ if (jj_scan_token(49)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(50)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(52)) return true;
+ }
+ }
}
return false;
}
@@ -7026,318 +7035,355 @@ LexicalUnitImpl result = null;
private boolean jj_3_5() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_183()) jj_scanpos = xsp;
- if (jj_3R_184()) return true;
+ if (jj_3R_185()) jj_scanpos = xsp;
+ if (jj_3R_186()) return true;
return false;
}
- private boolean jj_3R_300() {
- if (jj_3R_222()) return true;
+ private boolean jj_3R_302() {
+ if (jj_3R_224()) return true;
return false;
}
- private boolean jj_3R_221() {
+ private boolean jj_3R_248() {
+ if (jj_scan_token(STRING)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_223() {
if (jj_scan_token(DOT)) return true;
Token xsp;
- if (jj_3R_284()) return true;
+ if (jj_3R_286()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_284()) { jj_scanpos = xsp; break; }
+ if (jj_3R_286()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_298() {
- if (jj_3R_221()) return true;
+ private boolean jj_3R_247() {
+ if (jj_3R_261()) return true;
return false;
}
- private boolean jj_3R_293() {
- if (jj_3R_221()) return true;
+ private boolean jj_3R_204() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_248()) {
+ jj_scanpos = xsp;
+ if (jj_3R_249()) {
+ jj_scanpos = xsp;
+ if (jj_3R_250()) {
+ jj_scanpos = xsp;
+ if (jj_3R_251()) {
+ jj_scanpos = xsp;
+ if (jj_3R_252()) return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_300() {
+ if (jj_3R_223()) return true;
return false;
}
private boolean jj_3R_295() {
- if (jj_3R_222()) return true;
+ if (jj_3R_223()) return true;
return false;
}
- private boolean jj_3R_283() {
- if (jj_3R_222()) return true;
+ private boolean jj_3R_297() {
+ if (jj_3R_224()) return true;
return false;
}
- private boolean jj_3R_286() {
- if (jj_3R_221()) return true;
+ private boolean jj_3R_285() {
+ if (jj_3R_224()) return true;
return false;
}
private boolean jj_3R_288() {
- if (jj_3R_222()) return true;
+ if (jj_3R_223()) return true;
return false;
}
- private boolean jj_3R_299() {
- if (jj_3R_223()) return true;
+ private boolean jj_3R_290() {
+ if (jj_3R_224()) return true;
return false;
}
- private boolean jj_3R_276() {
+ private boolean jj_3R_246() {
+ if (jj_scan_token(DIMEN)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_245() {
+ if (jj_scan_token(KHZ)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_301() {
+ if (jj_3R_225()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_244() {
+ if (jj_scan_token(HZ)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_278() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_297()) {
+ if (jj_3R_299()) {
jj_scanpos = xsp;
- if (jj_3R_298()) {
+ if (jj_3R_300()) {
jj_scanpos = xsp;
- if (jj_3R_299()) {
+ if (jj_3R_301()) {
jj_scanpos = xsp;
- if (jj_3R_300()) return true;
+ if (jj_3R_302()) return true;
}
}
}
return false;
}
- private boolean jj_3R_297() {
- if (jj_3R_220()) return true;
+ private boolean jj_3R_299() {
+ if (jj_3R_222()) return true;
return false;
}
- private boolean jj_3R_275() {
+ private boolean jj_3R_277() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_292()) {
+ if (jj_3R_294()) {
jj_scanpos = xsp;
- if (jj_3R_293()) {
+ if (jj_3R_295()) {
jj_scanpos = xsp;
- if (jj_3R_294()) {
+ if (jj_3R_296()) {
jj_scanpos = xsp;
- if (jj_3R_295()) return true;
+ if (jj_3R_297()) return true;
}
}
}
return false;
}
- private boolean jj_3R_292() {
- if (jj_3R_220()) return true;
+ private boolean jj_3R_294() {
+ if (jj_3R_222()) return true;
return false;
}
- private boolean jj_3R_280() {
- if (jj_3R_222()) return true;
+ private boolean jj_3R_243() {
+ if (jj_scan_token(MS)) return true;
return false;
}
- private boolean jj_3R_274() {
+ private boolean jj_3R_282() {
+ if (jj_3R_224()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_276() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_285()) {
+ if (jj_3R_287()) {
jj_scanpos = xsp;
- if (jj_3R_286()) {
+ if (jj_3R_288()) {
jj_scanpos = xsp;
- if (jj_3R_287()) {
+ if (jj_3R_289()) {
jj_scanpos = xsp;
- if (jj_3R_288()) return true;
+ if (jj_3R_290()) return true;
}
}
}
return false;
}
- private boolean jj_3R_285() {
- if (jj_3R_220()) return true;
+ private boolean jj_3R_287() {
+ if (jj_3R_222()) return true;
return false;
}
- private boolean jj_3R_294() {
- if (jj_3R_223()) return true;
+ private boolean jj_3R_296() {
+ if (jj_3R_225()) return true;
return false;
}
- private boolean jj_3R_282() {
- if (jj_3R_223()) return true;
+ private boolean jj_3R_284() {
+ if (jj_3R_225()) return true;
return false;
}
- private boolean jj_3R_287() {
- if (jj_3R_223()) return true;
+ private boolean jj_3R_242() {
+ if (jj_scan_token(SECOND)) return true;
return false;
}
- private boolean jj_3R_273() {
+ private boolean jj_3R_289() {
+ if (jj_3R_225()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_275() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_281()) {
+ if (jj_3R_283()) {
jj_scanpos = xsp;
- if (jj_3R_282()) {
+ if (jj_3R_284()) {
jj_scanpos = xsp;
- if (jj_3R_283()) return true;
+ if (jj_3R_285()) return true;
}
}
return false;
}
- private boolean jj_3R_278() {
- if (jj_3R_221()) return true;
+ private boolean jj_3R_280() {
+ if (jj_3R_223()) return true;
return false;
}
- private boolean jj_3R_281() {
- if (jj_3R_221()) return true;
+ private boolean jj_3R_283() {
+ if (jj_3R_223()) return true;
return false;
}
- private boolean jj_3R_260() {
- if (jj_scan_token(DOT)) return true;
+ private boolean jj_3R_241() {
+ if (jj_scan_token(GRAD)) return true;
return false;
}
- private boolean jj_3R_247() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_260()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(72)) {
- jj_scanpos = xsp;
- if (jj_scan_token(49)) {
- jj_scanpos = xsp;
- if (jj_scan_token(50)) {
- jj_scanpos = xsp;
- if (jj_scan_token(52)) return true;
- }
- }
- }
+ private boolean jj_3R_240() {
+ if (jj_scan_token(RAD)) return true;
return false;
}
- private boolean jj_3R_246() {
- if (jj_scan_token(STRING)) return true;
+ private boolean jj_3R_239() {
+ if (jj_scan_token(DEG)) return true;
return false;
}
- private boolean jj_3R_245() {
- if (jj_3R_259()) return true;
+ private boolean jj_3R_238() {
+ if (jj_scan_token(EXS)) return true;
return false;
}
- private boolean jj_3R_202() {
+ private boolean jj_3R_201() {
+ if (jj_3R_225()) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_246()) {
- jj_scanpos = xsp;
- if (jj_3R_247()) {
- jj_scanpos = xsp;
- if (jj_3R_248()) {
- jj_scanpos = xsp;
- if (jj_3R_249()) {
- jj_scanpos = xsp;
- if (jj_3R_250()) return true;
- }
- }
- }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_278()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_199() {
- if (jj_3R_223()) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_276()) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_237() {
+ if (jj_scan_token(REM)) return true;
return false;
}
- private boolean jj_3R_198() {
- if (jj_3R_222()) return true;
+ private boolean jj_3R_200() {
+ if (jj_3R_224()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_275()) { jj_scanpos = xsp; break; }
+ if (jj_3R_277()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_279() {
- if (jj_3R_223()) return true;
+ private boolean jj_3R_281() {
+ if (jj_3R_225()) return true;
return false;
}
- private boolean jj_3R_197() {
- if (jj_3R_221()) return true;
+ private boolean jj_3R_236() {
+ if (jj_scan_token(LEM)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_199() {
+ if (jj_3R_223()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_274()) { jj_scanpos = xsp; break; }
+ if (jj_3R_276()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_196() {
- if (jj_3R_220()) return true;
+ private boolean jj_3R_198() {
+ if (jj_3R_222()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_273()) { jj_scanpos = xsp; break; }
+ if (jj_3R_275()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_272() {
+ private boolean jj_3R_274() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_277()) {
+ if (jj_3R_279()) {
jj_scanpos = xsp;
- if (jj_3R_278()) {
+ if (jj_3R_280()) {
jj_scanpos = xsp;
- if (jj_3R_279()) {
+ if (jj_3R_281()) {
jj_scanpos = xsp;
- if (jj_3R_280()) return true;
+ if (jj_3R_282()) return true;
}
}
}
return false;
}
- private boolean jj_3R_277() {
- if (jj_3R_220()) return true;
+ private boolean jj_3R_279() {
+ if (jj_3R_222()) return true;
return false;
}
- private boolean jj_3R_244() {
- if (jj_scan_token(DIMEN)) return true;
+ private boolean jj_3R_235() {
+ if (jj_scan_token(EMS)) return true;
return false;
}
- private boolean jj_3R_195() {
- if (jj_3R_219()) return true;
+ private boolean jj_3R_234() {
+ if (jj_scan_token(PX)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_197() {
+ if (jj_3R_221()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_272()) { jj_scanpos = xsp; break; }
+ if (jj_3R_274()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_243() {
- if (jj_scan_token(KHZ)) return true;
+ private boolean jj_3R_233() {
+ if (jj_scan_token(IN)) return true;
return false;
}
- private boolean jj_3R_181() {
+ private boolean jj_3R_183() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_195()) {
- jj_scanpos = xsp;
- if (jj_3R_196()) {
- jj_scanpos = xsp;
if (jj_3R_197()) {
jj_scanpos = xsp;
if (jj_3R_198()) {
jj_scanpos = xsp;
- if (jj_3R_199()) return true;
+ if (jj_3R_199()) {
+ jj_scanpos = xsp;
+ if (jj_3R_200()) {
+ jj_scanpos = xsp;
+ if (jj_3R_201()) return true;
}
}
}
@@ -7345,161 +7391,57 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_242() {
- if (jj_scan_token(HZ)) return true;
- return false;
- }
-
- private boolean jj_3R_252() {
- if (jj_3R_217()) return true;
- if (jj_3R_181()) return true;
- return false;
- }
-
- private boolean jj_3R_241() {
- if (jj_scan_token(MS)) return true;
- return false;
- }
-
- private boolean jj_3R_240() {
- if (jj_scan_token(SECOND)) return true;
- return false;
- }
-
- private boolean jj_3R_239() {
- if (jj_scan_token(GRAD)) return true;
- return false;
- }
-
- private boolean jj_3R_238() {
- if (jj_scan_token(RAD)) return true;
- return false;
- }
-
- private boolean jj_3R_237() {
- if (jj_scan_token(DEG)) return true;
- return false;
- }
-
- private boolean jj_3R_236() {
- if (jj_scan_token(EXS)) return true;
- return false;
- }
-
- private boolean jj_3R_235() {
- if (jj_scan_token(REM)) return true;
- return false;
- }
-
- private boolean jj_3R_234() {
- if (jj_scan_token(LEM)) return true;
- return false;
- }
-
- private boolean jj_3R_233() {
- if (jj_scan_token(EMS)) return true;
- return false;
- }
-
private boolean jj_3R_232() {
- if (jj_scan_token(PX)) return true;
- return false;
- }
-
- private boolean jj_3_2() {
- if (jj_3R_180()) return true;
- if (jj_3R_181()) return true;
- return false;
- }
-
- private boolean jj_3R_231() {
- if (jj_scan_token(IN)) return true;
- return false;
- }
-
- private boolean jj_3R_230() {
if (jj_scan_token(PC)) return true;
return false;
}
- private boolean jj_3R_204() {
- if (jj_scan_token(COMMA)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- if (jj_3R_203()) return true;
- return false;
- }
-
- private boolean jj_3R_251() {
- if (jj_3R_181()) return true;
+ private boolean jj_3R_254() {
+ if (jj_3R_219()) return true;
+ if (jj_3R_183()) return true;
return false;
}
- private boolean jj_3R_229() {
+ private boolean jj_3R_231() {
if (jj_scan_token(MM)) return true;
return false;
}
- private boolean jj_3R_228() {
+ private boolean jj_3R_230() {
if (jj_scan_token(CM)) return true;
return false;
}
- private boolean jj_3R_203() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_251()) {
- jj_scanpos = xsp;
- if (jj_3R_252()) return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3_2()) { jj_scanpos = xsp; break; }
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- private boolean jj_3R_227() {
+ private boolean jj_3R_229() {
if (jj_scan_token(PT)) return true;
return false;
}
- private boolean jj_3R_226() {
+ private boolean jj_3R_228() {
if (jj_scan_token(PERCENTAGE)) return true;
return false;
}
- private boolean jj_3R_209() {
- if (jj_3R_254()) return true;
+ private boolean jj_3R_211() {
+ if (jj_3R_256()) return true;
return false;
}
- private boolean jj_3R_225() {
+ private boolean jj_3R_227() {
if (jj_scan_token(NUMBER)) return true;
return false;
}
- private boolean jj_3R_224() {
- if (jj_3R_258()) return true;
+ private boolean jj_3R_226() {
+ if (jj_3R_260()) return true;
return false;
}
- private boolean jj_3R_201() {
+ private boolean jj_3R_203() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_224()) jj_scanpos = xsp;
+ if (jj_3R_226()) jj_scanpos = xsp;
xsp = jj_scanpos;
- if (jj_3R_225()) {
- jj_scanpos = xsp;
- if (jj_3R_226()) {
- jj_scanpos = xsp;
if (jj_3R_227()) {
jj_scanpos = xsp;
if (jj_3R_228()) {
@@ -7536,7 +7478,11 @@ LexicalUnitImpl result = null;
jj_scanpos = xsp;
if (jj_3R_244()) {
jj_scanpos = xsp;
- if (jj_3R_245()) return true;
+ if (jj_3R_245()) {
+ jj_scanpos = xsp;
+ if (jj_3R_246()) {
+ jj_scanpos = xsp;
+ if (jj_3R_247()) return true;
}
}
}
@@ -7560,12 +7506,12 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_184() {
+ private boolean jj_3R_186() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_201()) {
+ if (jj_3R_203()) {
jj_scanpos = xsp;
- if (jj_3R_202()) return true;
+ if (jj_3R_204()) return true;
}
while (true) {
xsp = jj_scanpos;
@@ -7574,92 +7520,117 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_261() {
+ private boolean jj_3R_263() {
if (jj_scan_token(HASH)) return true;
return false;
}
- private boolean jj_3_1() {
- if (jj_3R_179()) return true;
+ private boolean jj_3_2() {
+ if (jj_3R_182()) return true;
+ if (jj_3R_183()) return true;
return false;
}
- private boolean jj_3R_185() {
- if (jj_3R_203()) return true;
+ private boolean jj_3R_256() {
+ if (jj_3R_191()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_264() {
+ if (jj_scan_token(URL)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_206() {
+ if (jj_scan_token(COMMA)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_204()) { jj_scanpos = xsp; break; }
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
+ if (jj_3R_205()) return true;
return false;
}
- private boolean jj_3_4() {
- if (jj_3R_182()) return true;
- return false;
- }
-
- private boolean jj_3R_254() {
- if (jj_3R_189()) return true;
+ private boolean jj_3R_253() {
+ if (jj_3R_183()) return true;
return false;
}
- private boolean jj_3R_262() {
- if (jj_scan_token(URL)) return true;
+ private boolean jj_3R_205() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_253()) {
+ jj_scanpos = xsp;
+ if (jj_3R_254()) return true;
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3_2()) { jj_scanpos = xsp; break; }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_208() {
- if (jj_3R_184()) return true;
+ private boolean jj_3R_210() {
+ if (jj_3R_186()) return true;
return false;
}
- private boolean jj_3R_187() {
+ private boolean jj_3R_189() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_208()) {
+ if (jj_3R_210()) {
jj_scanpos = xsp;
- if (jj_3R_209()) return true;
+ if (jj_3R_211()) return true;
}
return false;
}
private boolean jj_3_9() {
- if (jj_3R_188()) return true;
- return false;
- }
-
- private boolean jj_3R_265() {
- if (jj_scan_token(INTERPOLATION)) return true;
+ if (jj_3R_190()) return true;
return false;
}
- private boolean jj_3R_268() {
+ private boolean jj_3R_270() {
if (jj_scan_token(PLUS)) return true;
return false;
}
- private boolean jj_3R_258() {
+ private boolean jj_3R_260() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_267()) {
+ if (jj_3R_269()) {
jj_scanpos = xsp;
- if (jj_3R_268()) return true;
+ if (jj_3R_270()) return true;
}
return false;
}
- private boolean jj_3R_267() {
+ private boolean jj_3R_269() {
if (jj_scan_token(MINUS)) return true;
return false;
}
- private boolean jj_3_3() {
- if (jj_3R_179()) return true;
+ private boolean jj_3_1() {
+ if (jj_3R_181()) return true;
return false;
}
- private boolean jj_3R_263() {
+ private boolean jj_3R_187() {
+ if (jj_3R_205()) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_206()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_265() {
if (jj_scan_token(UNICODERANGE)) return true;
return false;
}
@@ -7668,12 +7639,17 @@ LexicalUnitImpl result = null;
Token xsp;
xsp = jj_scanpos;
if (jj_3_9()) jj_scanpos = xsp;
- if (jj_3R_187()) return true;
+ if (jj_3R_189()) return true;
return false;
}
- private boolean jj_3R_190() {
- if (jj_3R_187()) return true;
+ private boolean jj_3_4() {
+ if (jj_3R_184()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_192() {
+ if (jj_3R_189()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
@@ -7682,9 +7658,10 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_192() {
- if (jj_scan_token(SEMICOLON)) return true;
+ private boolean jj_3R_217() {
+ if (jj_scan_token(MINUS)) return true;
Token xsp;
+ if (jj_scan_token(1)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -7692,9 +7669,10 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_189() {
- if (jj_scan_token(VARIABLE)) return true;
+ private boolean jj_3R_216() {
+ if (jj_scan_token(PLUS)) return true;
Token xsp;
+ if (jj_scan_token(1)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -7702,28 +7680,49 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_253() {
+ private boolean jj_3R_267() {
+ if (jj_scan_token(INTERPOLATION)) return true;
+ return false;
+ }
+
+ private boolean jj_3_3() {
+ if (jj_3R_181()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_215() {
+ if (jj_scan_token(MOD)) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_264()) {
- jj_scanpos = xsp;
- if (jj_3R_265()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_264() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_214() {
+ if (jj_scan_token(ANY)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_205() {
+ private boolean jj_3R_213() {
+ if (jj_scan_token(DIV)) return true;
Token xsp;
- if (jj_3R_253()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_253()) { jj_scanpos = xsp; break; }
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
+ return false;
+ }
+
+ private boolean jj_3R_194() {
+ if (jj_scan_token(SEMICOLON)) return true;
+ Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -7731,10 +7730,9 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_215() {
- if (jj_scan_token(MINUS)) return true;
+ private boolean jj_3R_212() {
+ if (jj_scan_token(COMMA)) return true;
Token xsp;
- if (jj_scan_token(1)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -7742,10 +7740,31 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_214() {
- if (jj_scan_token(PLUS)) return true;
+ private boolean jj_3R_190() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_212()) {
+ jj_scanpos = xsp;
+ if (jj_3R_213()) {
+ jj_scanpos = xsp;
+ if (jj_3R_214()) {
+ jj_scanpos = xsp;
+ if (jj_3R_215()) {
+ jj_scanpos = xsp;
+ if (jj_3R_216()) {
+ jj_scanpos = xsp;
+ if (jj_3R_217()) return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_191() {
+ if (jj_scan_token(VARIABLE)) return true;
Token xsp;
- if (jj_scan_token(1)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -7753,8 +7772,47 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_191() {
- if (jj_3R_216()) return true;
+ private boolean jj_3R_255() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_266()) {
+ jj_scanpos = xsp;
+ if (jj_3R_267()) return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_266() {
+ if (jj_scan_token(IDENT)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_207() {
+ Token xsp;
+ if (jj_3R_255()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_255()) { jj_scanpos = xsp; break; }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_218() {
+ if (jj_scan_token(GUARDED_SYM)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_193() {
+ if (jj_3R_218()) return true;
return false;
}
@@ -7768,7 +7826,7 @@ LexicalUnitImpl result = null;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
- final private int[] jj_la1 = new int[269];
+ final private int[] jj_la1 = new int[271];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
@@ -7780,16 +7838,16 @@ LexicalUnitImpl result = null;
jj_la1_init_3();
}
private static void jj_la1_init_0() {
- jj_la1_0 = new int[] {0x0,0x302,0x302,0x0,0x300,0x2,0x2,0x2,0xd4c40000,0x0,0x300,0x2,0x300,0x2,0x0,0x2,0x2,0x2,0x0,0x0,0x2,0x2,0x0,0x0,0x2,0x0,0x2,0x100000,0x2,0x0,0x2,0x2,0xd4c40000,0xd4c40000,0x2,0x2,0x2,0xd4fd1500,0xd4fd1500,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x200000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x200000,0x2,0x0,0x2,0x391500,0xc40000,0xc40002,0xc40000,0x2,0x2,0x80120002,0x80120002,0x2,0x0,0x0,0x2,0x2,0x2,0x2,0xd4c40000,0xd4c40000,0x2,0x100000,0x2,0xd4c40000,0x2,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0xd4000000,0x0,0x0,0x0,0x0,0x50000000,0x2,0x2,0x3f000,0x2,0x0,0x2,0x3f000,0x0,0x2,0x0,0x2,0x0,0x2,0x200000,0x0,0xd4c40000,0x0,0x134e0002,0x2,0xd4c40000,0xd4c40000,0x2,0x0,0x2,0x134e0002,0x0,0x2,0xd4c40000,0xd4c40000,0x2,0x134e0002,0x2,0x2,0x2,0x0,0x2,0xd4c40000,0x2,0x2,0x100000,0x2,0x2,0x2,0x2,0x0,0x2,0xd4c40000,0xd4c40000,0x2,0x100000,0x2,0x0,0x2,0x2,0x100000,0x0,0x0,0x800c0000,0x2,0x0,0x100000,0x2,0x800c0000,0x2,0x0,0x800c0000,0x2,0x2,0x0,0x2,0x200000,0x2,0xd4c40000,0xd4c40000,0x2,0x200400,0x2,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x100000,0x0,0x2,0x2,0x0,0x2,0x2,0x2,0x200000,0x2,0x2,0x200000,0x2,0x2,0x0,0x200000,0x2,0x0,0x2,0x0,0xd4c40000,0x2,0x0,0x2,0x0,0x200000,0x2,0x0,0x2,0x800c0400,0x2,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x321c0000,0xc0000,0x800c0000,0xc0000,0x0,0x80000000,0x0,0x80000000,0x800c0000,0x2,0x2,0x800c0000,0x2,0xd4c40000,0x2,0x2,0x2,0x0,0x200000,0x2,0x0,0x2,};
+ jj_la1_0 = new int[] {0x0,0x302,0x302,0x0,0x300,0x2,0x2,0x2,0xd4c40000,0x0,0x300,0x2,0x300,0x2,0x0,0x2,0x2,0x2,0x0,0x0,0x2,0x2,0x0,0x0,0x2,0x0,0x2,0x100000,0x2,0x0,0x2,0x2,0xd4c40000,0xd4c40000,0x2,0x2,0x2,0xd4fd1500,0xd4fd1500,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x200000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x200000,0x2,0x0,0x2,0x391500,0xc40000,0xc40002,0xc40000,0x2,0x2,0x80120002,0x80120002,0x2,0x0,0x0,0x2,0x2,0x2,0x2,0xd4c40000,0xd4c40000,0x2,0x100000,0x2,0xd4c40000,0x2,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0x84000000,0xd4000000,0x0,0x0,0x0,0x0,0x50000000,0x2,0x2,0x3f000,0x2,0x0,0x2,0x3f000,0x0,0x2,0x0,0x2,0x0,0x2,0x200000,0x0,0xd4c40000,0x0,0x134e0002,0x2,0xd4c40000,0xd4c40000,0x2,0x0,0x2,0x134e0002,0x0,0x2,0xd4c40000,0xd4c40000,0x2,0x134e0002,0x2,0x2,0x2,0x0,0x2,0xd4c40000,0x2,0x2,0x100000,0x2,0x2,0x2,0x2,0x0,0x2,0xd4c40000,0xd4c40000,0x2,0x100000,0x2,0x0,0x2,0x2,0x100000,0x0,0x0,0x800c0000,0x2,0x0,0x100000,0x2,0x800c0000,0x2,0x0,0x800c0000,0x2,0x2,0x0,0x200400,0x2,0x200000,0x2,0xd4c40000,0xd4c40000,0x2,0x2,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x100000,0x0,0x2,0x200000,0x2,0x200000,0x0,0x2,0x2,0x2,0x200000,0x2,0x2,0x200000,0x2,0x2,0x0,0x200000,0x2,0x0,0x2,0x0,0xd4c40000,0x2,0x0,0x2,0x0,0x200000,0x2,0x0,0x2,0x800c0400,0x2,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x321c0000,0xc0000,0x800c0000,0xc0000,0x0,0x80000000,0x0,0x80000000,0x800c0000,0x2,0x2,0x800c0000,0x2,0xd4c40000,0x2,0x2,0x2,0x0,0x200000,0x2,0x0,0x2,};
}
private static void jj_la1_init_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x566000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x120000,0x120000,0x0,0x120000,0x0,0x0,0x0,0x120000,0x0,0x0,0x564000c0,0x564000c0,0x0,0x0,0x0,0x60001c0,0x60001c0,0x0,0x0,0x0,0x0,0x40,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0xc2,0xc2,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x564000c0,0x564000c0,0x0,0x0,0x0,0xc0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x50000000,0x64000c0,0x50000000,0x3f,0x0,0x564000c0,0x564000c0,0x0,0x80000000,0x0,0x3f,0x0,0x0,0x564000c0,0x564000c0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x564000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x564000c0,0x564000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x160040,0x0,0x40,0x0,0x0,0x160040,0x0,0x40,0x160000,0x0,0x0,0x80,0x0,0x0,0x0,0x61200c0,0x61200c0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x6000000,0xc0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x160000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x160000,0x0,0x0,0x0,0x160000,0x160000,0x160000,0x0,0x0,0x160000,0x0,0x60000c0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
+ jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x566000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x120000,0x120000,0x0,0x120000,0x0,0x0,0x0,0x120000,0x0,0x0,0x564000c0,0x564000c0,0x0,0x0,0x0,0x60001c0,0x60001c0,0x0,0x0,0x0,0x0,0x40,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0xc2,0xc2,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x564000c0,0x564000c0,0x0,0x0,0x0,0xc0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x50000000,0x64000c0,0x50000000,0x3f,0x0,0x564000c0,0x564000c0,0x0,0x80000000,0x0,0x3f,0x0,0x0,0x564000c0,0x564000c0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x564000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x564000c0,0x564000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x160040,0x0,0x40,0x0,0x0,0x160040,0x0,0x40,0x160000,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x61200c0,0x61200c0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x6000000,0xc0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x160000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x160000,0x0,0x0,0x0,0x160000,0x160000,0x160000,0x0,0x0,0x160000,0x0,0x60000c0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
}
private static void jj_la1_init_2() {
- jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x1000,0x0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x100,0x100,0x0,0x0,0x2008,0x2008,0x0,0x2000,0x0,0x0,0x0,0x2000,0x0,0x0,0x1119,0x1119,0x0,0x0,0x0,0x2b80,0x2b80,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x2a80,0x0,0x0,0x0,0x0,0x0,0x380,0x380,0x0,0x100,0x100,0x0,0x0,0x0,0x0,0x1119,0x1119,0x0,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x100,0x0,0x40,0x0,0x0,0x0,0x109,0x1000,0x1300,0x0,0x1109,0x1109,0x0,0x0,0x0,0x1300,0x20,0x0,0x1109,0x1109,0x0,0x1300,0x0,0x0,0x0,0x1100,0x0,0x1109,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x1109,0x1109,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x1000,0x1000,0xfffffb80,0x0,0x0,0x0,0x0,0xfffffb80,0x0,0x0,0xfffffb80,0x0,0x0,0x1100,0x0,0x0,0x0,0x2100,0x2100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0xfffffb80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffffb80,0x0,0xffffe200,0x0,0x100,0x980,0xffffeb80,0x0,0x0,0xfffffb80,0x0,0x100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,};
+ jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x1000,0x0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x100,0x100,0x0,0x0,0x2008,0x2008,0x0,0x2000,0x0,0x0,0x0,0x2000,0x0,0x0,0x1119,0x1119,0x0,0x0,0x0,0x2b80,0x2b80,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x2a80,0x0,0x0,0x0,0x0,0x0,0x380,0x380,0x0,0x100,0x100,0x0,0x0,0x0,0x0,0x1119,0x1119,0x0,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x100,0x0,0x40,0x0,0x0,0x0,0x109,0x1000,0x1300,0x0,0x1109,0x1109,0x0,0x0,0x0,0x1300,0x20,0x0,0x1109,0x1109,0x0,0x1300,0x0,0x0,0x0,0x1100,0x0,0x1109,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x1109,0x1109,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x1000,0x1000,0xfffffb80,0x0,0x0,0x0,0x0,0xfffffb80,0x0,0x0,0xfffffb80,0x0,0x0,0x1100,0x0,0x0,0x0,0x0,0x2100,0x2100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0xfffffb80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffffb80,0x0,0xffffe200,0x0,0x100,0x980,0xffffeb80,0x0,0x0,0xfffffb80,0x0,0x100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,};
}
private static void jj_la1_init_3() {
- jj_la1_3 = new int[] {0x8,0x80,0x80,0x2,0x80,0x0,0x0,0x0,0x75,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc5,0xc5,0x0,0x0,0x0,0xc401bf,0xc401bf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401be,0x0,0x0,0x0,0x0,0x0,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc7,0xc7,0x0,0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x0,0x0,0x0,0x0,0x45,0x80,0x200000,0x0,0xe5,0xe5,0x0,0x0,0x0,0x200000,0x0,0x0,0xe5,0xe5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0xf5,0xf5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x440001,0x0,0x0,0x0,0x0,0x440001,0x0,0x0,0x440001,0x0,0x0,0x400000,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x380000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x440001,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x440001,0x0,0x400000,0x0,0x0,0x40001,0x440001,0x0,0x0,0x440001,0x0,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ jj_la1_3 = new int[] {0x8,0x80,0x80,0x2,0x80,0x0,0x0,0x0,0x75,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc5,0xc5,0x0,0x0,0x0,0xc401bf,0xc401bf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401be,0x0,0x0,0x0,0x0,0x0,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc7,0xc7,0x0,0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x0,0x0,0x0,0x0,0x45,0x80,0x200000,0x0,0xe5,0xe5,0x0,0x0,0x0,0x200000,0x0,0x0,0xe5,0xe5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0xf5,0xf5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x440001,0x0,0x0,0x0,0x0,0x440001,0x0,0x0,0x440001,0x0,0x0,0x400000,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x380000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x440001,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x440001,0x0,0x400000,0x0,0x0,0x40001,0x440001,0x0,0x0,0x440001,0x0,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
}
final private JJCalls[] jj_2_rtns = new JJCalls[9];
private boolean jj_rescan = false;
@@ -7801,7 +7859,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 269; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 271; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7811,7 +7869,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 269; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 271; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7821,7 +7879,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 269; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 271; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7831,7 +7889,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 269; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 271; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7948,7 +8006,7 @@ LexicalUnitImpl result = null;
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 269; i++) {
+ for (int i = 0; i < 271; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1<<j)) != 0) {
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
index 98e2f7fb04..13810bd601 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
@@ -1741,17 +1741,33 @@ void includeDirective() :
{
<INCLUDE_SYM>
(<S>)*
- (name = property()|name = variableName(){ name = "$"+name;}
- |(name = functionName()
- args = argValuelist()) <RPARAN>(<S>)*)
- ((";"(<S>)*)+
- {documentHandler.includeDirective(name, args);}
- | <LBRACE> (<S>)* {documentHandler.startIncludeContentBlock(name, args);}
- (styleRuleOrDeclarationOrNestedProperties() | keyframeSelector())*
- <RBRACE> (<S>)* {documentHandler.endIncludeContentBlock();}
- )
+ (name = property() | name = variableName(){ name = "$"+name;}
+ | (name = functionName() args = argValuelist()) <RPARAN>(<S>)*)
+ {documentHandler.startInclude(name, args);}
+ (includeDirectiveBlockContents() | includeDirectiveTerminator())
+ {documentHandler.endInclude();}
}
+void includeDirectiveTerminator():
+{}
+{
+ try {
+ (";"(<S>)*)+
+ }
+ catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
+ }
+}
+
+void includeDirectiveBlockContents():
+{}
+{
+ <LBRACE> (<S>)*
+ (styleRuleOrDeclarationOrNestedProperties() | keyframeSelector())*
+ <RBRACE> (<S>)*
+}
+
+
String interpolation() :
{
Token n;
@@ -1976,11 +1992,16 @@ void debugDirective() :
{
<DEBUG_SYM>
{
- String content = skipStatementUntilSemiColon();
+ String content = skipStatementUntil(new int[] {SEMICOLON,RBRACE});
// TODO should evaluate the content expression, call documentHandler.debugDirective() etc.
System.out.println(content);
}
- (<S>)*
+ try {
+ (";"(<S>)*)+
+ }
+ catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
+ }
}
void warnDirective() :
@@ -1988,11 +2009,16 @@ void warnDirective() :
{
<WARN_SYM>
{
- String content = skipStatementUntilSemiColon();
+ String content = skipStatementUntil(new int[] {SEMICOLON,RBRACE});
// TODO should evaluate the content expression, call documentHandler.warnDirective() etc.
System.err.println(content);
}
- (<S>)*
+ try {
+ (";"(<S>)*)+
+ }
+ catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
+ }
}
Node forDirective() :
@@ -2035,8 +2061,13 @@ void extendDirective() :
<EXTEND_SYM>
(<S>)*
list = selectorList()
- (";"(<S>)*)+
{documentHandler.extendDirective(list);}
+ try {
+ (";"(<S>)*)+
+ }
+ catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
+ }
}
void contentDirective() :
@@ -2044,7 +2075,12 @@ void contentDirective() :
{
<CONTENT_SYM>
(<S>)*
- (";"(<S>)*)+
+ try {
+ (";"(<S>)*)+
+ }
+ catch (ParseException e) {
+ acceptMissingSemicolonBeforeRbrace(e);
+ }
{documentHandler.contentDirective();}
}
@@ -3050,6 +3086,15 @@ ArrayList<String> _parseSelectors() :
}
}
+JAVACODE
+void acceptMissingSemicolonBeforeRbrace( ParseException parseException ) {
+ Token next = getToken(1);
+ if (next.kind != RBRACE) {
+ throw parseException;
+ }
+}
+
+
/*
* Local Variables:
* compile-command: javacc Parser.jj & javac Parser.java
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java
index ba29df7d33..26d1121f96 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java
@@ -143,4 +143,4 @@ public class Token implements java.io.Serializable {
}
}
-/* JavaCC - OriginalChecksum=8b653fc6be4ca9bd10137ee3ad4c32c4 (do not edit this line) */
+/* JavaCC - OriginalChecksum=dad2146dc89e68f66e77382c9e448fb7 (do not edit this line) */
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java b/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java
index 1757cf6705..f093357e96 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java
@@ -159,4 +159,4 @@ public class TokenMgrError extends Error
this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
}
}
-/* JavaCC - OriginalChecksum=525946b34c715198d7c29f668b049f5d (do not edit this line) */
+/* JavaCC - OriginalChecksum=c7c96e9cf4a9320d03dd722437439354 (do not edit this line) */
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/106-test_pseudoclass_remains_at_end_of_selector.css b/theme-compiler/tests/resources/sasslang/css/106-test_pseudoclass_remains_at_end_of_selector.css
index 2118fad2a2..2118fad2a2 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/106-test_pseudoclass_remains_at_end_of_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/106-test_pseudoclass_remains_at_end_of_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/107-test_pseudoelement_goes_lefter_than_not.css b/theme-compiler/tests/resources/sasslang/css/107-test_pseudoelement_goes_lefter_than_not.css
index 7a53dec628..7a53dec628 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/107-test_pseudoelement_goes_lefter_than_not.css
+++ b/theme-compiler/tests/resources/sasslang/css/107-test_pseudoelement_goes_lefter_than_not.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/108-test_pseudoelement_goes_lefter_than_pseudoclass.css b/theme-compiler/tests/resources/sasslang/css/108-test_pseudoelement_goes_lefter_than_pseudoclass.css
index a5ae5ac363..a5ae5ac363 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/108-test_pseudoelement_goes_lefter_than_pseudoclass.css
+++ b/theme-compiler/tests/resources/sasslang/css/108-test_pseudoelement_goes_lefter_than_pseudoclass.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/109-test_pseudoelement_remains_at_end_of_selector.css b/theme-compiler/tests/resources/sasslang/css/109-test_pseudoelement_remains_at_end_of_selector.css
index aa379e70b3..aa379e70b3 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/109-test_pseudoelement_remains_at_end_of_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/109-test_pseudoelement_remains_at_end_of_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/110-test_redundant_selector_elimination.css b/theme-compiler/tests/resources/sasslang/css/110-test_redundant_selector_elimination.css
index 7be91d143a..7be91d143a 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/110-test_redundant_selector_elimination.css
+++ b/theme-compiler/tests/resources/sasslang/css/110-test_redundant_selector_elimination.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/112-test_target_with_child.css b/theme-compiler/tests/resources/sasslang/css/112-test_target_with_child.css
index cee3a34a5a..cee3a34a5a 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/112-test_target_with_child.css
+++ b/theme-compiler/tests/resources/sasslang/css/112-test_target_with_child.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/2-test_basic.css b/theme-compiler/tests/resources/sasslang/css/2-test_basic.css
index 4504b8d829..4504b8d829 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/2-test_basic.css
+++ b/theme-compiler/tests/resources/sasslang/css/2-test_basic.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.css b/theme-compiler/tests/resources/sasslang/css/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.css
index 47d93c5dc1..47d93c5dc1 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.css
+++ b/theme-compiler/tests/resources/sasslang/css/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/33-test_extend_redundancy_elimination_never_eliminates_base_selector.css b/theme-compiler/tests/resources/sasslang/css/33-test_extend_redundancy_elimination_never_eliminates_base_selector.css
index 4a4aa6d222..4a4aa6d222 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/33-test_extend_redundancy_elimination_never_eliminates_base_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/33-test_extend_redundancy_elimination_never_eliminates_base_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/333-test_empty_content.css b/theme-compiler/tests/resources/sasslang/css/333-test_empty_content.css
index f1c0f6c996..f1c0f6c996 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/333-test_empty_content.css
+++ b/theme-compiler/tests/resources/sasslang/css/333-test_empty_content.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.css b/theme-compiler/tests/resources/sasslang/css/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.css
index eb28eca8fa..eb28eca8fa 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.css
+++ b/theme-compiler/tests/resources/sasslang/css/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/350-test_interpolation.css b/theme-compiler/tests/resources/sasslang/css/350-test_interpolation.css
index 8b44646800..8b44646800 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/350-test_interpolation.css
+++ b/theme-compiler/tests/resources/sasslang/css/350-test_interpolation.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/368-test_mixins_with_args.css b/theme-compiler/tests/resources/sasslang/css/368-test_mixins_with_args.css
index 318a3f6ffb..318a3f6ffb 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/368-test_mixins_with_args.css
+++ b/theme-compiler/tests/resources/sasslang/css/368-test_mixins_with_args.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/369-test_mixins_with_empty_args.css b/theme-compiler/tests/resources/sasslang/css/369-test_mixins_with_empty_args.css
index 234d524066..234d524066 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/369-test_mixins_with_empty_args.css
+++ b/theme-compiler/tests/resources/sasslang/css/369-test_mixins_with_empty_args.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/390-test_parent_selector_with_parent_and_subject.css b/theme-compiler/tests/resources/sasslang/css/390-test_parent_selector_with_parent_and_subject.css
index 234fea7aa5..234fea7aa5 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/390-test_parent_selector_with_parent_and_subject.css
+++ b/theme-compiler/tests/resources/sasslang/css/390-test_parent_selector_with_parent_and_subject.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/420-test_warn_directive.css b/theme-compiler/tests/resources/sasslang/css/420-test_warn_directive.css
index 6d661f2404..6d661f2404 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/420-test_warn_directive.css
+++ b/theme-compiler/tests/resources/sasslang/css/420-test_warn_directive.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/55-test_long_extendee.css b/theme-compiler/tests/resources/sasslang/css/55-test_long_extendee.css
index 0d6bd2ec98..0d6bd2ec98 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/55-test_long_extendee.css
+++ b/theme-compiler/tests/resources/sasslang/css/55-test_long_extendee.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/63-test_multiple_extendees.css b/theme-compiler/tests/resources/sasslang/css/63-test_multiple_extendees.css
index d3fae7600f..d3fae7600f 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/63-test_multiple_extendees.css
+++ b/theme-compiler/tests/resources/sasslang/css/63-test_multiple_extendees.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/65-test_multiple_extends_with_multiple_extenders_and_single_target.css b/theme-compiler/tests/resources/sasslang/css/65-test_multiple_extends_with_multiple_extenders_and_single_target.css
index 44196e6602..44196e6602 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/65-test_multiple_extends_with_multiple_extenders_and_single_target.css
+++ b/theme-compiler/tests/resources/sasslang/css/65-test_multiple_extends_with_multiple_extenders_and_single_target.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/66-test_multiple_extends_with_single_extender_and_single_target.css b/theme-compiler/tests/resources/sasslang/css/66-test_multiple_extends_with_single_extender_and_single_target.css
index 9b5770d7c5..9b5770d7c5 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/66-test_multiple_extends_with_single_extender_and_single_target.css
+++ b/theme-compiler/tests/resources/sasslang/css/66-test_multiple_extends_with_single_extender_and_single_target.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/67-test_multiple_targets.css b/theme-compiler/tests/resources/sasslang/css/67-test_multiple_targets.css
index 779bd00f75..779bd00f75 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/67-test_multiple_targets.css
+++ b/theme-compiler/tests/resources/sasslang/css/67-test_multiple_targets.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/7-test_combinator_unification_angle_sibling.css b/theme-compiler/tests/resources/sasslang/css/7-test_combinator_unification_angle_sibling.css
index 657d1ec2f6..657d1ec2f6 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/7-test_combinator_unification_angle_sibling.css
+++ b/theme-compiler/tests/resources/sasslang/css/7-test_combinator_unification_angle_sibling.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/70-test_nested_extender.css b/theme-compiler/tests/resources/sasslang/css/70-test_nested_extender.css
index 1c4e604b71..1c4e604b71 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/70-test_nested_extender.css
+++ b/theme-compiler/tests/resources/sasslang/css/70-test_nested_extender.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/80-test_nested_extender_merges_with_same_selector.css b/theme-compiler/tests/resources/sasslang/css/80-test_nested_extender_merges_with_same_selector.css
index d1a50d50e3..d1a50d50e3 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/80-test_nested_extender_merges_with_same_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/80-test_nested_extender_merges_with_same_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/81-test_nested_extender_runs_unification.css b/theme-compiler/tests/resources/sasslang/css/81-test_nested_extender_runs_unification.css
index 9aa8d14958..9aa8d14958 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/81-test_nested_extender_runs_unification.css
+++ b/theme-compiler/tests/resources/sasslang/css/81-test_nested_extender_runs_unification.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/85-test_nested_extender_with_child_selector.css b/theme-compiler/tests/resources/sasslang/css/85-test_nested_extender_with_child_selector.css
index f7bd620245..f7bd620245 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/85-test_nested_extender_with_child_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/85-test_nested_extender_with_child_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/86-test_nested_extender_with_child_selector_merges_with_same_selector.css b/theme-compiler/tests/resources/sasslang/css/86-test_nested_extender_with_child_selector_merges_with_same_selector.css
index 75561708b3..75561708b3 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/86-test_nested_extender_with_child_selector_merges_with_same_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/86-test_nested_extender_with_child_selector_merges_with_same_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.css b/theme-compiler/tests/resources/sasslang/css/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.css
index 4285daf8dd..4285daf8dd 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.css
+++ b/theme-compiler/tests/resources/sasslang/css/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/90-test_nested_extender_with_sibling_selector.css b/theme-compiler/tests/resources/sasslang/css/90-test_nested_extender_with_sibling_selector.css
index e9fe832391..e9fe832391 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/90-test_nested_extender_with_sibling_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/90-test_nested_extender_with_sibling_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/91-test_nested_selector_with_child_selector_hack_extendee.css b/theme-compiler/tests/resources/sasslang/css/91-test_nested_selector_with_child_selector_hack_extendee.css
index 5556837892..5556837892 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/91-test_nested_selector_with_child_selector_hack_extendee.css
+++ b/theme-compiler/tests/resources/sasslang/css/91-test_nested_selector_with_child_selector_hack_extendee.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/96-test_nested_target.css b/theme-compiler/tests/resources/sasslang/css/96-test_nested_target.css
index d1a50d50e3..d1a50d50e3 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/96-test_nested_target.css
+++ b/theme-compiler/tests/resources/sasslang/css/96-test_nested_target.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/98-test_not_remains_at_end_of_selector.css b/theme-compiler/tests/resources/sasslang/css/98-test_not_remains_at_end_of_selector.css
index 540e6f8bf4..540e6f8bf4 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/98-test_not_remains_at_end_of_selector.css
+++ b/theme-compiler/tests/resources/sasslang/css/98-test_not_remains_at_end_of_selector.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/106-test_pseudoclass_remains_at_end_of_selector.scss b/theme-compiler/tests/resources/sasslang/scss/106-test_pseudoclass_remains_at_end_of_selector.scss
index 619bbb51cd..619bbb51cd 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/106-test_pseudoclass_remains_at_end_of_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/106-test_pseudoclass_remains_at_end_of_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/107-test_pseudoelement_goes_lefter_than_not.scss b/theme-compiler/tests/resources/sasslang/scss/107-test_pseudoelement_goes_lefter_than_not.scss
index f50ad04b12..f50ad04b12 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/107-test_pseudoelement_goes_lefter_than_not.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/107-test_pseudoelement_goes_lefter_than_not.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/108-test_pseudoelement_goes_lefter_than_pseudoclass.scss b/theme-compiler/tests/resources/sasslang/scss/108-test_pseudoelement_goes_lefter_than_pseudoclass.scss
index 230f925a10..230f925a10 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/108-test_pseudoelement_goes_lefter_than_pseudoclass.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/108-test_pseudoelement_goes_lefter_than_pseudoclass.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/109-test_pseudoelement_remains_at_end_of_selector.scss b/theme-compiler/tests/resources/sasslang/scss/109-test_pseudoelement_remains_at_end_of_selector.scss
index cd588ed24a..cd588ed24a 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/109-test_pseudoelement_remains_at_end_of_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/109-test_pseudoelement_remains_at_end_of_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/110-test_redundant_selector_elimination.scss b/theme-compiler/tests/resources/sasslang/scss/110-test_redundant_selector_elimination.scss
index ab8ba4845f..ab8ba4845f 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/110-test_redundant_selector_elimination.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/110-test_redundant_selector_elimination.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/112-test_target_with_child.scss b/theme-compiler/tests/resources/sasslang/scss/112-test_target_with_child.scss
index 3748f64233..3748f64233 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/112-test_target_with_child.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/112-test_target_with_child.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/2-test_basic.scss b/theme-compiler/tests/resources/sasslang/scss/2-test_basic.scss
index 9f3cde0011..9f3cde0011 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/2-test_basic.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/2-test_basic.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.scss b/theme-compiler/tests/resources/sasslang/scss/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.scss
index a5a0dff1d0..a5a0dff1d0 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/29-test_extend_does_not_warn_when_one_extension_fails_but_others_dont.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/33-test_extend_redundancy_elimination_never_eliminates_base_selector.scss b/theme-compiler/tests/resources/sasslang/scss/33-test_extend_redundancy_elimination_never_eliminates_base_selector.scss
index ac6ad58994..ac6ad58994 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/33-test_extend_redundancy_elimination_never_eliminates_base_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/33-test_extend_redundancy_elimination_never_eliminates_base_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/333-test_empty_content.scss b/theme-compiler/tests/resources/sasslang/scss/333-test_empty_content.scss
index ad8df41f25..ad8df41f25 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/333-test_empty_content.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/333-test_empty_content.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.scss b/theme-compiler/tests/resources/sasslang/scss/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.scss
index 30a9d092cb..30a9d092cb 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/35-test_extend_redundancy_elimination_when_it_would_reduce_specificity.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/350-test_interpolation.scss b/theme-compiler/tests/resources/sasslang/scss/350-test_interpolation.scss
index bb9c9a2c8f..bb9c9a2c8f 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/350-test_interpolation.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/350-test_interpolation.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/368-test_mixins_with_args.scss b/theme-compiler/tests/resources/sasslang/scss/368-test_mixins_with_args.scss
index 3ba39ecac2..3ba39ecac2 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/368-test_mixins_with_args.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/368-test_mixins_with_args.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/369-test_mixins_with_empty_args.scss b/theme-compiler/tests/resources/sasslang/scss/369-test_mixins_with_empty_args.scss
index f608979293..f608979293 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/369-test_mixins_with_empty_args.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/369-test_mixins_with_empty_args.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/390-test_parent_selector_with_parent_and_subject.scss b/theme-compiler/tests/resources/sasslang/scss/390-test_parent_selector_with_parent_and_subject.scss
index 646238f379..646238f379 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/390-test_parent_selector_with_parent_and_subject.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/390-test_parent_selector_with_parent_and_subject.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/420-test_warn_directive.scss b/theme-compiler/tests/resources/sasslang/scss/420-test_warn_directive.scss
index 53546355cc..53546355cc 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/420-test_warn_directive.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/420-test_warn_directive.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/55-test_long_extendee.scss b/theme-compiler/tests/resources/sasslang/scss/55-test_long_extendee.scss
index 26ab65d344..26ab65d344 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/55-test_long_extendee.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/55-test_long_extendee.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/63-test_multiple_extendees.scss b/theme-compiler/tests/resources/sasslang/scss/63-test_multiple_extendees.scss
index 2c0f5aa72a..2c0f5aa72a 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/63-test_multiple_extendees.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/63-test_multiple_extendees.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/65-test_multiple_extends_with_multiple_extenders_and_single_target.scss b/theme-compiler/tests/resources/sasslang/scss/65-test_multiple_extends_with_multiple_extenders_and_single_target.scss
index 4c2a4c59f8..4c2a4c59f8 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/65-test_multiple_extends_with_multiple_extenders_and_single_target.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/65-test_multiple_extends_with_multiple_extenders_and_single_target.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/66-test_multiple_extends_with_single_extender_and_single_target.scss b/theme-compiler/tests/resources/sasslang/scss/66-test_multiple_extends_with_single_extender_and_single_target.scss
index 48d9c5b733..48d9c5b733 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/66-test_multiple_extends_with_single_extender_and_single_target.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/66-test_multiple_extends_with_single_extender_and_single_target.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/67-test_multiple_targets.scss b/theme-compiler/tests/resources/sasslang/scss/67-test_multiple_targets.scss
index fdcba65999..fdcba65999 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/67-test_multiple_targets.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/67-test_multiple_targets.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/7-test_combinator_unification_angle_sibling.scss b/theme-compiler/tests/resources/sasslang/scss/7-test_combinator_unification_angle_sibling.scss
index b0120ac34e..b0120ac34e 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/7-test_combinator_unification_angle_sibling.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/7-test_combinator_unification_angle_sibling.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/70-test_nested_extender.scss b/theme-compiler/tests/resources/sasslang/scss/70-test_nested_extender.scss
index 6245cdfda7..6245cdfda7 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/70-test_nested_extender.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/70-test_nested_extender.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/80-test_nested_extender_merges_with_same_selector.scss b/theme-compiler/tests/resources/sasslang/scss/80-test_nested_extender_merges_with_same_selector.scss
index d959cce374..d959cce374 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/80-test_nested_extender_merges_with_same_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/80-test_nested_extender_merges_with_same_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/81-test_nested_extender_runs_unification.scss b/theme-compiler/tests/resources/sasslang/scss/81-test_nested_extender_runs_unification.scss
index 32c2c0cc62..32c2c0cc62 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/81-test_nested_extender_runs_unification.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/81-test_nested_extender_runs_unification.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/85-test_nested_extender_with_child_selector.scss b/theme-compiler/tests/resources/sasslang/scss/85-test_nested_extender_with_child_selector.scss
index da249ad564..da249ad564 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/85-test_nested_extender_with_child_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/85-test_nested_extender_with_child_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/86-test_nested_extender_with_child_selector_merges_with_same_selector.scss b/theme-compiler/tests/resources/sasslang/scss/86-test_nested_extender_with_child_selector_merges_with_same_selector.scss
index 224945cd71..224945cd71 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/86-test_nested_extender_with_child_selector_merges_with_same_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/86-test_nested_extender_with_child_selector_merges_with_same_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.scss b/theme-compiler/tests/resources/sasslang/scss/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.scss
index f2b8c6c07b..f2b8c6c07b 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/88-test_nested_extender_with_early_child_selectors_doesnt_subseq_them.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/90-test_nested_extender_with_sibling_selector.scss b/theme-compiler/tests/resources/sasslang/scss/90-test_nested_extender_with_sibling_selector.scss
index b9d495ce76..b9d495ce76 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/90-test_nested_extender_with_sibling_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/90-test_nested_extender_with_sibling_selector.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/91-test_nested_selector_with_child_selector_hack_extendee.scss b/theme-compiler/tests/resources/sasslang/scss/91-test_nested_selector_with_child_selector_hack_extendee.scss
index 928bc64f93..928bc64f93 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/91-test_nested_selector_with_child_selector_hack_extendee.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/91-test_nested_selector_with_child_selector_hack_extendee.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/96-test_nested_target.scss b/theme-compiler/tests/resources/sasslang/scss/96-test_nested_target.scss
index 6662dea791..6662dea791 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/96-test_nested_target.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/96-test_nested_target.scss
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/98-test_not_remains_at_end_of_selector.scss b/theme-compiler/tests/resources/sasslang/scss/98-test_not_remains_at_end_of_selector.scss
index c1af8b1b2a..c1af8b1b2a 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/98-test_not_remains_at_end_of_selector.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/98-test_not_remains_at_end_of_selector.scss
diff --git a/theme-compiler/tests/resources/sasslang/css/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.css b/theme-compiler/tests/resources/sasslangbroken/css/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.css
index 77b7586abb..77b7586abb 100644
--- a/theme-compiler/tests/resources/sasslang/css/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.css
+++ b/theme-compiler/tests/resources/sasslangbroken/css/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.css
diff --git a/theme-compiler/tests/resources/sasslang/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css b/theme-compiler/tests/resources/sasslangbroken/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css
index 09b4ccac27..09b4ccac27 100644
--- a/theme-compiler/tests/resources/sasslang/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css
+++ b/theme-compiler/tests/resources/sasslangbroken/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css
diff --git a/theme-compiler/tests/resources/sasslang/scss/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.scss b/theme-compiler/tests/resources/sasslangbroken/scss/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.scss
index 713644b221..713644b221 100644
--- a/theme-compiler/tests/resources/sasslang/scss/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.scss
+++ b/theme-compiler/tests/resources/sasslangbroken/scss/34-test_extend_redundancy_elimination_when_it_would_preserve_specificity.scss
diff --git a/theme-compiler/tests/resources/sasslang/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss b/theme-compiler/tests/resources/sasslangbroken/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss
index 73f6254f21..73f6254f21 100644
--- a/theme-compiler/tests/resources/sasslang/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss
+++ b/theme-compiler/tests/resources/sasslangbroken/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss
diff --git a/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java b/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java
index a2f3c59f07..47d3a19fde 100644
--- a/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java
+++ b/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java
@@ -280,7 +280,7 @@ public class ApplicationRunnerServlet extends LegacyVaadinServlet {
}
- throw new ClassNotFoundException();
+ throw new ClassNotFoundException(baseName);
}
private Logger getLogger() {
diff --git a/uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.html b/uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.html
deleted file mode 100644
index 6ed410fdb6..0000000000
--- a/uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
- <td>open</td>
- <td>/run/ClassThatIsNotPresent?restartApplication</td>
- <td></td>
-</tr>
-<tr>
- <td>assertText</td>
- <td>//pre[2]</td>
- <td>*java.lang.InstantiationException: Failed to load application class: ClassThatIsNotPresent*</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.java b/uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.java
new file mode 100644
index 0000000000..c2222c4608
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/applicationservlet/NoApplicationClass.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.applicationservlet;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.remote.DesiredCapabilities;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class NoApplicationClass extends MultiBrowserTest {
+
+ @Test
+ public void testInvalidApplicationClass() {
+ openTestURL();
+ String exceptionMessage = getDriver().findElement(By.xpath("//pre[2]"))
+ .getText();
+ Assert.assertTrue(exceptionMessage
+ .contains("ServletException: ClassThatIsNotPresent"));
+ }
+
+ @Override
+ public List<DesiredCapabilities> getBrowsersToTest() {
+ return Collections.singletonList(Browser.CHROME
+ .getDesiredCapabilities());
+ }
+
+ @Override
+ protected String getDeploymentPath() {
+ return "/run/ClassThatIsNotPresent";
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/browserfeatures/WebkitPositionAbsoluteScrollbarsTest.java b/uitest/src/com/vaadin/tests/browserfeatures/WebkitPositionAbsoluteScrollbarsTest.java
new file mode 100644
index 0000000000..54fb7212ca
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/browserfeatures/WebkitPositionAbsoluteScrollbarsTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.browserfeatures;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class WebkitPositionAbsoluteScrollbarsTest extends MultiBrowserTest {
+
+ @Override
+ protected String getDeploymentPath() {
+ return "/statictestfiles/browserfeatures/WebkitPositionAbsoluteScrollbars.html";
+ }
+
+ @Test
+ public void testWebkitScrollbarProblem() throws Exception {
+ openTestURL();
+ getDriver().findElement(By.id("step1")).click();
+ getDriver().findElement(By.id("step2")).click();
+ getDriver().findElement(By.id("step3")).click();
+ getDriver().findElement(By.id("step4")).click();
+ compareScreen("no-scrollbars");
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClick.java b/uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClick.java
new file mode 100644
index 0000000000..8a2b263006
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClick.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.MouseEvents;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Tree;
+
+/**
+ * Test for #12618: Trying to select item with right click in Tree causes focus
+ * issues.
+ */
+@SuppressWarnings("serial")
+public class TreeScrollingOnRightClick extends AbstractTestUI {
+
+ public static final String TREE_ID = "my-tree";
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final Tree tree = new Tree();
+ tree.setId(TREE_ID);
+ tree.setSizeUndefined();
+
+ // Add item click listener for right click selection
+ tree.addItemClickListener(new ItemClickEvent.ItemClickListener() {
+ @SuppressWarnings("deprecation")
+ @Override
+ public void itemClick(ItemClickEvent event) {
+ if (event.getButton() == MouseEvents.ClickEvent.BUTTON_RIGHT) {
+ tree.select(event.getItemId());
+ }
+ }
+ });
+
+ // Add some items
+ for (int i = 0; i < 200; i++) {
+ tree.addItem(String.format("Node %s", i));
+ }
+
+ addComponent(tree);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Right clicking on items should not scroll Tree.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 12618;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClickTest.java b/uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClickTest.java
new file mode 100644
index 0000000000..76ab1b3fdb
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/tree/TreeScrollingOnRightClickTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.tree;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.Point;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ *
+ * @since 7.1.9
+ * @author Vaadin Ltd
+ */
+public class TreeScrollingOnRightClickTest extends MultiBrowserTest {
+
+ @Test
+ public void testScrollingOnRightClick() throws Throwable {
+ openTestURL();
+
+ // Focus tree
+ WebElement tree = getDriver().findElement(
+ By.id(TreeScrollingOnRightClick.TREE_ID));
+ tree.click();
+
+ // Move selection down 50 items
+ for (int down = 0; down < 50; down++) {
+ tree.sendKeys(Keys.ARROW_DOWN);
+ }
+
+ Thread.sleep(1000);
+
+ // Get location of item 40
+ Point item40Location = getTreeNode("Node 40").getLocation();
+
+ // Right click on item 45
+ WebElement item45 = getTreeNode("Node 45");
+ new Actions(getDriver()).moveToElement(item45).contextClick(item45)
+ .perform();
+
+ // Ensure location of item 40 is still the same (no scrolling)
+ Point item40Location2 = getTreeNode("Node 40").getLocation();
+ assertEquals(item40Location.getY(), item40Location2.getY());
+ }
+
+ private WebElement getTreeNode(String caption) {
+ return getDriver().findElement(
+ By.xpath("//span[text() = '" + caption + "']"));
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivity.java b/uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivity.java
new file mode 100644
index 0000000000..2c649c9ca8
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivity.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.ui;
+
+import com.vaadin.server.CustomizedSystemMessages;
+import com.vaadin.server.SystemMessages;
+import com.vaadin.server.SystemMessagesInfo;
+import com.vaadin.server.SystemMessagesProvider;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class TimeoutRedirectResetsOnActivity extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ setupTimout(request);
+
+ addComponent(new Button("clicky", new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ // NOOP
+ }
+ }));
+ }
+
+ private void setupTimout(VaadinRequest request) {
+ request.getService().setSystemMessagesProvider(
+ new SystemMessagesProvider() {
+ @Override
+ public SystemMessages getSystemMessages(
+ SystemMessagesInfo systemMessagesInfo) {
+ CustomizedSystemMessages msgs = new CustomizedSystemMessages();
+ msgs.setSessionExpiredMessage(null);
+ msgs.setSessionExpiredCaption(null);
+ msgs.setSessionExpiredNotificationEnabled(true);
+ msgs.setSessionExpiredURL("http://example.com/");
+ return msgs;
+ }
+ });
+ /*
+ * NOTE: in practice, this means a timeout after 25 seconds, because of
+ * implementation details in
+ * com.vaadin.server.communication.MetadataWriter
+ */
+ getSession().getSession().setMaxInactiveInterval(10);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "The timeout redirect timer should reset if there's activity between the client and server.";
+ }
+
+ @Override
+ @SuppressWarnings("boxing")
+ protected Integer getTicketNumber() {
+ return 12446;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivityTest.java b/uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivityTest.java
new file mode 100644
index 0000000000..272bacb8d5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/ui/TimeoutRedirectResetsOnActivityTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.ui;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.NoSuchElementException;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class TimeoutRedirectResetsOnActivityTest extends MultiBrowserTest {
+ @Test
+ public void verifyRedirectWorks() throws Exception {
+ setDebug(true);
+ openTestURL();
+
+ long startTime = System.currentTimeMillis();
+ while (System.currentTimeMillis() - startTime < 30000) {
+ clickTheButton();
+ Thread.sleep(1000);
+ }
+
+ assertTrue("button disappeared before timeout", buttonIsStillThere());
+
+ Thread.sleep(30000);
+ assertTrue("no redirection occurred within 30 seconds",
+ !buttonIsStillThere());
+ }
+
+ private boolean buttonIsStillThere() {
+ try {
+ return getButton() != null;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
+ }
+
+ private void clickTheButton() {
+ getButton().click();
+ }
+
+ private WebElement getButton() {
+ /*
+ * For some reason, the vaadinElement() method doesn't work when tests
+ * are run outside of "/run/" and "/run-push/" contexts. The given error
+ * message says that the generated Vaadin path doesn't match any
+ * elements, but when that selector is put into the recorder, the
+ * recorder finds it.
+ *
+ * XPath works fine.
+ */
+ /*-
+ return vaadinElement("/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VButton[0]");
+ */
+ return getDriver().findElement(
+ By.xpath("//div[contains(@class,'v-button')]"));
+ }
+
+ @Override
+ protected String getDeploymentPath() {
+ /*
+ * AbstractTB3Test assumes only /run/ and /run-push/ contexts, so this
+ * method needs some overriding.
+ */
+ return "/12446/"
+ + TimeoutRedirectResetsOnActivity.class.getCanonicalName()
+ + "?restartApplication&debug";
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/window/SubWindowsTextSelectionTest.java b/uitest/src/com/vaadin/tests/components/window/SubWindowsTextSelectionTest.java
index 1df036af58..2e0873956c 100644
--- a/uitest/src/com/vaadin/tests/components/window/SubWindowsTextSelectionTest.java
+++ b/uitest/src/com/vaadin/tests/components/window/SubWindowsTextSelectionTest.java
@@ -15,7 +15,6 @@
*/
package com.vaadin.tests.components.window;
-import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
@@ -64,7 +63,7 @@ public class SubWindowsTextSelectionTest extends MultiBrowserTest {
}
@Test
- public void verifyNoTextSelectionOnMove() throws MalformedURLException {
+ public void verifyNoTextSelectionOnMove() throws Exception {
openTestURL();
diff --git a/uitest/src/com/vaadin/tests/push/BasicPushTest.java b/uitest/src/com/vaadin/tests/push/BasicPushTest.java
index ef40ae09dc..e03262ca7e 100644
--- a/uitest/src/com/vaadin/tests/push/BasicPushTest.java
+++ b/uitest/src/com/vaadin/tests/push/BasicPushTest.java
@@ -25,7 +25,7 @@ import com.vaadin.tests.tb3.MultiBrowserTest;
public abstract class BasicPushTest extends MultiBrowserTest {
@Test
- public void testPush() {
+ public void testPush() throws InterruptedException {
openTestURL();
// Test client initiated push
diff --git a/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTime.java b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTime.java
new file mode 100644
index 0000000000..d90394d3b5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTime.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import com.vaadin.server.VaadinRequest;
+
+public abstract class ExtremelyLongPushTime extends PushLargeData {
+
+ private static final int DURATION_MS = 48 * 60 * 60 * 1000; // 48 H
+ private static int INTERVAL_MS = 60 * 1000; // 1 minute
+ private static int PAYLOAD_SIZE = 100 * 1024; // 100 KB
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server.
+ * VaadinRequest)
+ */
+ @Override
+ protected void setup(VaadinRequest request) {
+ super.setup(request);
+ duration.setConvertedValue(DURATION_MS);
+ interval.setConvertedValue(INTERVAL_MS);
+ dataSize.setConvertedValue(PAYLOAD_SIZE);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Test which pushes data every minute for 48 hours";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return null;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreaming.java b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreaming.java
new file mode 100644
index 0000000000..3e9582740d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreaming.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import com.vaadin.annotations.Push;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.ui.Transport;
+import com.vaadin.shared.ui.ui.UIState.PushConfigurationState;
+
+@Push(transport = Transport.STREAMING)
+public class ExtremelyLongPushTimeStreaming extends ExtremelyLongPushTime {
+
+ @Override
+ public void init(VaadinRequest request) {
+ super.init(request);
+ // Don't use fallback so we can easier detect failures
+ getPushConfiguration().setParameter(
+ PushConfigurationState.FALLBACK_TRANSPORT_PARAM, "none");
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreamingTest.java b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreamingTest.java
new file mode 100644
index 0000000000..17837cb2d3
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeStreamingTest.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+public class ExtremelyLongPushTimeStreamingTest extends
+ ExtremelyLongPushTimeTest {
+
+}
diff --git a/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeTest.java b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeTest.java
new file mode 100644
index 0000000000..a1ce4b9d8f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+
+import com.vaadin.tests.tb3.ExcludeFromSuite;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+@ExcludeFromSuite
+public abstract class ExtremelyLongPushTimeTest extends MultiBrowserTest {
+
+ private static final int ONE_HOUR_IN_MS = 20 * 1000;
+
+ @Test
+ public void test24HourPush() throws Exception {
+ openTestURL();
+
+ // Without this there is a large chance that we will wait for all pushes
+ // to complete before moving on
+ testBench(driver).disableWaitForVaadin();
+
+ // Wait for startButton to be present
+ waitForElementToBePresent(vaadinLocatorById("startButton"));
+
+ String logRow0Id = "Log_row_0";
+ By logRow0 = vaadinLocatorById(logRow0Id);
+
+ // Start the test
+ vaadinElementById("startButton").click();
+
+ // Wait for push to start. Should take 60s
+ waitUntil(ExpectedConditions.textToBePresentInElement(logRow0,
+ "Package "), 120);
+
+ // Check every hour that push is still going on
+ for (int i = 0; i < 24; i++) {
+ sleep(ONE_HOUR_IN_MS);
+ ensureStillPushing(logRow0);
+ }
+
+ }
+
+ private void ensureStillPushing(By logRow0) {
+ String logValue = getDriver().findElement(logRow0).getText();
+ // Wait for the log value to change. Should take max 60s
+ waitUntilNot(
+ ExpectedConditions.textToBePresentInElement(logRow0, logValue),
+ 120);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocket.java b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocket.java
new file mode 100644
index 0000000000..8346d49234
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocket.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import com.vaadin.annotations.Push;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.ui.Transport;
+import com.vaadin.shared.ui.ui.UIState.PushConfigurationState;
+
+@Push(transport = Transport.WEBSOCKET)
+public class ExtremelyLongPushTimeWebsocket extends ExtremelyLongPushTime {
+
+ @Override
+ public void init(VaadinRequest request) {
+ super.init(request);
+ // Don't use fallback so we can easier detect if websocket fails
+ getPushConfiguration().setParameter(
+ PushConfigurationState.FALLBACK_TRANSPORT_PARAM, "none");
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocketTest.java b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocketTest.java
new file mode 100644
index 0000000000..23d773c7da
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/ExtremelyLongPushTimeWebsocketTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import java.util.List;
+
+import org.openqa.selenium.remote.DesiredCapabilities;
+
+import com.vaadin.tests.tb3.WebsocketTest;
+
+public class ExtremelyLongPushTimeWebsocketTest extends
+ ExtremelyLongPushTimeTest {
+
+ @Override
+ public List<DesiredCapabilities> getBrowsersToTest() {
+ return WebsocketTest.getWebsocketBrowsers();
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/IdlePushChannelStreamingTest.java b/uitest/src/com/vaadin/tests/push/IdlePushChannelStreamingTest.java
new file mode 100644
index 0000000000..f9a0a722e5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/IdlePushChannelStreamingTest.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+public class IdlePushChannelStreamingTest extends IdlePushChannelTest {
+ @Override
+ protected Class<?> getUIClass() {
+ return BasicPushStreaming.class;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/IdlePushChannelTest.java b/uitest/src/com/vaadin/tests/push/IdlePushChannelTest.java
new file mode 100644
index 0000000000..4dcc8a680d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/IdlePushChannelTest.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public abstract class IdlePushChannelTest extends MultiBrowserTest {
+
+ private static final int SEVEN_MINUTES_IN_MS = 7 * 60 * 1000;
+
+ @Test
+ public void longWaitBetweenActions() throws Exception {
+ openTestURL();
+ BasicPushTest.getIncrementButton(this).click();
+ Assert.assertEquals(1, BasicPushTest.getClientCounter(this));
+ sleep(SEVEN_MINUTES_IN_MS);
+ BasicPushTest.getIncrementButton(this).click();
+ Assert.assertEquals(2, BasicPushTest.getClientCounter(this));
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/push/IdlePushChannelWebsocketTest.java b/uitest/src/com/vaadin/tests/push/IdlePushChannelWebsocketTest.java
new file mode 100644
index 0000000000..3fd9c616fb
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/IdlePushChannelWebsocketTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import java.util.List;
+
+import org.openqa.selenium.remote.DesiredCapabilities;
+
+import com.vaadin.tests.tb3.WebsocketTest;
+
+public class IdlePushChannelWebsocketTest extends IdlePushChannelTest {
+
+ @Override
+ protected Class<?> getUIClass() {
+ return BasicPushWebsocket.class;
+ }
+
+ @Override
+ public List<DesiredCapabilities> getBrowsersToTest() {
+ return WebsocketTest.getWebsocketBrowsers();
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/PushLargeData.java b/uitest/src/com/vaadin/tests/push/PushLargeData.java
index 3b72424b32..83f573ed2c 100644
--- a/uitest/src/com/vaadin/tests/push/PushLargeData.java
+++ b/uitest/src/com/vaadin/tests/push/PushLargeData.java
@@ -51,14 +51,20 @@ public abstract class PushLargeData extends AbstractTestUIWithLog {
private final ExecutorService executor = Executors
.newSingleThreadExecutor();
+ protected TextField dataSize;
+
+ protected TextField interval;
+
+ protected TextField duration;
+
@Override
protected void setup(VaadinRequest request) {
dataLabel.setSizeUndefined();
- final TextField dataSize = new TextField("Data size");
+ dataSize = new TextField("Data size");
dataSize.setConverter(Integer.class);
- final TextField interval = new TextField("Interval (ms)");
+ interval = new TextField("Interval (ms)");
interval.setConverter(Integer.class);
- final TextField duration = new TextField("Duration (ms)");
+ duration = new TextField("Duration (ms)");
duration.setConverter(Integer.class);
dataSize.setValue(DEFAULT_SIZE_BYTES + "");
diff --git a/uitest/src/com/vaadin/tests/push/PushLargeDataStreamingTest.java b/uitest/src/com/vaadin/tests/push/PushLargeDataStreamingTest.java
index 8f10f0fbba..0d71c21118 100644
--- a/uitest/src/com/vaadin/tests/push/PushLargeDataStreamingTest.java
+++ b/uitest/src/com/vaadin/tests/push/PushLargeDataStreamingTest.java
@@ -24,7 +24,7 @@ import com.vaadin.tests.tb3.MultiBrowserTest;
public class PushLargeDataStreamingTest extends MultiBrowserTest {
@Test
- public void testStreamingLargeData() {
+ public void testStreamingLargeData() throws InterruptedException {
openTestURL();
// Without this there is a large chance that we will wait for all pushes
@@ -38,7 +38,7 @@ public class PushLargeDataStreamingTest extends MultiBrowserTest {
}
- private void push() {
+ private void push() throws InterruptedException {
// Wait for startButton to be present
waitForElementToBePresent(vaadinLocatorById("startButton"));
diff --git a/uitest/src/com/vaadin/tests/push/PushLargeDataWebsocketTest.java b/uitest/src/com/vaadin/tests/push/PushLargeDataWebsocketTest.java
index 70a94f743e..cc8668a729 100644
--- a/uitest/src/com/vaadin/tests/push/PushLargeDataWebsocketTest.java
+++ b/uitest/src/com/vaadin/tests/push/PushLargeDataWebsocketTest.java
@@ -24,7 +24,7 @@ import com.vaadin.tests.tb3.WebsocketTest;
public class PushLargeDataWebsocketTest extends WebsocketTest {
@Test
- public void testWebsocketLargeData() {
+ public void testWebsocketLargeData() throws Exception {
openTestURL();
// Without this timing will be completly off as pushing "start" can
@@ -38,7 +38,7 @@ public class PushLargeDataWebsocketTest extends WebsocketTest {
}
- private void push() {
+ private void push() throws Exception {
// Wait for startButton to be present
waitForElementToBePresent(vaadinLocatorById("startButton"));
diff --git a/uitest/src/com/vaadin/tests/push/TogglePushTest.java b/uitest/src/com/vaadin/tests/push/TogglePushTest.java
index 68d6f52b9f..1867f4a63a 100644
--- a/uitest/src/com/vaadin/tests/push/TogglePushTest.java
+++ b/uitest/src/com/vaadin/tests/push/TogglePushTest.java
@@ -24,7 +24,7 @@ import com.vaadin.tests.tb3.MultiBrowserTest;
public class TogglePushTest extends MultiBrowserTest {
@Test
- public void togglePushInInit() {
+ public void togglePushInInit() throws Exception {
setPush(true);
String url = getTestUrl();
@@ -58,7 +58,7 @@ public class TogglePushTest extends MultiBrowserTest {
}
@Test
- public void togglePush() {
+ public void togglePush() throws InterruptedException {
setPush(true);
openTestURL();
getDelayedCounterUpdateButton().click();
diff --git a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
index d7b7cd050f..f6fce18fae 100644
--- a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
+++ b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
@@ -74,6 +74,11 @@ public abstract class AbstractTB3Test extends TestBenchTestCase {
*/
private static final int SCREENSHOT_WIDTH = 1500;
+ /**
+ * Timeout used by the TB grid
+ */
+ private static final int BROWSER_TIMEOUT_IN_MS = 30 * 1000;
+
private DesiredCapabilities desiredCapabilities;
private boolean debug = false;
@@ -641,17 +646,21 @@ public abstract class AbstractTB3Test extends TestBenchTestCase {
}
/**
- * Helper method for sleeping X ms in a test. Catches and ignores
- * InterruptedExceptions
+ * Sleeps for the given number of ms but ensures that the browser connection
+ * does not time out.
*
* @param timeoutMillis
* Number of ms to wait
+ * @throws InterruptedException
*/
- protected void sleep(int timeoutMillis) {
- try {
- Thread.sleep(timeoutMillis);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
+ protected void sleep(int timeoutMillis) throws InterruptedException {
+ while (timeoutMillis > 0) {
+ int d = Math.min(BROWSER_TIMEOUT_IN_MS, timeoutMillis);
+ Thread.sleep(d);
+ timeoutMillis -= d;
+
+ // Do something to keep the connection alive
+ getDriver().getTitle();
}
}
diff --git a/uitest/src/com/vaadin/tests/tb3/ExcludeFromSuite.java b/uitest/src/com/vaadin/tests/tb3/ExcludeFromSuite.java
new file mode 100644
index 0000000000..722b643f78
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/tb3/ExcludeFromSuite.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.tb3;
+
+/**
+ * Marker interface for a TB3+ test class which will exclude the test from any
+ * test suite which automatically scans for test classes. Mostly useful for long
+ * tests which should not be run in every build.
+ *
+ * @since 7.1.10
+ * @author Vaadin Ltd
+ */
+public @interface ExcludeFromSuite {
+
+}
diff --git a/uitest/src/com/vaadin/tests/tb3/TB3TestSuite.java b/uitest/src/com/vaadin/tests/tb3/TB3TestSuite.java
index e1c8edfd60..f1576a9393 100644
--- a/uitest/src/com/vaadin/tests/tb3/TB3TestSuite.java
+++ b/uitest/src/com/vaadin/tests/tb3/TB3TestSuite.java
@@ -223,6 +223,10 @@ public class TB3TestSuite extends Suite {
if (!baseClass.isAssignableFrom(c)) {
return;
}
+ if (!includeInSuite(c)) {
+ return;
+ }
+
if (!Modifier.isAbstract(c.getModifiers()) && !c.isAnonymousClass()) {
result.add((Class<? extends T>) c);
}
@@ -235,4 +239,18 @@ public class TB3TestSuite extends Suite {
}
+ /**
+ * @return true if the class should be included in the suite, false if not
+ */
+ private static boolean includeInSuite(Class<?> c) {
+ if (c.getAnnotation(ExcludeFromSuite.class) != null) {
+ return false;
+ }
+ if (c == Object.class) {
+ return true;
+ }
+
+ return includeInSuite(c.getSuperclass());
+ }
+
} \ No newline at end of file