/******************************************************************************* * Copyright (c) 2015 Jeff Martin. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public * License v3.0 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * * Contributors: * Jeff Martin - initial API and implementation ******************************************************************************/ package cuchaz.enigma; import static cuchaz.enigma.TestEntryFactory.newClass; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import org.junit.Test; import cuchaz.enigma.mapping.Type; public class TestType { @Test public void isVoid() { assertThat(new Type("V").isVoid(), is(true)); assertThat(new Type("Z").isVoid(), is(false)); assertThat(new Type("B").isVoid(), is(false)); assertThat(new Type("C").isVoid(), is(false)); assertThat(new Type("I").isVoid(), is(false)); assertThat(new Type("J").isVoid(), is(false)); assertThat(new Type("F").isVoid(), is(false)); assertThat(new Type("D").isVoid(), is(false)); assertThat(new Type("LFoo;").isVoid(), is(false)); assertThat(new Type("[I").isVoid(), is(false)); } @Test public void isPrimitive() { assertThat(new Type("V").isPrimitive(), is(false)); assertThat(new Type("Z").isPrimitive(), is(true)); assertThat(new Type("B").isPrimitive(), is(true)); assertThat(new Type("C").isPrimitive(), is(true)); assertThat(new Type("I").isPrimitive(), is(true)); assertThat(new Type("J").isPrimitive(), is(true)); assertThat(new Type("F").isPrimitive(), is(true)); assertThat(new Type("D").isPrimitive(), is(true)); assertThat(new Type("LFoo;").isPrimitive(), is(false)); assertThat(new Type("[I").isPrimitive(), is(false)); } @Test public void getPrimitive() { assertThat(new Type("Z").getPrimitive(), is(Type.Primitive.Boolean)); assertThat(new Type("B").getPrimitive(), is(Type.Primitive.Byte)); assertThat(new Type("C").getPrimitive(), is(Type.Primitive.Character)); assertThat(new Type("I").getPrimitive(), is(Type.Primitive.Integer)); assertThat(new Type("J").getPrimitive(), is(Type.Primitive.Long)); assertThat(new Type("F").getPrimitive(), is(Type.Primitive.Float)); assertThat(new Type("D").getPrimitive(), is(Type.Primitive.Double)); } @Test public void isClass() { assertThat(new Type("V").isClass(), is(false)); assertThat(new Type("Z").isClass(), is(false)); assertThat(new Type("B").isClass(), is(false)); assertThat(new Type("C").isClass(), is(false)); assertThat(new Type("I").isClass(), is(false)); assertThat(new Type("J").isClass(), is(false)); assertThat(new Type("F").isClass(), is(false)); assertThat(new Type("D").isClass(), is(false)); assertThat(new Type("LFoo;").isClass(), is(true)); assertThat(new Type("[I").isClass(), is(false)); } @Test public void getClassEntry() { assertThat(new Type("LFoo;").getClassEntry(), is(newClass("Foo"))); assertThat(new Type("Ljava/lang/String;").getClassEntry(), is(newClass("java/lang/String"))); } @Test public void getArrayClassEntry() { assertThat(new Type("[LFoo;").getClassEntry(), is(newClass("Foo"))); assertThat(new Type("[[[Ljava/lang/String;").getClassEntry(), is(newClass("java/lang/String"))); } @Test public void isArray() { assertThat(new Type("V").isArray(), is(false)); assertThat(new Type("Z").isArray(), is(false)); assertThat(new Type("B").isArray(), is(false)); assertThat(new Type("C").isArray(), is(false)); assertThat(new Type("I").isArray(), is(false)); assertThat(new Type("J").isArray(), is(false)); assertThat(new Type("F").isArray(), is(false)); assertThat(new Type("D").isArray(), is(false)); assertThat(new Type("LFoo;").isArray(), is(false)); assertThat(new Type("[I").isArray(), is(true)); } @Test public void getArrayDimension() { assertThat(new Type("[I").getArrayDimension(), is(1)); assertThat(new Type("[[I").getArrayDimension(), is(2)); assertThat(new Type("[[[I").getArrayDimension(), is(3)); } @Test public void getArrayType() { assertThat(new Type("[I").getArrayType(), is(new Type("I"))); assertThat(new Type("[[I").getArrayType(), is(new Type("I"))); assertThat(new Type("[[[I").getArrayType(), is(new Type("I"))); assertThat(new Type("[Ljava/lang/String;").getArrayType(), is(new Type( "Ljava/lang/String;"))); } @Test public void hasClass() { assertThat(new Type("LFoo;").hasClass(), is(true)); assertThat(new Type("Ljava/lang/String;").hasClass(), is(true)); assertThat(new Type("[LBar;").hasClass(), is(true)); assertThat(new Type("[[[LCat;").hasClass(), is(true)); assertThat(new Type("V").hasClass(), is(false)); assertThat(new Type("[I").hasClass(), is(false)); assertThat(new Type("[[[I").hasClass(), is(false)); assertThat(new Type("Z").hasClass(), is(false)); } @Test public void parseVoid() { final String answer = "V"; assertThat(Type.parseFirst("V"), is(answer)); assertThat(Type.parseFirst("VVV"), is(answer)); assertThat(Type.parseFirst("VIJ"), is(answer)); assertThat(Type.parseFirst("V[I"), is(answer)); assertThat(Type.parseFirst("VLFoo;"), is(answer)); assertThat(Type.parseFirst("V[LFoo;"), is(answer)); } @Test public void parsePrimitive() { final String answer = "I"; assertThat(Type.parseFirst("I"), is(answer)); assertThat(Type.parseFirst("III"), is(answer)); assertThat(Type.parseFirst("IJZ"), is(answer)); assertThat(Type.parseFirst("I[I"), is(answer)); assertThat(Type.parseFirst("ILFoo;"), is(answer)); assertThat(Type.parseFirst("I[LFoo;"), is(answer)); } @Test public void parseClass() { { final String answer = "LFoo;"; assertThat(Type.parseFirst("LFoo;"), is(answer)); assertThat(Type.parseFirst("LFoo;I"), is(answer)); assertThat(Type.parseFirst("LFoo;JZ"), is(answer)); assertThat(Type.parseFirst("LFoo;[I"), is(answer)); assertThat(Type.parseFirst("LFoo;LFoo;"), is(answer)); assertThat(Type.parseFirst("LFoo;[LFoo;"), is(answer)); } { final String answer = "Ljava/lang/String;"; assertThat(Type.parseFirst("Ljava/lang/String;"), is(answer)); assertThat(Type.parseFirst("Ljava/lang/String;I"), is(answer)); assertThat(Type.parseFirst("Ljava/lang/String;JZ"), is(answer)); assertThat(Type.parseFirst("Ljava/lang/String;[I"), is(answer)); assertThat(Type.parseFirst("Ljava/lang/String;LFoo;"), is(answer)); assertThat(Type.parseFirst("Ljava/lang/String;[LFoo;"), is(answer)); } } @Test public void parseArray() { { final String answer = "[I"; assertThat(Type.parseFirst("[I"), is(answer)); assertThat(Type.parseFirst("[III"), is(answer)); assertThat(Type.parseFirst("[IJZ"), is(answer)); assertThat(Type.parseFirst("[I[I"), is(answer)); assertThat(Type.parseFirst("[ILFoo;"), is(answer)); } { final String answer = "[[I"; assertThat(Type.parseFirst("[[I"), is(answer)); assertThat(Type.parseFirst("[[III"), is(answer)); assertThat(Type.parseFirst("[[IJZ"), is(answer)); assertThat(Type.parseFirst("[[I[I"), is(answer)); assertThat(Type.parseFirst("[[ILFoo;"), is(answer)); } { final String answer = "[LFoo;"; assertThat(Type.parseFirst("[LFoo;"), is(answer)); assertThat(Type.parseFirst("[LFoo;II"), is(answer)); assertThat(Type.parseFirst("[LFoo;JZ"), is(answer)); assertThat(Type.parseFirst("[LFoo;[I"), is(answer)); assertThat(Type.parseFirst("[LFoo;LFoo;"), is(answer)); } } @Test public void equals() { assertThat(new Type("V"), is(new Type("V"))); assertThat(new Type("Z"), is(new Type("Z"))); assertThat(new Type("B"), is(new Type("B"))); assertThat(new Type("C"), is(new Type("C"))); assertThat(new Type("I"), is(new Type("I"))); assertThat(new Type("J"), is(new Type("J"))); assertThat(new Type("F"), is(new Type("F"))); assertThat(new Type("D"), is(new Type("D"))); assertThat(new Type("LFoo;"), is(new Type("LFoo;"))); assertThat(new Type("[I"), is(new Type("[I"))); assertThat(new Type("[[[I"), is(new Type("[[[I"))); assertThat(new Type("[LFoo;"), is(new Type("[LFoo;"))); assertThat(new Type("V"), is(not(new Type("I")))); assertThat(new Type("I"), is(not(new Type("J")))); assertThat(new Type("I"), is(not(new Type("LBar;")))); assertThat(new Type("I"), is(not(new Type("[I")))); assertThat(new Type("LFoo;"), is(not(new Type("LBar;")))); assertThat(new Type("[I"), is(not(new Type("[Z")))); assertThat(new Type("[[[I"), is(not(new Type("[I")))); assertThat(new Type("[LFoo;"), is(not(new Type("[LBar;")))); } @Test public void testToString() { assertThat(new Type("V").toString(), is("V")); assertThat(new Type("Z").toString(), is("Z")); assertThat(new Type("B").toString(), is("B")); assertThat(new Type("C").toString(), is("C")); assertThat(new Type("I").toString(), is("I")); assertThat(new Type("J").toString(), is("J")); assertThat(new Type("F").toString(), is("F")); assertThat(new Type("D").toString(), is("D")); assertThat(new Type("LFoo;").toString(), is("LFoo;")); assertThat(new Type("[I").toString(), is("[I")); assertThat(new Type("[[[I").toString(), is("[[[I")); assertThat(new Type("[LFoo;").toString(), is("[LFoo;")); } }