From fd4c197cf1c62236d2bd07f09e6866c149a10867 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 17 Sep 2012 13:55:44 -0400 Subject: Adds very simplistic reflection in OSGi test. Provides the framework to discover important reflection bugs in OSGi containers. --- test/osgi/src/BasicReflection.scala | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/osgi/src/BasicReflection.scala diff --git a/test/osgi/src/BasicReflection.scala b/test/osgi/src/BasicReflection.scala new file mode 100644 index 0000000000..7dd958d6fd --- /dev/null +++ b/test/osgi/src/BasicReflection.scala @@ -0,0 +1,66 @@ +package tools.test.osgi +package reflection +package allmirrors + +import org.junit.Assert._ +import org.ops4j.pax.exam.CoreOptions._ + +import org.junit.Test +import org.junit.runner.RunWith +import org.ops4j.pax.exam +import org.ops4j.pax.exam.junit.{ + Configuration, + ExamReactorStrategy, + JUnit4TestRunner +} +import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory +import org.ops4j.pax.swissbox.framework.ServiceLookup +import org.osgi.framework.BundleContext + + +class C { + val f1 = 2 + var f2 = 3 + + def m1 = 4 + def m2() = 5 + def m3[T >: String <: Int]: T = ??? + def m4[A[_], B <: A[Int]](x: A[B])(implicit y: Int) = ??? + def m5(x: => Int, y: Int*): String = ??? + + class C + object M + + override def toString = "an instance of C" +} +object M + + +@RunWith(classOf[JUnit4TestRunner]) +@ExamReactorStrategy(Array(classOf[AllConfinedStagedReactorFactory])) +class BasicReflectionTest extends ScalaOsgiHelper { + + @Configuration + def config(): Array[exam.Option] = + scalaBundles + + // Ensure Pax-exam requires C/M in our module + def dummy = { + new C + M.toString + } + + @Test + def basicMirrorThroughOsgi(): Unit = { + // Note for now just assert that we can do this stuff. + import scala.reflect.runtime.universe._ + val cm = runtimeMirror(classOf[C].getClassLoader) + val im = cm.reflect(new C) + assertEquals("Unable to reflect field name!", + "value f1", + im.reflectField(typeOf[C].member(newTermName("f1")).asTerm).symbol.toString) + assertEquals("Unable to reflect value!", + 2, + im.reflectField(typeOf[C].member(newTermName("f1")).asTerm).get) + } +} -- cgit v1.2.3