|
| 1 | +package rx.lang.scala |
| 2 | + |
| 3 | +import scala.reflect.runtime.universe._ |
| 4 | +import org.scalatest.junit.JUnitSuite |
| 5 | +import org.junit.Test |
| 6 | +import rx.util.functions._ |
| 7 | + |
| 8 | +class CompletenessTest extends JUnitSuite { |
| 9 | + |
| 10 | + case class Op(name: String, argTypes: Type*) { |
| 11 | + override def toString = name + argTypes.mkString("(", ", ", ")") |
| 12 | + } |
| 13 | + |
| 14 | + val correspondence = Map( |
| 15 | + Op("toList") -> Op("toSeq"), |
| 16 | + Op("window", typeOf[Int]) -> Op("window", typeOf[Int]) |
| 17 | + ) |
| 18 | + |
| 19 | + def check(cond: Boolean, ifGood: String, ifBad: String): Unit = { |
| 20 | + if (cond) println(ifGood) else println(ifBad) |
| 21 | + } |
| 22 | + |
| 23 | + def checkOperatorPresence(op: Op, tp: Type): Unit = { |
| 24 | + val paramTypeLists = for (alt <- tp.member(newTermName(op.name)).asTerm.alternatives) |
| 25 | + yield alt.asMethod.paramss.headOption match { |
| 26 | + case Some(paramList) => paramList.map(symb => symb.typeSignature) |
| 27 | + case None => List() |
| 28 | + } |
| 29 | + |
| 30 | + println(paramTypeLists) |
| 31 | + |
| 32 | + check(paramTypeLists.contains(op.argTypes.toList), |
| 33 | + s"$op is present in $tp", s"$op is NOT present in $tp") |
| 34 | + } |
| 35 | + |
| 36 | + @Test def test3() { |
| 37 | + val javaObs = typeOf[rx.Observable[_]] |
| 38 | + val scalaObs = typeOf[rx.lang.scala.Observable[_]] |
| 39 | + |
| 40 | + for ((javaOp, scalaOp) <- correspondence) { |
| 41 | + checkOperatorPresence(javaOp, javaObs) |
| 42 | + checkOperatorPresence(scalaOp, scalaObs) |
| 43 | + } |
| 44 | + } |
| 45 | + |
| 46 | + |
| 47 | + @Test def test1() { |
| 48 | + val c = Class.forName("rx.Observable") |
| 49 | + for (method <- c.getMethods()) { |
| 50 | + println(method.getName()) |
| 51 | + } |
| 52 | + |
| 53 | + } |
| 54 | + |
| 55 | + @Test def test2() { |
| 56 | + val tp = typeOf[rx.Observable[_]] |
| 57 | + for (member <- tp.members) println(member) |
| 58 | + println("00000") |
| 59 | + //println(tp.member(stringToTermName("all"))) |
| 60 | + //println(tp.member("all")) |
| 61 | + |
| 62 | + val methodAll = tp.member(newTermName("all")).asMethod |
| 63 | + println(methodAll.fullName) |
| 64 | + |
| 65 | + val methodBufferAlts = tp.member(newTermName("buffer")).asTerm.alternatives |
| 66 | + } |
| 67 | + |
| 68 | +} |
0 commit comments