/* * Copyright 2009 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.uibinder.attributeparsers; import junit.framework.TestCase; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; /** * Eponymous test class. */ public class CssNameConverterTest extends TestCase { static class Pair { final String before; final String after; Pair(String before, String after) { this.before = before; this.after = after; } } private final CssNameConverter converter = new CssNameConverter(); public void testCollision() { Set<String> in = makeOrderedSet("charlie-delta", "baker", "charlieDelta", "echo"); try { converter.convertSet(in); fail(); } catch (CssNameConverter.Failure e) { assertContains(e.getMessage(), "charlie-delta"); assertContains(e.getMessage(), "charlieDelta"); } } public void testNameConversion() { Pair[] beforeAndAfter = { new Pair("able", "able"), new Pair("-baker-", "baker"), new Pair("charlie-delta", "charlieDelta"), new Pair("echo", "echo"), new Pair("foxtrot-Tango", "foxtrotTango")}; for (Pair pair : beforeAndAfter) { assertEquals(pair.after, converter.convertName(pair.before)); } } public void testNoOp() throws CssNameConverter.Failure { Set<String> in = makeOrderedSet("able", "baker", "charlieDelta", "echo"); Map<String, String> out = converter.convertSet(in); for (Map.Entry<String, String> entry : out.entrySet()) { String key = entry.getKey(); assertTrue(in.remove(key)); assertEquals(key, entry.getValue()); } assertTrue(in.isEmpty()); } public void testReverseCollision() { Set<String> in = makeOrderedSet("charlieDelta", "baker", "charlie-delta", "echo"); try { converter.convertSet(in); fail(); } catch (CssNameConverter.Failure e) { assertContains(e.getMessage(), "charlie-delta"); assertContains(e.getMessage(), "charlieDelta"); } } public void testSomeOp() throws CssNameConverter.Failure { Set<String> in = makeOrderedSet("able", "-baker-", "charlie-delta", "echo", "foxtrot-Tango"); Pair[] expected = { new Pair("able", "able"), new Pair("-baker-", "baker"), new Pair("charlie-delta", "charlieDelta"), new Pair("echo", "echo"), new Pair("foxtrot-Tango", "foxtrotTango")}; Map<String, String> out = converter.convertSet(in); for (Pair pair : expected) { String convert = out.remove(pair.before); assertEquals(pair.after, convert); } assertTrue(out.isEmpty()); } private void assertContains(String string, String fragment) { assertTrue(String.format("%s should contain %s", string, fragment), string.contains(fragment)); } private Set<String> makeOrderedSet(String... strings) { LinkedHashSet<String> set = new LinkedHashSet<String>(); for (String string : strings) { set.add(string); } return set; } }