| /* |
| * 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; |
| } |
| } |