EvalMinifierTest.java
// Copyright (C) 2012 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.json;
import junit.framework.TestCase;
import org.junit.Test;
import com.google.json.EvalMinifier.NameGenerator;
import java.util.HashSet;
import java.util.Set;
@SuppressWarnings("javadoc")
public final class EvalMinifierTest extends TestCase {
private static void assertMinified(String golden, String input) {
String actual = EvalMinifier.minify(input);
assertEquals(input, golden, actual);
}
@Test
public static final void testMinify() {
assertMinified("null", "null");
assertMinified("[null,null]", "[null,null]");
assertMinified("[null,null,null,null]", "[null,null,null,null]");
assertMinified(
"[null,null,null,null,null,null,null]",
"[null,null,null,null,null,null,null]");
assertMinified(
"[null,null,null,null,null,null,null,null,null,null,null,null,null]",
"[null,null,null,null,null,null,null,null,null,null,null,null,null]");
assertMinified(
"(function(a){"
+ "return[a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a]}(null))",
"[null,null,null,null,null,null,null,null,null,null,null,null,null, "
+ "null,null,null,null,null,null,null,null,null,null,null,null,null]");
assertMinified(
"(function(a,b){return"
+ "[a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,\"z\"]"
+ "}(\"foo\",\"bar\"))",
"['foo','bar','foo','bar','foo','bar','foo','bar','foo','bar','foo',"
+ "'bar','foo','bar','foo','bar','foo','bar','foo','bar','foo','z']");
String longStr = "\"A very very very very loooooooong string that can be"
+ " pooled, but not when it appears as a property name.\"";
assertMinified(
"(function(a){return"
+ "{" + longStr + ":a,\"a\":[a,a,42,null,a]}}(" + longStr + "))",
"{" + longStr + ": " + longStr + ","
+ " a:[" + longStr + "," + longStr + ",42,," + longStr + "]}");
assertMinified(
"(function(a){return"
// Don't convert 123456.789 to a.789
+ "[a,a,a,a,123456.789,a,a,a,a,a,a,a,a,a,123456e-3,a,a,a]"
+ "}(123456))",
"[123456,123456,123456,123456,123456.789,123456,123456,123456,123456,"
+ "123456,123456,123456,123456,123456,123456e-3,123456,123456,123456]");
}
@Test
public static final void testNameGenerator() {
NameGenerator ng = new NameGenerator();
assertEquals("a", ng.next());
assertEquals("b", ng.next());
assertEquals("c", ng.next());
for (int i = 30; --i >= 0;) { ng.next(); }
assertEquals("H", ng.next());
Set<String> shortNames = new HashSet<String>();
for (int i = 0; i < 1000; ++i) { shortNames.add(ng.next()); }
assertTrue(shortNames.contains("ar"));
assertFalse(shortNames.contains("as"));
assertTrue(shortNames.contains("au"));
assertTrue(shortNames.contains("dn"));
assertFalse(shortNames.contains("do"));
assertTrue(shortNames.contains("dp"));
assertTrue(shortNames.contains("ie"));
assertFalse(shortNames.contains("if"));
assertTrue(shortNames.contains("ig"));
assertTrue(shortNames.contains("ih"));
assertTrue(shortNames.contains("ii"));
assertTrue(shortNames.contains("ij"));
assertTrue(shortNames.contains("ik"));
assertTrue(shortNames.contains("il"));
assertTrue(shortNames.contains("im"));
assertFalse(shortNames.contains("in"));
assertTrue(shortNames.contains("io"));
}
}