blob: 8400aa5c16b2aac072a64bac8535a262cd8720ea [file] [log] [blame]
/*
* 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.anyString;
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.resources.css.ast.CssProperty;
import com.google.gwt.resources.css.ast.CssRule;
import com.google.gwt.resources.css.ast.CssSprite;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.List;
/**
* Test for {@link AlternateAnnotationCreatorVisitor}.
*/
public class AlternateAnnotationCreatorVisitorTest extends TestCase {
private CssRule cssRule;
private CssSprite cssSprite;
@Override
protected void setUp() throws Exception {
cssRule = mock(CssRule.class);
cssSprite = mock(CssSprite.class);
}
public void testVisitCssRule() {
// given
// name1 is duplicated (2 times), name3 is duplicated (3 times)
List<CssProperty> properties = createPropertiesWithName("name0", "name1", "name2", "name1",
"name3", "name4", "name3", "name3");
when(cssRule.getProperties()).thenReturn(properties);
// when
AlternateAnnotationCreatorVisitor alternateAnnotationCreatorVisitor =
new AlternateAnnotationCreatorVisitor();
alternateAnnotationCreatorVisitor.visit(cssRule, null);
// then
propertiesName1AndName3AreFlaggedAsAlternateTheOthersNot(properties);
}
public void testVisitCssSprite() {
// given
// name1 is duplicated (2 times), name3 is duplicated (# times)
List<CssProperty> properties = createPropertiesWithName("name0", "name1", "name2", "name1",
"name3", "name4", "name3", "name3");
when(cssSprite.getProperties()).thenReturn(properties);
// when
AlternateAnnotationCreatorVisitor alternateAnnotationCreatorVisitor =
new AlternateAnnotationCreatorVisitor();
alternateAnnotationCreatorVisitor.visit(cssSprite, null);
// then
propertiesName1AndName3AreFlaggedAsAlternateTheOthersNot(properties);
}
private void propertiesName1AndName3AreFlaggedAsAlternateTheOthersNot(List<CssProperty>
properties) {
// property with name "name0" has not been modified
verify(properties.get(0), never()).setName(anyString());
// properties with name "name1" have been modified but not the first one.
verify(properties.get(1), never()).setName(anyString());
verify(properties.get(3)).setName("/* @alternate */ " + "name1");
// property with name "name2" has not been modified
verify(properties.get(2), never()).setName(anyString());
// properties with name "name3" have been modified but not the first one.
verify(properties.get(4), never()).setName(anyString());
verify(properties.get(6)).setName("/* @alternate */ " + "name3");
verify(properties.get(7)).setName("/* @alternate */ " + "name3");
// property with name "name4" has not been modified
verify(properties.get(5), never()).setName(anyString());
}
private List<CssProperty> createPropertiesWithName(String... names) {
List<CssProperty> properties = new ArrayList<CssProperty>(names.length);
for (String name : names) {
CssProperty property = mock(CssProperty.class);
when(property.getName()).thenReturn(name);
properties.add(property);
}
return properties;
}
}