diff --git a/main/src/main/scala/sbt/SessionSettings.scala b/main/src/main/scala/sbt/SessionSettings.scala
index 24789a3c2..109b17442 100755
--- a/main/src/main/scala/sbt/SessionSettings.scala
+++ b/main/src/main/scala/sbt/SessionSettings.scala
@@ -10,6 +10,7 @@ import Types.Endo
import compiler.Eval
import SessionSettings._
+import sbt.internals.parser.SbtRefactorings
/**
* Represents (potentially) transient settings added into a build via commands/user.
@@ -192,7 +193,7 @@ object SessionSettings {
}
val newSettings = settings diff replace
val oldContent = IO.readLines(writeTo)
- val exist: List[String] = SessionSettingsNoBlankies.oldLinesToNew(oldContent, statements)
+ val exist: List[String] = SbtRefactorings.applyStatements(oldContent, statements)
val adjusted = if (!newSettings.isEmpty && needsTrailingBlank(exist)) exist :+ "" else exist
val lines = adjusted ++ newSettings.flatMap(_._2 ::: "" :: Nil)
IO.writeLines(writeTo, lines)
diff --git a/main/src/main/scala/sbt/SessionSettingsNoBlankies.scala b/main/src/main/scala/sbt/internals/parser/SbtRefactorings.scala
similarity index 82%
rename from main/src/main/scala/sbt/SessionSettingsNoBlankies.scala
rename to main/src/main/scala/sbt/internals/parser/SbtRefactorings.scala
index 191793b17..df2f00f44 100644
--- a/main/src/main/scala/sbt/SessionSettingsNoBlankies.scala
+++ b/main/src/main/scala/sbt/internals/parser/SbtRefactorings.scala
@@ -1,15 +1,14 @@
-package sbt
+package sbt.internals.parser
import scala.reflect.runtime.universe._
-import sbt.internals.parser.{ XmlContent, SplitExpressionsNoBlankies }
-object SessionSettingsNoBlankies {
-
- import SplitExpressionsNoBlankies.FAKE_FILE
+private[sbt] object SbtRefactorings {
+ import sbt.internals.parser.SplitExpressionsNoBlankies.{ END_OF_LINE, FAKE_FILE }
+ val EMPTY_STRING = ""
val REVERSE_ORDERING_INT = Ordering[Int].reverse
- def oldLinesToNew(lines: List[String], setCommands: List[List[String]]): List[String] = {
+ def applyStatements(lines: List[String], setCommands: List[List[String]]): List[String] = {
val split = SplitExpressionsNoBlankies(FAKE_FILE, lines)
val recordedCommand = setCommands.flatMap {
command =>
@@ -21,9 +20,9 @@ object SessionSettingsNoBlankies {
val treeName = extractSettingName(tree)
if (name == treeName) {
val replacement = if (acc.isEmpty) {
- command.mkString("\n")
+ command.mkString(END_OF_LINE)
} else {
- ""
+ EMPTY_STRING
}
(tree.pos.start, statement, replacement) +: acc
} else {
@@ -39,7 +38,6 @@ object SessionSettingsNoBlankies {
val before = acc.substring(0, from)
val after = acc.substring(from + old.length, acc.length)
before + replacement + after
- // acc.replace(old, replacement)
}
newContent.lines.toList
}
diff --git a/main/src/main/scala/sbt/internals/parser/SplitExpressionsNoBlankies.scala b/main/src/main/scala/sbt/internals/parser/SplitExpressionsNoBlankies.scala
index b975f5226..381efc9d2 100644
--- a/main/src/main/scala/sbt/internals/parser/SplitExpressionsNoBlankies.scala
+++ b/main/src/main/scala/sbt/internals/parser/SplitExpressionsNoBlankies.scala
@@ -22,7 +22,7 @@ private[sbt] case class SplitExpressionsNoBlankies(file: File, lines: Seq[String
import scala.reflect.runtime._
import scala.compat.Platform.EOL
- import BugInParser._
+ import MissingBracketHandler._
import XmlContent._
import scala.tools.reflect.{ ToolBox, ToolBoxError }
@@ -97,7 +97,7 @@ private[sbt] case class SplitExpressionsNoBlankies(file: File, lines: Seq[String
* Scala parser cuts last bracket -
* @see http://stackoverflow.com/questions/25547149/scala-parser-cuts-last-bracket
*/
-private[sbt] object BugInParser {
+private[sbt] object MissingBracketHandler {
/**
*
* @param content - parsed file
diff --git a/main/src/test/resources/session-settings-quick/4.sbt.txt b/main/src/test/resources/session-settings-quick/4.sbt.txt
new file mode 100644
index 000000000..693c6cef6
--- /dev/null
+++ b/main/src/test/resources/session-settings-quick/4.sbt.txt
@@ -0,0 +1,17 @@
+k1 := {}
+
+k2 := {}
+
+k3 := {
+
+
+ val x = "hi"
+ ()
+}
+
+k4 := { }; k5 := ()
+
+k1 <<= k1 map {_ => error("k1")}
+
+k4 := { val x = k4.value; () }
+
diff --git a/main/src/test/resources/session-settings-quick/4.sbt.txt_1/1.set b/main/src/test/resources/session-settings-quick/4.sbt.txt_1/1.set
new file mode 100644
index 000000000..2a3525578
--- /dev/null
+++ b/main/src/test/resources/session-settings-quick/4.sbt.txt_1/1.set
@@ -0,0 +1 @@
+k4 := ()
diff --git a/main/src/test/resources/session-settings-quick/4.sbt.txt_1/1.set.result b/main/src/test/resources/session-settings-quick/4.sbt.txt_1/1.set.result
new file mode 100644
index 000000000..11a7d317b
--- /dev/null
+++ b/main/src/test/resources/session-settings-quick/4.sbt.txt_1/1.set.result
@@ -0,0 +1,15 @@
+k1 := {}
+
+k2 := {}
+
+k3 := {
+
+
+ val x = "hi"
+ ()
+}
+
+k4 := (); k5 := ()
+
+k1 <<= k1 map {_ => error("k1")}
+
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/1.set b/main/src/test/resources/session-settings/1.sbt.txt_1/1.set
new file mode 100644
index 000000000..bd735d1d1
--- /dev/null
+++ b/main/src/test/resources/session-settings/1.sbt.txt_1/1.set
@@ -0,0 +1 @@
+name := "alaMaKota"
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml.result b/main/src/test/resources/session-settings/1.sbt.txt_1/1.set.result
similarity index 100%
rename from main/src/test/resources/session-settings/1.sbt.txt_1/1.xml.result
rename to main/src/test/resources/session-settings/1.sbt.txt_1/1.set.result
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml b/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml
deleted file mode 100644
index a67818d62..000000000
--- a/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- 1
- 2
-
-
-
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/2.set b/main/src/test/resources/session-settings/1.sbt.txt_1/2.set
new file mode 100644
index 000000000..3a10fa9f2
--- /dev/null
+++ b/main/src/test/resources/session-settings/1.sbt.txt_1/2.set
@@ -0,0 +1,2 @@
+name := "alaMaKota"
+organization := "scalania"
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml.result b/main/src/test/resources/session-settings/1.sbt.txt_1/2.set.result
similarity index 100%
rename from main/src/test/resources/session-settings/1.sbt.txt_1/2.xml.result
rename to main/src/test/resources/session-settings/1.sbt.txt_1/2.set.result
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml b/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml
deleted file mode 100644
index 20e5c790f..000000000
--- a/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- 1
- 2
-
-
-
- 25
- 26
-
-
-
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/3.set b/main/src/test/resources/session-settings/1.sbt.txt_1/3.set
new file mode 100644
index 000000000..8dc207f57
--- /dev/null
+++ b/main/src/test/resources/session-settings/1.sbt.txt_1/3.set
@@ -0,0 +1 @@
+checkPom := "OK"
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml.result b/main/src/test/resources/session-settings/1.sbt.txt_1/3.set.result
similarity index 100%
rename from main/src/test/resources/session-settings/1.sbt.txt_1/3.xml.result
rename to main/src/test/resources/session-settings/1.sbt.txt_1/3.set.result
diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml b/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml
deleted file mode 100644
index efdba1fe1..000000000
--- a/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- 4
- 11
-
-
-
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/2.sbt.txt_1/1.set b/main/src/test/resources/session-settings/2.sbt.txt_1/1.set
new file mode 100644
index 000000000..bd735d1d1
--- /dev/null
+++ b/main/src/test/resources/session-settings/2.sbt.txt_1/1.set
@@ -0,0 +1 @@
+name := "alaMaKota"
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml.result b/main/src/test/resources/session-settings/2.sbt.txt_1/1.set.result
similarity index 100%
rename from main/src/test/resources/session-settings/2.sbt.txt_1/1.xml.result
rename to main/src/test/resources/session-settings/2.sbt.txt_1/1.set.result
diff --git a/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml b/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml
deleted file mode 100644
index a67818d62..000000000
--- a/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- 1
- 2
-
-
-
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/3.sbt.txt_1/1.set b/main/src/test/resources/session-settings/3.sbt.txt_1/1.set
new file mode 100644
index 000000000..3e2aa8d48
--- /dev/null
+++ b/main/src/test/resources/session-settings/3.sbt.txt_1/1.set
@@ -0,0 +1 @@
+scmpom := OK
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml.result b/main/src/test/resources/session-settings/3.sbt.txt_1/1.set.result
similarity index 100%
rename from main/src/test/resources/session-settings/3.sbt.txt_1/1.xml.result
rename to main/src/test/resources/session-settings/3.sbt.txt_1/1.set.result
diff --git a/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml b/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml
deleted file mode 100644
index 9f7ba5288..000000000
--- a/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- 5
- 18
- OK]]>
-
-
\ No newline at end of file
diff --git a/main/src/test/resources/session-settings/4.sbt.txt b/main/src/test/resources/session-settings/4.sbt.txt
new file mode 100644
index 000000000..693c6cef6
--- /dev/null
+++ b/main/src/test/resources/session-settings/4.sbt.txt
@@ -0,0 +1,17 @@
+k1 := {}
+
+k2 := {}
+
+k3 := {
+
+
+ val x = "hi"
+ ()
+}
+
+k4 := { }; k5 := ()
+
+k1 <<= k1 map {_ => error("k1")}
+
+k4 := { val x = k4.value; () }
+
diff --git a/main/src/test/resources/session-settings/4.sbt.txt_1/1.set b/main/src/test/resources/session-settings/4.sbt.txt_1/1.set
new file mode 100644
index 000000000..2a3525578
--- /dev/null
+++ b/main/src/test/resources/session-settings/4.sbt.txt_1/1.set
@@ -0,0 +1 @@
+k4 := ()
diff --git a/main/src/test/resources/session-settings/4.sbt.txt_1/1.set.result b/main/src/test/resources/session-settings/4.sbt.txt_1/1.set.result
new file mode 100644
index 000000000..11a7d317b
--- /dev/null
+++ b/main/src/test/resources/session-settings/4.sbt.txt_1/1.set.result
@@ -0,0 +1,15 @@
+k1 := {}
+
+k2 := {}
+
+k3 := {
+
+
+ val x = "hi"
+ ()
+}
+
+k4 := (); k5 := ()
+
+k1 <<= k1 map {_ => error("k1")}
+
diff --git a/main/src/test/scala/sbt/internals/parser/ErrorSpec.scala b/main/src/test/scala/sbt/internals/parser/ErrorSpec.scala
index 198139fd5..1ac265050 100644
--- a/main/src/test/scala/sbt/internals/parser/ErrorSpec.scala
+++ b/main/src/test/scala/sbt/internals/parser/ErrorSpec.scala
@@ -37,7 +37,7 @@ class ErrorSpec extends AbstractSpec with ScalaCheck {
| } /* */ //
|}
""".stripMargin
- BugInParser.findMissingText(buildSbt, buildSbt.length, 2, "fake.txt", new MessageOnlyException("fake")) must throwA[MessageOnlyException]
+ MissingBracketHandler.findMissingText(buildSbt, buildSbt.length, 2, "fake.txt", new MessageOnlyException("fake")) must throwA[MessageOnlyException]
}
}
diff --git a/main/src/test/scala/sbt/SessionSettingsSpec.scala b/main/src/test/scala/sbt/internals/parser/SessionSettingsSpec.scala
similarity index 57%
rename from main/src/test/scala/sbt/SessionSettingsSpec.scala
rename to main/src/test/scala/sbt/internals/parser/SessionSettingsSpec.scala
index 4c6e79100..64bf370ca 100644
--- a/main/src/test/scala/sbt/SessionSettingsSpec.scala
+++ b/main/src/test/scala/sbt/internals/parser/SessionSettingsSpec.scala
@@ -1,16 +1,14 @@
-package sbt
+package sbt.internals.parser
import java.io.{ File, FilenameFilter }
import org.specs2.matcher.MatchResult
-import sbt.internals.parser.{ AbstractSpec, SplitExpressionsNoBlankies }
import scala.collection.GenTraversableOnce
import scala.io.Source
-import scala.xml.XML
-abstract class AbstractSessionSettingsSpec(folder: String, printDetails: Boolean = false) extends AbstractSpec {
- protected val rootPath = getClass.getResource("").getPath + folder
+abstract class AbstractSessionSettingsSpec(folder: String, deepCompare: Boolean = false) extends AbstractSpec {
+ protected val rootPath = getClass.getClassLoader.getResource("").getPath + folder
println(s"Reading files from: $rootPath")
protected val rootDir = new File(rootPath)
@@ -25,7 +23,7 @@ abstract class AbstractSessionSettingsSpec(folder: String, printDetails: Boolean
}
}
- private def runTestOnFiles(expectedResultAndMap: File => Seq[(List[String], List[List[String]])]): MatchResult[GenTraversableOnce[File]] = {
+ private def runTestOnFiles(expectedResultAndMap: File => Seq[(List[String], List[String])]): MatchResult[GenTraversableOnce[File]] = {
val allFiles = rootDir.listFiles(new FilenameFilter() {
def accept(dir: File, name: String) = name.endsWith(".sbt.txt")
@@ -34,11 +32,15 @@ abstract class AbstractSessionSettingsSpec(folder: String, printDetails: Boolean
file =>
val originalLines = Source.fromFile(file).getLines().toList
foreach(expectedResultAndMap(file)) {
- case (expectedResultList, map) =>
- val resultList = SessionSettingsNoBlankies.oldLinesToNew(originalLines, map)
+ case (expectedResultList, commands) =>
+ val resultList = SbtRefactorings.applyStatements(originalLines, commands.map(List(_)))
val expected = SplitExpressionsNoBlankies(file, expectedResultList)
val result = SplitExpressionsNoBlankies(file, resultList)
+ if (deepCompare) {
+ expectedResultList must_== resultList
+ }
result.settings must_== expected.settings
+
}
}
}
@@ -49,28 +51,22 @@ abstract class AbstractSessionSettingsSpec(folder: String, printDetails: Boolean
val startsWith = f.getName + "_"
name.startsWith(startsWith)
}
- }).toList
+ }).toSeq
dirs.flatMap {
dir =>
val files = dir.listFiles(new FilenameFilter {
- override def accept(dir: File, name: String) = name.endsWith(".xml")
+ override def accept(dir: File, name: String) = name.endsWith(".set")
})
- files.map { xmlFile =>
- val xml = XML.loadFile(xmlFile)
- val result = Source.fromFile(xmlFile.getAbsolutePath + ".result").getLines().toList
- val tupleCollection = (xml \\ "settings" \\ "setting").map {
- node =>
- val set = (node \\ "set").text
- val start = (node \\ "start").text.toInt
- val end = (node \\ "end").text.toInt
- List(set)
- }.toList
-
- (result, tupleCollection)
+ files.map { file =>
+ val list = Source.fromFile(file).getLines().toList
+ val result = Source.fromFile(file.getAbsolutePath + ".result").getLines().toList
+ (result, list)
}
}
}
}
-class SessionSettingsSpec extends AbstractSessionSettingsSpec("../session-settings")
\ No newline at end of file
+class SessionSettingsSpec extends AbstractSessionSettingsSpec("session-settings")
+
+//class SessionSettingsQuickSpec extends AbstractSessionSettingsSpec("session-settings-quick", true)
\ No newline at end of file