diff options
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 |