sbt/main/src/test/scala/PluginCommandTest.scala

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

169 lines
4.9 KiB
Scala
Raw Normal View History

2017-10-04 19:01:06 +02:00
/*
* sbt
2023-06-20 13:42:07 +02:00
* Copyright 2023, Scala center
* Copyright 2011 - 2022, Lightbend, Inc.
2017-10-04 19:01:06 +02:00
* Copyright 2008 - 2010, Mark Harrah
2018-09-14 09:40:39 +02:00
* Licensed under Apache License 2.0 (see LICENSE)
2017-10-04 19:01:06 +02:00
*/
package sbt
import java.io._
import sbt.internal._
2022-09-20 09:49:26 +02:00
import sbt.internal.inc.MappedFileConverter
2017-04-21 09:14:31 +02:00
import sbt.internal.util.{
AttributeEntry,
AttributeMap,
ConsoleOut,
GlobalLogging,
MainAppender,
2024-03-25 15:47:40 +01:00
Terminal,
2017-04-21 09:14:31 +02:00
}
2024-03-25 15:47:40 +01:00
import sbt.internal.inc.PlainVirtualFileConverter
2015-09-11 11:00:34 +02:00
object PluginCommandTestPlugin0 extends AutoPlugin { override def requires = empty }
package subpackage {
object PluginCommandTestPlugin1 extends AutoPlugin { override def requires = empty }
}
object PluginCommandTest extends verify.BasicTestSuite {
import subpackage._
import FakeState._
test("`plugin` command should work for plugins within nested in one package") {
val output = processCommand(
"plugin sbt.PluginCommandTestPlugin0",
PluginCommandTestPlugin0,
PluginCommandTestPlugin1
)
assert(output.contains("sbt.PluginCommandTestPlugin0 is activated."))
}
test("it should work for plugins nested more than one package") {
val output = processCommand(
"plugin sbt.subpackage.PluginCommandTestPlugin1",
PluginCommandTestPlugin0,
PluginCommandTestPlugin1
)
assert(output.contains("sbt.subpackage.PluginCommandTestPlugin1 is activated."))
}
test("it should suggest a plugin when given an incorrect plugin with a similar name") {
val output = processCommand(
"plugin PluginCommandTestPlugin0",
PluginCommandTestPlugin0,
PluginCommandTestPlugin1
)
assert(
output.contains(
"Not a valid plugin: PluginCommandTestPlugin0 (similar: sbt.PluginCommandTestPlugin0, sbt.subpackage.PluginCommandTestPlugin1)"
)
)
}
}
object FakeState {
def processCommand(input: String, enabledPlugins: AutoPlugin*): String = {
val outBuffer = new ByteArrayOutputStream
val logFile = File.createTempFile("sbt", ".log")
try {
2024-10-28 04:55:30 +01:00
val state = FakeState(logFile, enabledPlugins*)
2024-03-25 15:47:40 +01:00
Terminal.withOut(new PrintStream(outBuffer, true)) {
MainLoop.processCommand(Exec(input, None), state)
}
new String(outBuffer.toByteArray)
} finally {
logFile.delete()
()
}
}
def apply(logFile: File, plugins: AutoPlugin*) = {
val base = new File("").getAbsoluteFile
val testProject = Project("test-project", base).setAutoPlugins(plugins)
2024-10-28 04:55:30 +01:00
val settings: Seq[Def.Setting[?]] = Nil
val currentProject = Map(testProject.base.toURI -> testProject.id)
2022-09-20 09:49:26 +02:00
val currentEval: () => Eval = () => Load.mkEval(Nil, base, Nil)
2017-04-21 09:14:31 +02:00
val sessionSettings =
SessionSettings(base.toURI, currentProject, Nil, Map.empty, Nil, currentEval)
val delegates: (Scope) => Seq[Scope] = _ => Nil
val scopeLocal: Def.ScopeLocal = _ => Nil
val (cMap, data: Def.Settings) =
2022-09-20 09:49:26 +02:00
Def.makeWithCompiledMap(settings)(using delegates, scopeLocal, Def.showFullKey)
2024-10-28 04:55:30 +01:00
val extra: KeyIndex => BuildUtil[?] = (keyIndex) =>
2017-04-21 09:14:31 +02:00
BuildUtil(base.toURI, Map.empty, keyIndex, data)
val structureIndex: StructureIndex =
Load.structureIndex(data, settings, extra, Map.empty)
val streams: (State) => BuildStreams.Streams = null
val loadedDefinitions: LoadedDefinitions = new LoadedDefinitions(
2017-04-21 09:14:31 +02:00
base,
Nil,
ClassLoader.getSystemClassLoader,
Nil,
Seq(testProject),
Nil
)
2024-03-25 15:47:40 +01:00
val converter = PlainVirtualFileConverter.converter
val pluginData = PluginData(Nil, converter)
2016-03-29 19:11:42 +02:00
val builds: DetectedModules[BuildDef] = new DetectedModules[BuildDef](Nil)
2017-04-21 09:14:31 +02:00
val detectedAutoPlugins: Seq[DetectedAutoPlugin] =
plugins.map(p => DetectedAutoPlugin(p.label, p, hasAutoImport = false))
2016-06-19 22:37:10 +02:00
val detectedPlugins = new DetectedPlugins(detectedAutoPlugins, builds)
2017-04-21 09:14:31 +02:00
val loadedPlugins =
new LoadedPlugins(base, pluginData, ClassLoader.getSystemClassLoader, detectedPlugins)
2024-03-25 15:47:40 +01:00
val buildUnit = new BuildUnit(base.toURI, base, loadedDefinitions, loadedPlugins, converter)
val (partBuildUnit: PartBuildUnit, _) = Load.loaded(buildUnit)
val loadedBuildUnit = Load.resolveProjects(base.toURI, partBuildUnit, _ => testProject.id)
val units = Map(base.toURI -> loadedBuildUnit)
2018-04-24 17:12:10 +02:00
val buildStructure = new BuildStructure(
units,
base.toURI,
settings,
data,
structureIndex,
streams,
delegates,
scopeLocal,
cMap,
2022-09-20 09:49:26 +02:00
MappedFileConverter.empty,
2018-04-24 17:12:10 +02:00
)
val attributes = AttributeMap.empty ++ AttributeMap(
AttributeEntry(Keys.sessionSettings, sessionSettings),
AttributeEntry(Keys.stateBuildStructure, buildStructure)
)
State(
null,
Seq(BuiltinCommands.plugin),
Set.empty,
None,
2016-12-07 19:22:34 +01:00
List(),
State.newHistory,
attributes,
2018-04-24 17:12:10 +02:00
GlobalLogging.initial(
MainAppender.globalDefault(ConsoleOut.globalProxy),
logFile,
ConsoleOut.globalProxy
2018-04-24 17:12:10 +02:00
),
2016-12-07 19:22:34 +01:00
None,
State.Continue
)
}
}