Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
Scapegoat sensor unit tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
mwz committed Sep 26, 2018
1 parent ca52810 commit c378f59
Showing 1 changed file with 138 additions and 0 deletions.
138 changes: 138 additions & 0 deletions src/test/scala/com/mwz/sonar/scala/scapegoat/ScapegoatSensorSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,118 @@ class ScapegoatSensorSpec
testFileAIssueEmptyCaseClass
)
}

it should "report issues for absolute files" in {
// create the sensor context
val sensorContext = SensorContextTester.create(cwd)

// setup the filesystem
val testFile = TestInputFileBuilder
.create("", "app/TestFile.scala")
.setLanguage("scala")
.setType(InputFile.Type.MAIN)
.setLines(2)
.setOriginalLineOffsets(Array(0, 51)) // line 1 -> 50 chars, line 2 -> 80 chars
.setLastValidOffset(131)
.build()

// setup the active rules
val activeRulesBuilder = new ActiveRulesBuilder()

val emptyClassRuleKey =
RuleKey.of("sonar-scala-scapegoat", "Empty case class")
activeRulesBuilder
.create(emptyClassRuleKey)
.setInternalKey("com.sksamuel.scapegoat.inspections.EmptyCaseClass")
.activate()

// set up the sensor
sensorContext.setSettings(
new MapSettings().setProperty(
"sonar.scala.scapegoat.reportPath",
"scapegoat-report/absolute-file-path.xml"
)
)
sensorContext.fileSystem.add(testFile)
sensorContext.setActiveRules(activeRulesBuilder.build())

// execute the sensor
scapegoatSensor.execute(sensorContext)

// validate the sensor behavior
val testFileAIssueEmptyCaseClass =
new DefaultIssue().forRule(emptyClassRuleKey)
testFileAIssueEmptyCaseClass.at(
testFileAIssueEmptyCaseClass
.newLocation()
.on(testFile)
.at(new DefaultTextRange(new DefaultTextPointer(1, 0), new DefaultTextPointer(1, 50)))
.message(
"Empty case class\nEmpty case class can be rewritten as a case object"
)
)

sensorContext.allIssues should contain theSameElementsAs Seq(
testFileAIssueEmptyCaseClass
)
}

it should "report issues for absolute files in a module" in {
// create the sensor context
val sensorContext = SensorContextTester.create(cwd)
val filesystem = new DefaultFileSystem(cwd.resolve("module1"))

// setup the filesystem
val testFile = TestInputFileBuilder
.create("module1", "app/TestFile.scala")
.setLanguage("scala")
.setType(InputFile.Type.MAIN)
.setLines(2)
.setOriginalLineOffsets(Array(0, 51)) // line 1 -> 50 chars, line 2 -> 80 chars
.setLastValidOffset(131)
.build()

// setup the active rules
val activeRulesBuilder = new ActiveRulesBuilder()

val emptyClassRuleKey =
RuleKey.of("sonar-scala-scapegoat", "Empty case class")
activeRulesBuilder
.create(emptyClassRuleKey)
.setInternalKey("com.sksamuel.scapegoat.inspections.EmptyCaseClass")
.activate()

// set up the sensor
sensorContext.setSettings(
new MapSettings().setProperty(
"sonar.scala.scapegoat.reportPath",
"scapegoat-report/absolute-file-path.xml"
)
)
sensorContext.setFileSystem(filesystem)
sensorContext.fileSystem.add(testFile)
sensorContext.setActiveRules(activeRulesBuilder.build())

// execute the sensor
scapegoatSensor.execute(sensorContext)

// validate the sensor behavior
val testFileAIssueEmptyCaseClass =
new DefaultIssue().forRule(emptyClassRuleKey)
testFileAIssueEmptyCaseClass.at(
testFileAIssueEmptyCaseClass
.newLocation()
.on(testFile)
.at(new DefaultTextRange(new DefaultTextPointer(1, 0), new DefaultTextPointer(1, 50)))
.message(
"Empty case class\nEmpty case class can be rewritten as a case object"
)
)

sensorContext.allIssues should contain theSameElementsAs Seq(
testFileAIssueEmptyCaseClass
)
}
}

/** Mock of the ScapegoatReportParser */
Expand Down Expand Up @@ -509,5 +621,31 @@ final class TestScapegoatReportParser extends ScapegoatReportParserAPI {
)
)
)
case "scapegoat-report/absolute-file-path.xml" =>
val file = cwd.resolve("app").resolve("TestFile.scala").toString
Map(
file -> Seq(
ScapegoatIssue(
line = 1,
text = "Empty case class",
snippet = "Empty case class can be rewritten as a case object",
file = file,
inspectionId = "com.sksamuel.scapegoat.inspections.EmptyCaseClass"
)
)
)
case "module1/scapegoat-report/absolute-file-path.xml" =>
val file = cwd.resolve("module1").resolve("app").resolve("TestFile.scala").toString
Map(
file -> Seq(
ScapegoatIssue(
line = 1,
text = "Empty case class",
snippet = "Empty case class can be rewritten as a case object",
file = file,
inspectionId = "com.sksamuel.scapegoat.inspections.EmptyCaseClass"
)
)
)
}
}

0 comments on commit c378f59

Please sign in to comment.