|
| 1 | +package scala.tools.nsc.transform |
| 2 | + |
| 3 | +import org.junit.Assert.assertSame |
| 4 | +import org.junit.{Assert, Test} |
| 5 | + |
| 6 | +import scala.tools.nsc.reporters.StoreReporter |
| 7 | + |
| 8 | +class ThicketTransformerTest { |
| 9 | + @Test def thicketExpansion(): Unit = { |
| 10 | + val g = new scala.tools.nsc.Global(new StoreReporter) |
| 11 | + g.settings.usejavacp.value = true |
| 12 | + new g.Run |
| 13 | + import g._ |
| 14 | + object testTransformers extends TypingTransformers { |
| 15 | + val global: g.type = g |
| 16 | + val dummyUnit = newCompilationUnit("") |
| 17 | + |
| 18 | + object testTransformer extends ThicketTransformer(newRootLocalTyper(dummyUnit)) { |
| 19 | + override def transform(tree: Tree): Tree = tree match { |
| 20 | + case Literal(Constant(s: String)) if (s.toLowerCase() != s) => Literal(Constant(s.toLowerCase())) |
| 21 | + case Literal(Constant(s: String)) => s.toList.filterNot(_ == '-') match { |
| 22 | + case Nil => Thicket(Nil, EmptyTree) |
| 23 | + case a :: Nil => tree |
| 24 | + case as => |
| 25 | + Thicket(Block(as.map(c => Literal(Constant(c.toString)).setType(definitions.StringTpe)): _*)) |
| 26 | + } |
| 27 | + case t => super.transform(t) |
| 28 | + } |
| 29 | + } |
| 30 | + } |
| 31 | + def t(t: Tree): Tree = testTransformers.testTransformer.transform(t) |
| 32 | + def assertTreeEquals(expected: Tree, actual: Tree) = Assert.assertEquals(expected.toString, actual.toString) |
| 33 | + |
| 34 | + def s(s: String) = Literal(Constant(s)) |
| 35 | + def i(i: Int) = Literal(Constant(i)) |
| 36 | + |
| 37 | + locally { |
| 38 | + val noTransform = Block(s("a") :: Nil, s("b")) |
| 39 | + assertSame(noTransform, t(noTransform)) |
| 40 | + } |
| 41 | + |
| 42 | + locally { |
| 43 | + val noTransform = Block(s("a") :: s("b") :: Nil, s("c")) |
| 44 | + assertSame(noTransform, t(noTransform)) |
| 45 | + } |
| 46 | + |
| 47 | + locally { |
| 48 | + val transformStats = Block(s("ab") :: i(1) :: s("cd") :: Nil, s("e")) |
| 49 | + assertTreeEquals(Block(s("a") :: s("b") :: i(1) :: s("c") :: s("d") :: Nil, s("e")), t(transformStats)) |
| 50 | + } |
| 51 | + |
| 52 | + locally { |
| 53 | + val transformStats = Block(s("ab") :: s("cd") :: Nil, s("e")) |
| 54 | + assertTreeEquals(Block(s("a") :: s("b") :: s("c") :: s("d") :: Nil, s("e")), t(transformStats)) |
| 55 | + } |
| 56 | + |
| 57 | + locally { |
| 58 | + val transformExpr = Block(s("a") :: s("b") :: Nil, s("cd")) |
| 59 | + assertTreeEquals(Block(s("a") :: s("b") :: s("c") :: Nil, s("d")), t(transformExpr)) |
| 60 | + } |
| 61 | + |
| 62 | + locally { |
| 63 | + val transformStatsExpr = Block(s("ab") :: s("cd") :: Nil, s("ef")) |
| 64 | + assertTreeEquals(Block(s("a") :: s("b") :: s("c") :: s("d") :: s("e") :: Nil, s("f")), t(transformStatsExpr)) |
| 65 | + } |
| 66 | + |
| 67 | + locally { |
| 68 | + val transformStatsExpr = Block(s("A") :: s("B") :: Nil, s("cd")) |
| 69 | + assertTreeEquals(Block(s("a") :: s("b") :: s("c") :: Nil, s("d")), t(transformStatsExpr)) |
| 70 | + } |
| 71 | + |
| 72 | + locally { |
| 73 | + val transformStatsExpr = Block(s("A") :: s("B") :: Nil, s("C")) |
| 74 | + assertTreeEquals(Block(s("a") :: s("b") :: Nil, s("c")), t(transformStatsExpr)) |
| 75 | + } |
| 76 | + |
| 77 | + locally { |
| 78 | + val transformStatsExpr = Block(s("-") :: Nil, s("a")) |
| 79 | + assertTreeEquals(Block(Nil, s("a")), t(transformStatsExpr)) |
| 80 | + } |
| 81 | + } |
| 82 | +} |
0 commit comments