/******************************************************************************* * Copyright (c) 2014 Jeff Martin. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Jeff Martin - initial API and implementation ******************************************************************************/ package cuchaz.enigma; import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByConstructor; import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByMethod; import static cuchaz.enigma.EntryFactory.newConstructor; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import java.io.File; import org.junit.Test; import cuchaz.enigma.mapping.BehaviorEntry; public class TestTokensConstructors extends TokenChecker { public TestTokensConstructors( ) throws Exception { super( new File( "build/libs/testConstructors.obf.jar" ) ); } @Test public void baseDeclarations( ) { assertThat( getDeclarationToken( newConstructor( "none/a", "()V" ) ), is( "a" ) ); assertThat( getDeclarationToken( newConstructor( "none/a", "(I)V" ) ), is( "a" ) ); } @Test public void subDeclarations( ) { assertThat( getDeclarationToken( newConstructor( "none/d", "()V" ) ), is( "d" ) ); assertThat( getDeclarationToken( newConstructor( "none/d", "(I)V" ) ), is( "d" ) ); assertThat( getDeclarationToken( newConstructor( "none/d", "(II)V" ) ), is( "d" ) ); assertThat( getDeclarationToken( newConstructor( "none/d", "(III)V" ) ), is( "d" ) ); } @Test public void subsubDeclarations( ) { assertThat( getDeclarationToken( newConstructor( "none/e", "(I)V" ) ), is( "e" ) ); } @Test public void defaultDeclarations( ) { assertThat( getDeclarationToken( newConstructor( "none/c", "()V" ) ), nullValue() ); } @Test public void baseDefaultReferences( ) { BehaviorEntry source = newConstructor( "none/a", "()V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "a", "()V" ) ), containsInAnyOrder( "a" ) ); assertThat( getReferenceTokens( newBehaviorReferenceByConstructor( source, "none/d", "()V" ) ), containsInAnyOrder( "super" ) // implicit call, decompiled to "super" ); assertThat( getReferenceTokens( newBehaviorReferenceByConstructor( source, "none/d", "(III)V" ) ), containsInAnyOrder( "super" ) // implicit call, decompiled to "super" ); } @Test public void baseIntReferences( ) { BehaviorEntry source = newConstructor( "none/a", "(I)V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "b", "()V" ) ), containsInAnyOrder( "a" ) ); } @Test public void subDefaultReferences( ) { BehaviorEntry source = newConstructor( "none/d", "()V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "c", "()V" ) ), containsInAnyOrder( "d" ) ); assertThat( getReferenceTokens( newBehaviorReferenceByConstructor( source, "none/d", "(I)V" ) ), containsInAnyOrder( "this" ) ); } @Test public void subIntReferences( ) { BehaviorEntry source = newConstructor( "none/d", "(I)V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "d", "()V" ) ), containsInAnyOrder( "d" ) ); assertThat( getReferenceTokens( newBehaviorReferenceByConstructor( source, "none/d", "(II)V" ) ), containsInAnyOrder( "this" ) ); assertThat( getReferenceTokens( newBehaviorReferenceByConstructor( source, "none/e", "(I)V" ) ), containsInAnyOrder( "super" ) ); } @Test public void subIntIntReferences( ) { BehaviorEntry source = newConstructor( "none/d", "(II)V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "e", "()V" ) ), containsInAnyOrder( "d" ) ); } @Test public void subsubIntReferences( ) { BehaviorEntry source = newConstructor( "none/e", "(I)V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "f", "()V" ) ), containsInAnyOrder( "e" ) ); } @Test public void defaultConstructableReferences( ) { BehaviorEntry source = newConstructor( "none/c", "()V" ); assertThat( getReferenceTokens( newBehaviorReferenceByMethod( source, "none/b", "g", "()V" ) ), containsInAnyOrder( "c" ) ); } }