/******************************************************************************* * Copyright 2012-present Pixate, Inc. * * 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.pixate.pxengine.cg.parsing; import android.test.AndroidTestCase; import com.pixate.pxengine.cg.math.PXDimension; import com.pixate.pxengine.cg.math.PXDimensionType; /** * @author kevin */ public class TransformLexerTests extends AndroidTestCase { private PXTransformLexer _lexer; @Override protected void setUp() throws Exception { super.setUp(); this._lexer = new PXTransformLexer(); } protected void assertDimension(String source, PXTransformTokenType tokenType, PXDimensionType dimensionType, float expectedValue) { PXTransformLexeme lexeme = getLexeme(source); assertTokenType(lexeme, tokenType, source.length()); Object value = lexeme.getValue(); assertNotNull("Expected a non-nil lexeme value", value); assertTrue("Expected an instance of a Float", value instanceof PXDimension); PXDimension dimensionValue = (PXDimension) value; assertEquals("Unexpected dimension type", dimensionType, dimensionValue.getType()); assertTrue("Unexpected value", dimensionValue.getNumber() == expectedValue); } protected void assertType(String source, PXTransformTokenType type) { this.assertType(source, type, source.length()); } protected void assertType(String source, PXTransformTokenType type, int endOffset) { PXTransformLexeme lexeme = getLexeme(source); assertTokenType(lexeme, type, endOffset); } protected void assertTokenType(PXTransformLexeme lexeme, PXTransformTokenType type, int endOffset) { assertEquals("Unexpected token type", type, lexeme.getType()); assertTrue("Expected token to start at offset 0, but started at " + lexeme.getOffset(), lexeme.getOffset() == 0); assertTrue("Expected token to end at " + endOffset + ", but it ended at " + lexeme.getEndingOffset(), lexeme.getEndingOffset() == endOffset); } protected PXTransformLexeme getLexeme(String source) { this._lexer.setSource(source); return this._lexer.nextLexeme(); } public void testEm() { assertDimension("10em", PXTransformTokenType.EMS, PXDimensionType.EMS, 10.0f); } public void testEx() { assertDimension("10ex", PXTransformTokenType.EXS, PXDimensionType.EXS, 10.0f); } public void testPixels() { assertDimension("10px", PXTransformTokenType.LENGTH, PXDimensionType.PIXELS, 10.0f); } public void testDevicePixels() { assertDimension("10dpx", PXTransformTokenType.LENGTH, PXDimensionType.DEVICE_PIXELS, 10.0f); } public void testCentimeters() { assertDimension("10cm", PXTransformTokenType.LENGTH, PXDimensionType.CENTIMETERS, 10.0f); } public void testMillimeters() { assertDimension("10mm", PXTransformTokenType.LENGTH, PXDimensionType.MILLIMETERS, 10.0f); } public void testInches() { assertDimension("10in", PXTransformTokenType.LENGTH, PXDimensionType.INCHES, 10.0f); } public void testPoints() { assertDimension("10pt", PXTransformTokenType.LENGTH, PXDimensionType.POINTS, 10.0f); } public void testPicas() { assertDimension("10pc", PXTransformTokenType.LENGTH, PXDimensionType.PICAS, 10.0f); } public void testDegrees() { assertDimension("10deg", PXTransformTokenType.ANGLE, PXDimensionType.DEGREES, 10.0f); } public void testRadians() { assertDimension("10rad", PXTransformTokenType.ANGLE, PXDimensionType.RADIANS, 10.0f); } public void testGradians() { assertDimension("10grad", PXTransformTokenType.ANGLE, PXDimensionType.GRADIANS, 10.0f); } public void testMilliseconds() { assertDimension("10ms", PXTransformTokenType.TIME, PXDimensionType.MILLISECONDS, 10.0f); } public void testSeconds() { assertDimension("10s", PXTransformTokenType.TIME, PXDimensionType.SECONDS, 10.0f); } public void testHertz() { assertDimension("10Hz", PXTransformTokenType.FREQUENCY, PXDimensionType.HERTZ, 10.0f); } public void testKilohertz() { assertDimension("10KHz", PXTransformTokenType.FREQUENCY, PXDimensionType.KILOHERTZ, 10.0f); } public void testPercentage() { assertDimension("10%", PXTransformTokenType.PERCENTAGE, PXDimensionType.PERCENTAGE, 10.0f); } /* * public void testUserDefinedDimension() { assertType("10units", * PXTransformTokenType.DIMENSION); } */ public void testInteger() { assertType("123", PXTransformTokenType.NUMBER); } public void testLParen() { assertType("(", PXTransformTokenType.LPAREN); } public void testRParen() { assertType(")", PXTransformTokenType.RPAREN); } public void testComma() { assertType(",", PXTransformTokenType.COMMA); } public void testTranslate() { assertType("translate", PXTransformTokenType.TRANSLATE); } public void testTranslateX() { assertType("translateX", PXTransformTokenType.TRANSLATEX); } public void testTranslateY() { assertType("translateY", PXTransformTokenType.TRANSLATEY); } public void testScale() { assertType("scale", PXTransformTokenType.SCALE); } public void testScaleX() { assertType("scaleX", PXTransformTokenType.SCALEX); } public void testScaleY() { assertType("scaleY", PXTransformTokenType.SCALEY); } public void testSkew() { assertType("skew", PXTransformTokenType.SKEW); } public void testSkewX() { assertType("skewX", PXTransformTokenType.SKEWX); } public void testSkewY() { assertType("skewY", PXTransformTokenType.SKEWY); } public void testRotate() { assertType("rotate", PXTransformTokenType.ROTATE); } public void testMatrix() { assertType("matrix", PXTransformTokenType.MATRIX); } public void testNumberValue() { String source = "123"; this._lexer.setSource(source); PXTransformLexeme lexeme = this._lexer.nextLexeme(); assertEquals("Unexpected token type", PXTransformTokenType.NUMBER, lexeme.getType()); Object value = lexeme.getValue(); assertNotNull("Expected a non-nil lexeme value", value); assertTrue("Expected an instance of a Float", value instanceof Float); Float floatValue = (Float) value; assertTrue("Expected the number 123", floatValue.floatValue() == 123.0); } }