Package com.google.gwt.resources.converter

Source Code of com.google.gwt.resources.converter.UndefinedConstantVisitorTest

/*
* Copyright 2014 Google 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.google.gwt.resources.converter;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.resources.css.ast.CssProperty;
import com.google.gwt.resources.css.ast.CssProperty.FunctionValue;
import com.google.gwt.resources.css.ast.CssProperty.IdentValue;
import com.google.gwt.resources.css.ast.CssProperty.ListValue;
import com.google.gwt.resources.css.ast.CssProperty.Value;
import com.google.gwt.resources.css.ast.CssRule;
import com.google.gwt.thirdparty.guava.common.collect.Lists;
import com.google.gwt.thirdparty.guava.common.collect.Sets;

import junit.framework.TestCase;

import org.mockito.ArgumentCaptor;

import java.util.ArrayList;
import java.util.List;

/**
* Test for {@link UndefinedConstantVisitor}.
*/
public class UndefinedConstantVisitorTest extends TestCase {

  private CssRule cssRule;
  private TreeLogger treeLogger;

  @Override
  protected void setUp() throws Exception {
    cssRule = mock(CssRule.class);
    treeLogger = mock(TreeLogger.class);
  }

  public void testVisit_filterMsFilterFontFamily_shouldBeSkipped() {
    // given
    List<CssProperty> properties = createPropertiesWithNameAndIdentValue(
        Lists.newArrayList("filter", "-ms-filter", "font-family"),
        Lists.newArrayList("UPPERCASE", "UPPERCASE", "UPPERCASE"));
    when(cssRule.getProperties()).thenReturn(properties);

    // when
    UndefinedConstantVisitor undefinedConstantVisitor = new UndefinedConstantVisitor(
        Sets.<String>newHashSet(), false, treeLogger);
    undefinedConstantVisitor.visit(cssRule, null);

    // then
    for (CssProperty property : properties) {
      verify(property, never()).setValue(any(Value.class));
    }
  }

  public void testVisit_notLenientAndUnknownVariable_throwsException() {
    // given
    List<CssProperty> properties = createPropertiesWithNameAndIdentValue(
        Lists.newArrayList("name"),
        Lists.newArrayList("UPPERCASE"));
    when(cssRule.getProperties()).thenReturn(properties);

    // when
    UndefinedConstantVisitor undefinedConstantVisitor = new UndefinedConstantVisitor(
        Sets.<String>newHashSet(), false, treeLogger);

    try {
      undefinedConstantVisitor.visit(cssRule, null);
    } catch (Css2GssConversionException expected) {
      return;
    }

    fail("An Css2GssConversionException should have been thrown");
  }

  public void testVisit_lenientAndUnknownVariable_propertyUpdated() {
    // given
    List<CssProperty> properties = createPropertiesWithNameAndIdentValue(
        Lists.newArrayList("name"),
        Lists.newArrayList("UPPERCASE"));
    when(cssRule.getProperties()).thenReturn(properties);

    // when
    UndefinedConstantVisitor undefinedConstantVisitor = new UndefinedConstantVisitor(
        Sets.<String>newHashSet(), true, treeLogger);
    undefinedConstantVisitor.visit(cssRule, null);

    // then
    verifyPropertyValueIs(properties.get(0), "uppercase");
  }

  public void testVisit_knownVariable_propertyNotUpdated() {
    // given
    List<CssProperty> properties = createPropertiesWithNameAndIdentValue(
        Lists.newArrayList("name"),
        Lists.newArrayList("UPPERCASE"));
    when(cssRule.getProperties()).thenReturn(properties);

    // when
    UndefinedConstantVisitor undefinedConstantVisitor = new UndefinedConstantVisitor(
        Sets.newHashSet("UPPERCASE"), false, treeLogger);
    undefinedConstantVisitor.visit(cssRule, null);

    // then
    verifyPropertyValueIs(properties.get(0), "UPPERCASE");
  }

  public void testVisit_functionWithUnknownConstant_propertyUpdated() {
    // given
    CssProperty property = mock(CssProperty.class);
    when(property.getName()).thenReturn("name");

    List<Value> arguments = new ArrayList<Value>(5);
    for (int i = 0; i < 5; i++) {
      arguments.add(new IdentValue("ARGUMENT" + i));
    }

    ListValue listValue = new ListValue(arguments);
    FunctionValue function = new FunctionValue("fct", listValue);

    when(property.getValues()).thenReturn(new ListValue(Lists.<Value>newArrayList(function)));

    when(cssRule.getProperties()).thenReturn(Lists.newArrayList(property));

    // when
    UndefinedConstantVisitor undefinedConstantVisitor = new UndefinedConstantVisitor(
        Sets.newHashSet("ARGUMENT1", "ARGUMENT3"), true, treeLogger);
    undefinedConstantVisitor.visit(cssRule, null);

    // then
    verifyPropertyValueIs(property, "fct(argument0 ARGUMENT1 argument2 ARGUMENT3 argument4)");
  }

  private List<CssProperty> createPropertiesWithNameAndIdentValue(List<String> names,
      List<String> values) {
    assert names.size() == values.size();

    List<CssProperty> properties = new ArrayList<CssProperty>(names.size());

    for (int i = 0; i < names.size(); i++) {
      String name = names.get(i);
      CssProperty property = mock(CssProperty.class);
      when(property.getName()).thenReturn(name);

      String value = values.get(i);
      IdentValue identValue = new IdentValue(value);

      ListValue listValue = new ListValue(Lists.<Value>newArrayList(identValue));
      when(property.getValues()).thenReturn(listValue);

      properties.add(property);
    }

    return properties;
  }

  private void verifyPropertyValueIs(CssProperty property, String value) {
    ArgumentCaptor<Value> valueCaptor = ArgumentCaptor.forClass(Value.class);
    verify(property).setValue(valueCaptor.capture());
    assertEquals(value, valueCaptor.getValue().toCss());
  }
}
TOP

Related Classes of com.google.gwt.resources.converter.UndefinedConstantVisitorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.