summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-11-14 14:51:58 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-11-17 18:17:50 +0100
commit1080da80769cdc2bef2f06977094caff625b4a15 (patch)
tree83400ad47cc77390528ff5207ccfe989230b76b1 /test
parent69e62de87d80cf5b9d8c7f4eefcea0638fb2759d (diff)
downloadscala-1080da80769cdc2bef2f06977094caff625b4a15.tar.gz
scala-1080da80769cdc2bef2f06977094caff625b4a15.tar.bz2
scala-1080da80769cdc2bef2f06977094caff625b4a15.zip
refactor out fresh name prefix extraction logic
1. refactor out FreshNameExtractor out of Quasiquotes cake into SymbolTable (can’t put it outside due to the fact that names are path-dependent) 2. add optional parameter to the fresh name creator to cover additional qq$ prefix needed for quasiquotes 3. add unit tests
Diffstat (limited to 'test')
-rw-r--r--test/files/scalacheck/quasiquotes/QuasiquoteProperties.scala13
-rw-r--r--test/junit/scala/tools/nsc/symtab/FreshNameExtractorTest.scala47
2 files changed, 53 insertions, 7 deletions
diff --git a/test/files/scalacheck/quasiquotes/QuasiquoteProperties.scala b/test/files/scalacheck/quasiquotes/QuasiquoteProperties.scala
index b2bce124ee..d398c254fb 100644
--- a/test/files/scalacheck/quasiquotes/QuasiquoteProperties.scala
+++ b/test/files/scalacheck/quasiquotes/QuasiquoteProperties.scala
@@ -18,13 +18,12 @@ trait Helpers {
object simplify extends Transformer {
object SimplifiedName {
- def unapply[T <: Name](name: T): Option[T] =
- name.toString.split("\\$").toSeq match {
- case first :+ last if scala.util.Try(last.toInt).isSuccess && first.nonEmpty =>
- val value = first.mkString("", "$", "$")
- Some((if (name.isTermName) TermName(value) else TypeName(value)).asInstanceOf[T])
- case _ => None
- }
+ val st = scala.reflect.runtime.universe.asInstanceOf[scala.reflect.internal.SymbolTable]
+ val FreshName = new st.FreshNameExtractor
+ def unapply[T <: Name](name: T): Option[T] = name.asInstanceOf[st.Name] match {
+ case FreshName(prefix) =>
+ Some((if (name.isTermName) TermName(prefix) else TypeName(prefix)).asInstanceOf[T])
+ }
}
override def transform(tree: Tree): Tree = tree match {
diff --git a/test/junit/scala/tools/nsc/symtab/FreshNameExtractorTest.scala b/test/junit/scala/tools/nsc/symtab/FreshNameExtractorTest.scala
new file mode 100644
index 0000000000..cf09abdfff
--- /dev/null
+++ b/test/junit/scala/tools/nsc/symtab/FreshNameExtractorTest.scala
@@ -0,0 +1,47 @@
+package scala.tools.nsc
+package symtab
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.testing.AssertUtil.assertThrows
+import scala.reflect.internal.util.FreshNameCreator
+
+@RunWith(classOf[JUnit4])
+class FreshNameExtractorTest {
+ object symbolTable extends SymbolTableForUnitTesting
+ import symbolTable._
+
+ val prefixes = List("foo$", "x$", "bar", "bippy$baz$")
+
+ @Test
+ def extractionPreservesPrefix =
+ ("" :: prefixes).foreach { creatorPrefix =>
+ prefixes.foreach { newPrefix =>
+ val Creator = new FreshNameCreator(creatorPrefix)
+ val Extractor = new FreshNameExtractor(creatorPrefix)
+ val Extractor(extractedPrefix) = TermName(Creator.newName(newPrefix))
+ assertEquals(newPrefix, extractedPrefix)
+ }
+ }
+
+ @Test
+ def extractionFailsOnCreatorPrefixMismatch = {
+ val Creator = new FreshNameCreator(prefixes.head)
+ val Extractor = new FreshNameExtractor(prefixes.tail.head)
+ assertThrows[MatchError] {
+ val Extractor(_) = TermName(Creator.newName("foo"))
+ }
+ }
+
+ @Test
+ def extractionsFailsIfNameDoesntEndWithNumber = {
+ val Creator = new FreshNameCreator(prefixes.head)
+ val Extractor = new FreshNameExtractor(prefixes.head)
+ assertThrows[MatchError] {
+ val Extractor(_) = TermName(Creator.newName("foo") + "bar")
+ }
+ }
+} \ No newline at end of file