/*******************************************************************************
* Copyright (c) 2011 BestSolution.at and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
*******************************************************************************/
package at.bestsolution.efxclipse.tooling.css.jfx.test.validators;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import junit.framework.TestCase;
import at.bestsolution.efxclipse.tooling.css.CssDialectExtension.ValidationResult;
import at.bestsolution.efxclipse.tooling.css.cssDsl.CssDslFactory;
import at.bestsolution.efxclipse.tooling.css.cssDsl.CssDslPackage;
import at.bestsolution.efxclipse.tooling.css.cssDsl.expr;
import at.bestsolution.efxclipse.tooling.css.cssDsl.function;
import at.bestsolution.efxclipse.tooling.css.cssDsl.term;
import at.bestsolution.efxclipse.tooling.css.cssDsl.termGroup;
import at.bestsolution.efxclipse.tooling.css.jfx.JFXDialectExtension;
import at.bestsolution.efxclipse.tooling.css.jfx.validators.RadialGradientValidator;
/**
* @author Tom Schindl
*
*/
public class RadialGradientValidatorTestCase extends TestCase {
public void test_validateRadialGradient_ColorStopOnly() {
// red 100%
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("red");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("100%");
termGroup group = CssDslFactory.eINSTANCE.createtermGroup();
group.getTerms().addAll(Arrays.asList(t1, t2));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().add(group);
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// red 0%, blue 50%
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("red");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("0%");
termGroup colorStop1 = CssDslFactory.eINSTANCE.createtermGroup();
colorStop1.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("blue");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("100%");
termGroup colorStop2 = CssDslFactory.eINSTANCE.createtermGroup();
colorStop2.getTerms().addAll(Arrays.asList(t3, t4));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().add(colorStop1);
expr.getTermGroups().add(colorStop2);
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// black 60%, #141414 60.1%, black 100%
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("black");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("60%");
termGroup colorStop1 = CssDslFactory.eINSTANCE.createtermGroup();
colorStop1.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setHexColor("#141414");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("60.1%");
termGroup colorStop2 = CssDslFactory.eINSTANCE.createtermGroup();
colorStop2.getTerms().addAll(Arrays.asList(t3, t4));
term t5 = CssDslFactory.eINSTANCE.createterm();
t5.setIdentifier("black");
term t6 = CssDslFactory.eINSTANCE.createterm();
t6.setNumber("100%");
termGroup colorStop3 = CssDslFactory.eINSTANCE.createtermGroup();
colorStop3.getTerms().addAll(Arrays.asList(t5, t6));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().add(colorStop1);
expr.getTermGroups().add(colorStop2);
expr.getTermGroups().add(colorStop3);
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// red 10 ("px","mm","cm","in","pt","pc","em","ex")
for (String length : JFXDialectExtension.sizeUnits()) {
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("red");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10" + length);
termGroup group = CssDslFactory.eINSTANCE.createtermGroup();
group.getTerms().addAll(Arrays.asList(t1, t2));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().add(group);
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// red 101% == Invalid
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("red");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("101%");
termGroup group = CssDslFactory.eINSTANCE.createtermGroup();
group.getTerms().addAll(Arrays.asList(t1, t2));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().add(group);
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(1, results.size());
assertEquals(t2, results.get(0).object);
assertEquals(CssDslPackage.Literals.TERM__NUMBER,
results.get(0).feature);
}
// red 101%, red -1% == Invalid
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("red");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("101%");
termGroup group1 = CssDslFactory.eINSTANCE.createtermGroup();
group1.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("red");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("-1%");
termGroup group2 = CssDslFactory.eINSTANCE.createtermGroup();
group2.getTerms().addAll(Arrays.asList(t3, t4));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(Arrays.asList(group1, group2));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(2, results.size());
assertEquals(t2, results.get(0).object);
assertEquals(CssDslPackage.Literals.TERM__NUMBER,
results.get(0).feature);
assertEquals(t4, results.get(1).object);
assertEquals(CssDslPackage.Literals.TERM__NUMBER,
results.get(1).feature);
}
}
public void test_validateLinearGradient_focusAngle() {
// radial-gradient(focus-angle 10grad, red 100%)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-angle");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10grad");
termGroup focusAngleGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusAngleGroup.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("red");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("100%");
termGroup colorStopGroup = CssDslFactory.eINSTANCE
.createtermGroup();
colorStopGroup.getTerms().addAll(Arrays.asList(t3, t4));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(
Arrays.asList(focusAngleGroup, colorStopGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// radial-gradient(focus-angle 10grad, red 100%)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-angle");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10");
termGroup focusAngleGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusAngleGroup.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("red");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("100%");
termGroup colorStopGroup = CssDslFactory.eINSTANCE
.createtermGroup();
colorStopGroup.getTerms().addAll(Arrays.asList(t3, t4));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(
Arrays.asList(focusAngleGroup, colorStopGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(1, results.size());
assertEquals(t2, results.get(0).object);
assertEquals(CssDslPackage.Literals.TERM__NUMBER,
results.get(0).feature);
}
// radial-gradient(focus-angle 10grad)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-angle");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10grad");
termGroup focusAngleGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusAngleGroup.getTerms().addAll(Arrays.asList(t1, t2));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(Arrays.asList(focusAngleGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(1, results.size());
assertEquals(function, results.get(0).object);
assertEquals(CssDslPackage.Literals.FUNCTION__EXPRESSION,
results.get(0).feature);
}
}
public void test_validateLinearGradient_focusDistance() {
// radial-gradient(focus-distance 10%, red 100%)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-distance");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10%");
termGroup focusDistanceGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusDistanceGroup.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("red");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("100%");
termGroup colorStopGroup = CssDslFactory.eINSTANCE
.createtermGroup();
colorStopGroup.getTerms().addAll(Arrays.asList(t3, t4));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(
Arrays.asList(focusDistanceGroup, colorStopGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// radial-gradient(focus-angle 10grad, focus-distance 10%, red 100%)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-angle");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10grad");
termGroup focusAngleGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusAngleGroup.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("focus-distance");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("10%");
termGroup focusDistanceGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusDistanceGroup.getTerms().addAll(Arrays.asList(t3, t4));
term t5 = CssDslFactory.eINSTANCE.createterm();
t5.setIdentifier("red");
term t6 = CssDslFactory.eINSTANCE.createterm();
t6.setNumber("100%");
termGroup colorStopGroup = CssDslFactory.eINSTANCE
.createtermGroup();
colorStopGroup.getTerms().addAll(Arrays.asList(t5, t6));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(
Arrays.asList(focusAngleGroup, focusDistanceGroup,
colorStopGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(0, results.size());
}
// radial-gradient(focus-distance 10, red 100%)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-distance");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10");
termGroup focusDistanceGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusDistanceGroup.getTerms().addAll(Arrays.asList(t1, t2));
term t3 = CssDslFactory.eINSTANCE.createterm();
t3.setIdentifier("red");
term t4 = CssDslFactory.eINSTANCE.createterm();
t4.setNumber("100%");
termGroup colorStopGroup = CssDslFactory.eINSTANCE
.createtermGroup();
colorStopGroup.getTerms().addAll(Arrays.asList(t3, t4));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(
Arrays.asList(focusDistanceGroup, colorStopGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(1, results.size());
assertEquals(t2, results.get(0).object);
assertEquals(CssDslPackage.Literals.TERM__NUMBER,
results.get(0).feature);
}
// radial-gradient(focus-distance 10)
{
term t1 = CssDslFactory.eINSTANCE.createterm();
t1.setIdentifier("focus-distance");
term t2 = CssDslFactory.eINSTANCE.createterm();
t2.setNumber("10%");
termGroup focusDistanceGroup = CssDslFactory.eINSTANCE
.createtermGroup();
focusDistanceGroup.getTerms().addAll(Arrays.asList(t1, t2));
expr expr = CssDslFactory.eINSTANCE.createexpr();
expr.getTermGroups().addAll(
Arrays.asList(focusDistanceGroup));
function function = CssDslFactory.eINSTANCE.createfunction();
function.setName("radial-gradient");
function.setExpression(expr);
term term = CssDslFactory.eINSTANCE.createterm();
term.setFunction(function);
List<ValidationResult> results = new ArrayList<ValidationResult>();
RadialGradientValidator.validateRadialGradient(function, results);
assertEquals(1, results.size());
assertEquals(function, results.get(0).object);
assertEquals(CssDslPackage.Literals.FUNCTION__EXPRESSION,
results.get(0).feature);
}
}
}