From 8409dea980fa03c06b180969c5e0696f7cb5474b Mon Sep 17 00:00:00 2001 From: jeff Date: Sun, 21 Sep 2014 00:32:03 -0400 Subject: started unit testing for inner/anonymous class detection --- test/cuchaz/enigma/TestInnerClasses.java | 64 ++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/cuchaz/enigma/TestInnerClasses.java (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java new file mode 100644 index 0000000..c6b1b5f --- /dev/null +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * 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 org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; + +import java.util.jar.JarFile; + +import org.junit.Test; + +import cuchaz.enigma.analysis.JarIndex; + +public class TestInnerClasses +{ + private JarIndex m_index; + + private static final String AnonymousOuter = "none/a"; + private static final String AnonymousInner = "none/b"; + private static final String SimpleOuter = "none/e"; + private static final String SimpleInner = "none/f"; + private static final String ConstructorArgsOuter = "none/c"; + private static final String ConstructorArgsInner = "none/d"; + + public TestInnerClasses( ) + throws Exception + { + m_index = new JarIndex(); + m_index.indexJar( new JarFile( "build/libs/testInnerClasses.obf.jar" ), true ); + } + + @Test + public void simple( ) + { + assertThat( m_index.getOuterClass( SimpleInner ), is( SimpleOuter ) ); + assertThat( m_index.getInnerClasses( SimpleOuter ), containsInAnyOrder( SimpleInner ) ); + assertThat( m_index.isAnonymousClass( SimpleInner ), is( false ) ); + } + + @Test + public void anonymous( ) + { + assertThat( m_index.getOuterClass( AnonymousInner ), is( AnonymousOuter ) ); + assertThat( m_index.getInnerClasses( AnonymousOuter ), containsInAnyOrder( AnonymousInner ) ); + assertThat( m_index.isAnonymousClass( AnonymousInner ), is( true ) ); + } + + @Test + public void constructorArgs( ) + { + assertThat( m_index.getOuterClass( ConstructorArgsInner ), is( ConstructorArgsOuter ) ); + assertThat( m_index.getInnerClasses( ConstructorArgsOuter ), containsInAnyOrder( ConstructorArgsInner ) ); + assertThat( m_index.isAnonymousClass( ConstructorArgsInner ), is( false ) ); + } +} -- cgit v1.2.3 From df06f4ddde5e255750edc4087cfba54823404909 Mon Sep 17 00:00:00 2001 From: jeff Date: Sun, 21 Sep 2014 22:08:05 -0400 Subject: improved inner/anonymous class detection --- test/cuchaz/enigma/TestInnerClasses.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index c6b1b5f..e555d92 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -26,10 +26,12 @@ public class TestInnerClasses private static final String AnonymousOuter = "none/a"; private static final String AnonymousInner = "none/b"; - private static final String SimpleOuter = "none/e"; - private static final String SimpleInner = "none/f"; - private static final String ConstructorArgsOuter = "none/c"; - private static final String ConstructorArgsInner = "none/d"; + private static final String SimpleOuter = "none/g"; + private static final String SimpleInner = "none/h"; + private static final String ConstructorArgsOuter = "none/e"; + private static final String ConstructorArgsInner = "none/f"; + private static final String AnonymousWithScopeArgsOuter = "none/c"; + private static final String AnonymousWithScopeArgsInner = "none/d"; public TestInnerClasses( ) throws Exception @@ -61,4 +63,12 @@ public class TestInnerClasses assertThat( m_index.getInnerClasses( ConstructorArgsOuter ), containsInAnyOrder( ConstructorArgsInner ) ); assertThat( m_index.isAnonymousClass( ConstructorArgsInner ), is( false ) ); } + + @Test + public void anonymousWithScopeArgs( ) + { + assertThat( m_index.getOuterClass( AnonymousWithScopeArgsInner ), is( AnonymousWithScopeArgsOuter ) ); + assertThat( m_index.getInnerClasses( AnonymousWithScopeArgsOuter ), containsInAnyOrder( AnonymousWithScopeArgsInner ) ); + assertThat( m_index.isAnonymousClass( AnonymousWithScopeArgsInner ), is( true ) ); + } } -- cgit v1.2.3 From 056f388494337a0f3cec10fab8e207017757bf6d Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 1 Oct 2014 00:21:29 -0400 Subject: fix inner classes test --- test/cuchaz/enigma/TestInnerClasses.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index e555d92..a7ee0b6 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -25,13 +25,13 @@ public class TestInnerClasses private JarIndex m_index; private static final String AnonymousOuter = "none/a"; - private static final String AnonymousInner = "none/b"; + private static final String AnonymousInner = "b"; private static final String SimpleOuter = "none/g"; - private static final String SimpleInner = "none/h"; + private static final String SimpleInner = "h"; private static final String ConstructorArgsOuter = "none/e"; - private static final String ConstructorArgsInner = "none/f"; + private static final String ConstructorArgsInner = "f"; private static final String AnonymousWithScopeArgsOuter = "none/c"; - private static final String AnonymousWithScopeArgsInner = "none/d"; + private static final String AnonymousWithScopeArgsInner = "d"; public TestInnerClasses( ) throws Exception -- cgit v1.2.3 From 035e73fba69ab06172ae9d784b9e0e4fffeb8388 Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 8 Oct 2014 23:54:08 -0400 Subject: relicense as LGPL --- test/cuchaz/enigma/TestInnerClasses.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index a7ee0b6..81626ff 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -1,10 +1,9 @@ /******************************************************************************* * 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 + * 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 -- cgit v1.2.3 From 812e2a4630ef01463ff153ba5ffae675e8ac24ac Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 9 Oct 2014 19:37:19 -0400 Subject: reverting to GPL license --- test/cuchaz/enigma/TestInnerClasses.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index 81626ff..a7ee0b6 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -1,9 +1,10 @@ /******************************************************************************* * Copyright (c) 2014 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 + * 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 -- cgit v1.2.3 From 959cb5fd4f9586ec3bd265b452fe25fe1db82e3f Mon Sep 17 00:00:00 2001 From: jeff Date: Tue, 13 Jan 2015 23:25:04 -0500 Subject: source format change don't hate me too much if you were planning a big merge. =P --- test/cuchaz/enigma/TestInnerClasses.java | 48 ++++++++++++++------------------ 1 file changed, 21 insertions(+), 27 deletions(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index a7ee0b6..c84d755 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -20,8 +20,8 @@ import org.junit.Test; import cuchaz.enigma.analysis.JarIndex; -public class TestInnerClasses -{ +public class TestInnerClasses { + private JarIndex m_index; private static final String AnonymousOuter = "none/a"; @@ -33,42 +33,36 @@ public class TestInnerClasses private static final String AnonymousWithScopeArgsOuter = "none/c"; private static final String AnonymousWithScopeArgsInner = "d"; - public TestInnerClasses( ) - throws Exception - { + public TestInnerClasses() throws Exception { m_index = new JarIndex(); - m_index.indexJar( new JarFile( "build/libs/testInnerClasses.obf.jar" ), true ); + m_index.indexJar(new JarFile("build/libs/testInnerClasses.obf.jar"), true); } @Test - public void simple( ) - { - assertThat( m_index.getOuterClass( SimpleInner ), is( SimpleOuter ) ); - assertThat( m_index.getInnerClasses( SimpleOuter ), containsInAnyOrder( SimpleInner ) ); - assertThat( m_index.isAnonymousClass( SimpleInner ), is( false ) ); + public void simple() { + assertThat(m_index.getOuterClass(SimpleInner), is(SimpleOuter)); + assertThat(m_index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner)); + assertThat(m_index.isAnonymousClass(SimpleInner), is(false)); } @Test - public void anonymous( ) - { - assertThat( m_index.getOuterClass( AnonymousInner ), is( AnonymousOuter ) ); - assertThat( m_index.getInnerClasses( AnonymousOuter ), containsInAnyOrder( AnonymousInner ) ); - assertThat( m_index.isAnonymousClass( AnonymousInner ), is( true ) ); + public void anonymous() { + assertThat(m_index.getOuterClass(AnonymousInner), is(AnonymousOuter)); + assertThat(m_index.getInnerClasses(AnonymousOuter), containsInAnyOrder(AnonymousInner)); + assertThat(m_index.isAnonymousClass(AnonymousInner), is(true)); } - + @Test - public void constructorArgs( ) - { - assertThat( m_index.getOuterClass( ConstructorArgsInner ), is( ConstructorArgsOuter ) ); - assertThat( m_index.getInnerClasses( ConstructorArgsOuter ), containsInAnyOrder( ConstructorArgsInner ) ); - assertThat( m_index.isAnonymousClass( ConstructorArgsInner ), is( false ) ); + public void constructorArgs() { + assertThat(m_index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter)); + assertThat(m_index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner)); + assertThat(m_index.isAnonymousClass(ConstructorArgsInner), is(false)); } @Test - public void anonymousWithScopeArgs( ) - { - assertThat( m_index.getOuterClass( AnonymousWithScopeArgsInner ), is( AnonymousWithScopeArgsOuter ) ); - assertThat( m_index.getInnerClasses( AnonymousWithScopeArgsOuter ), containsInAnyOrder( AnonymousWithScopeArgsInner ) ); - assertThat( m_index.isAnonymousClass( AnonymousWithScopeArgsInner ), is( true ) ); + public void anonymousWithScopeArgs() { + assertThat(m_index.getOuterClass(AnonymousWithScopeArgsInner), is(AnonymousWithScopeArgsOuter)); + assertThat(m_index.getInnerClasses(AnonymousWithScopeArgsOuter), containsInAnyOrder(AnonymousWithScopeArgsInner)); + assertThat(m_index.isAnonymousClass(AnonymousWithScopeArgsInner), is(true)); } } -- cgit v1.2.3 From 2fbcf8e5c4eec0aa4a4fc59c7cc8abac33b1429c Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 19 Jan 2015 22:22:57 -0500 Subject: solved tricky issue with incorrect translation of fields/methods referenced by a subclass instead of the declaring class --- test/cuchaz/enigma/TestInnerClasses.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index c84d755..51fb5e3 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -35,7 +35,7 @@ public class TestInnerClasses { public TestInnerClasses() throws Exception { m_index = new JarIndex(); - m_index.indexJar(new JarFile("build/libs/testInnerClasses.obf.jar"), true); + m_index.indexJar(new JarFile("build/testInnerClasses.obf.jar"), true); } @Test -- cgit v1.2.3 From 448685653e90415ebe10b08e8335462b81c30421 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 2 Feb 2015 21:26:10 -0500 Subject: fix issue with bridge methods --- test/cuchaz/enigma/TestInnerClasses.java | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index 51fb5e3..63c9b71 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -23,6 +23,7 @@ import cuchaz.enigma.analysis.JarIndex; public class TestInnerClasses { private JarIndex m_index; + private Deobfuscator m_deobfuscator; private static final String AnonymousOuter = "none/a"; private static final String AnonymousInner = "b"; @@ -32,10 +33,14 @@ public class TestInnerClasses { private static final String ConstructorArgsInner = "f"; private static final String AnonymousWithScopeArgsOuter = "none/c"; private static final String AnonymousWithScopeArgsInner = "d"; + private static final String AnonymousWithOuterAccessOuter = "none/i"; + private static final String AnonymousWithOuterAccessInner = "j"; public TestInnerClasses() throws Exception { m_index = new JarIndex(); - m_index.indexJar(new JarFile("build/testInnerClasses.obf.jar"), true); + JarFile jar = new JarFile("build/testInnerClasses.obf.jar"); + m_index.indexJar(jar, true); + m_deobfuscator = new Deobfuscator(jar); } @Test @@ -43,6 +48,7 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(SimpleInner), is(SimpleOuter)); assertThat(m_index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner)); assertThat(m_index.isAnonymousClass(SimpleInner), is(false)); + decompile(SimpleOuter); } @Test @@ -50,6 +56,7 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(AnonymousInner), is(AnonymousOuter)); assertThat(m_index.getInnerClasses(AnonymousOuter), containsInAnyOrder(AnonymousInner)); assertThat(m_index.isAnonymousClass(AnonymousInner), is(true)); + decompile(AnonymousOuter); } @Test @@ -57,6 +64,7 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter)); assertThat(m_index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner)); assertThat(m_index.isAnonymousClass(ConstructorArgsInner), is(false)); + decompile(ConstructorArgsOuter); } @Test @@ -64,5 +72,18 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(AnonymousWithScopeArgsInner), is(AnonymousWithScopeArgsOuter)); assertThat(m_index.getInnerClasses(AnonymousWithScopeArgsOuter), containsInAnyOrder(AnonymousWithScopeArgsInner)); assertThat(m_index.isAnonymousClass(AnonymousWithScopeArgsInner), is(true)); + decompile(AnonymousWithScopeArgsOuter); + } + + @Test + public void anonymousWithOuterAccess() { + assertThat(m_index.getOuterClass(AnonymousWithOuterAccessInner), is(AnonymousWithOuterAccessOuter)); + assertThat(m_index.getInnerClasses(AnonymousWithOuterAccessOuter), containsInAnyOrder(AnonymousWithOuterAccessInner)); + assertThat(m_index.isAnonymousClass(AnonymousWithOuterAccessInner), is(true)); + decompile(AnonymousWithOuterAccessOuter); + } + + private void decompile(String name) { + m_deobfuscator.getSourceTree(name); } } -- cgit v1.2.3 From 818716acb3992e602e01725b6e151c1eb0f6c2e2 Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 5 Feb 2015 23:52:55 -0500 Subject: fix test code formatting and disable the super duper slow test for now --- test/cuchaz/enigma/TestInnerClasses.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test/cuchaz/enigma/TestInnerClasses.java') diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index 63c9b71..2e16a33 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -36,7 +36,8 @@ public class TestInnerClasses { private static final String AnonymousWithOuterAccessOuter = "none/i"; private static final String AnonymousWithOuterAccessInner = "j"; - public TestInnerClasses() throws Exception { + public TestInnerClasses() + throws Exception { m_index = new JarIndex(); JarFile jar = new JarFile("build/testInnerClasses.obf.jar"); m_index.indexJar(jar, true); -- cgit v1.2.3