From 089a8a01852467414314592ba342713e2b71ad6d Mon Sep 17 00:00:00 2001 From: Ivan Dubrov Date: Thu, 27 Aug 2015 13:42:12 -0700 Subject: Fixing issue when lambda method could not be found closes #81 --- .../com/github/dcevm/test/lambdas/LambdaTest.java | 81 ++++++++++++++++++++-- 1 file changed, 77 insertions(+), 4 deletions(-) (limited to 'dcevm/src') diff --git a/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java b/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java index efacdbbc..90134954 100644 --- a/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java +++ b/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java @@ -24,16 +24,15 @@ package com.github.dcevm.test.lambdas; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.*; import java.util.concurrent.Callable; +import java.util.function.Consumer; import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__; import static com.github.dcevm.test.util.HotSwapTestHelper.__version__; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; /** * Tests for lambda expressions. @@ -66,4 +65,78 @@ public class LambdaTest { assertEquals(30, (int) lambda.call()); assertEquals(40, (int) lambda2.call()); } + + // version 0 + public static class LambdaC2 { + public int i = 0; + + public void doit() { + LambdaTest.methodWithLambdaParam(integer -> i += integer); + } + } + + // version 1 + public static class LambdaC2___1 { + int i = 0; + + public void doit() { + LambdaTest.methodWithLambdaParam(integer -> i -= integer); + } + } + + public static void methodWithLambdaParam(Consumer consumer) { + consumer.accept(1); + } + + @Test + public void testMethodLambda2() throws Exception { + assert __version__() == 0; + + final LambdaC2 instance = new LambdaC2(); + instance.doit(); + Assert.assertEquals(1, instance.i); + + __toVersion__(1); + + instance.doit(); + Assert.assertEquals(0, instance.i); + } + + // version 0 + public static class LambdaC3 { + public int i = 0; + public Consumer l = x -> i += x; + + public void doit() { + LambdaTest.methodWithLambdaParam(l); + } + } + + // version 1 + public static class LambdaC3___1 { + int i = 0; + public Consumer l = null; + + public void doit() { + LambdaTest.methodWithLambdaParam(l); + } + } + + @Test + public void testMethodLambda3() throws Exception { + assert __version__() == 0; + + final LambdaC3 instance = new LambdaC3(); + instance.doit(); + Assert.assertEquals(1, instance.i); + + __toVersion__(1); + + try { + instance.doit(); + fail("Should get NoSuchMethodError as method implementing lambda should be gone in version 1"); + } catch (NoSuchMethodError e) { + // Ok! + } + } } \ No newline at end of file -- cgit v1.2.3