/* * Copyright 2010 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.rg; import junit.framework.TestCase; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; /** * Tests CssResourceGenerator's generation of unique CSS class names. */ public class CssClassNamesTestCase extends TestCase { static class ConstantCounter extends Counter { @Override int next() { return 16; } } private static final SortedSet<String> EMPTY_SET = new TreeSet<String>(); private static final int NUM_CYCLES = 1000; public void testPrefix() { assertEquals("p-A", CssResourceGenerator.computeObfuscatedClassName("p-", new Counter(), EMPTY_SET)); } public void testReservedPrefixes() { Counter counter = new ConstantCounter(); SortedSet<String> hateful = new TreeSet<String>(Arrays.asList("a")); // Value with no prefixes assertEquals("AB", CssResourceGenerator.computeObfuscatedClassName("", counter, EMPTY_SET)); assertEquals("CZB", CssResourceGenerator.computeObfuscatedClassName("", counter, hateful)); hateful.add("c"); assertEquals("EZZB", CssResourceGenerator.computeObfuscatedClassName("", counter, hateful)); hateful.add("ezz"); assertEquals("KVAZB", CssResourceGenerator.computeObfuscatedClassName("", counter, hateful)); } /** * Quick sanity check to ensure that the initial sequence of idents is unique * and stable. */ public void testSimple() { Counter counter = new Counter(); Counter counter2 = new Counter(); Set<String> seen = new HashSet<String>(); for (int i = 0; i < NUM_CYCLES; i++) { String ident = CssResourceGenerator.computeObfuscatedClassName("", counter, EMPTY_SET); assertTrue(seen.add(ident)); assertEquals(ident, CssResourceGenerator.computeObfuscatedClassName("", counter2, EMPTY_SET)); } assertEquals(1000, counter.next()); } }