From 699ecf87f6c36a7ecf834ed03ac8df35188e5f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:11:33 +0000 Subject: [PATCH] added test for projecting paths of custom types added parent classLoader for MemClassLoader --- .../com/mysema/codegen/EvaluatorFactory.java | 2 +- .../com/mysema/codegen/MemClassLoader.java | 3 ++- .../com/mysema/codegen/MemFileManager.java | 4 ++-- .../mysema/codegen/EvaluatorFactoryTest.java | 23 +++++++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 9f43be8f3..0a6d784a9 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -46,7 +46,7 @@ public class EvaluatorFactory { } public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { - this.fileManager = new MemFileManager(compiler.getStandardFileManager(null, null, null)); + this.fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); this.compiler = compiler; this.classpath = SimpleCompiler.getClassPath(parent); this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index 29895f844..af163599c 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -36,7 +36,8 @@ public final class MemClassLoader extends ClassLoader { private final Map> memFileSystem; - public MemClassLoader(Map> ramFileSystem) { + public MemClassLoader(ClassLoader parent, Map> ramFileSystem) { + super(parent); this.memFileSystem = ramFileSystem; } diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java index 6ad5adb54..33cfe0703 100644 --- a/src/main/java/com/mysema/codegen/MemFileManager.java +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -36,12 +36,12 @@ public class MemFileManager extends ForwardingJavaFileManager { private final String urlPrefix; - public MemFileManager(StandardJavaFileManager sjfm) { + public MemFileManager(ClassLoader parent, StandardJavaFileManager sjfm) { super(sjfm); ramFileSystem = new HashMap>(); Map classLoaderContent = new HashMap(); ramFileSystem.put(new LocationAndKind(StandardLocation.CLASS_OUTPUT, Kind.CLASS),classLoaderContent); - classLoader = new MemClassLoader(ramFileSystem); + classLoader = new MemClassLoader(parent, ramFileSystem); urlPrefix = MemFileSystemRegistry.DEFAULT.getUrlPrefix(this); } diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index e7eb5f075..e8882bd0e 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -8,6 +8,7 @@ package com.mysema.codegen; import java.io.IOException; import java.net.URLClassLoader; import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.junit.Assert; @@ -17,6 +18,20 @@ import org.junit.Test; public class EvaluatorFactoryTest { + public static class TestEntity { + + private final String name; + + public TestEntity(String name){ + this.name = name; + } + + public String getName() { + return name; + } + + } + private EvaluatorFactory factory; private List names = Arrays.asList("a","b"); @@ -55,6 +70,14 @@ public class EvaluatorFactoryTest { test("a + b", int.class, names, ints, Arrays.asList(1,2), 3); } + @Test + public void testCustomType(){ + test("a.getName()", String.class, + Collections.singletonList("a"), Collections.singletonList(TestEntity.class), + Arrays.asList(new TestEntity("Hello World")), "Hello World"); + + } + private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ Assert.assertEquals(expectedResult, test(source, projectionType, names, types, args)); }