This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 7ba07055edd4 CAMEL-23615: Add camel plugin list command
7ba07055edd4 is described below
commit 7ba07055edd4a3dcdf4c12f8ac520553e83ac468
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed May 27 10:07:33 2026 +0200
CAMEL-23615: Add camel plugin list command
Add new `camel plugin list` command that shows all available plugins
(installed, bundled, and known 3rd party). The `camel plugin get`
command now only shows installed plugins. The old `--all` flag on
`camel plugin get` is deprecated (hidden) and delegates to
`camel plugin list`. Documented in 4.21 upgrade guide.
Closes #23545
---
.../ROOT/pages/camel-4x-upgrade-guide-4_21.adoc | 6 ++
.../jbang-commands/camel-jbang-plugin-get.adoc | 3 +-
...lugin-get.adoc => camel-jbang-plugin-list.adoc} | 7 +-
.../pages/jbang-commands/camel-jbang-plugin.adoc | 3 +-
.../META-INF/camel-jbang-commands-metadata.json | 2 +-
.../dsl/jbang/core/commands/CamelJBangMain.java | 4 +-
.../dsl/jbang/core/commands/plugin/PluginGet.java | 65 ++++------------
.../dsl/jbang/core/commands/plugin/PluginList.java | 83 ++++++++++++++++++++
.../ParameterExceptionHandlerTest.java | 7 +-
.../jbang/core/commands/plugin/PluginGetTest.java | 90 ++--------------------
.../jbang/core/commands/plugin/PluginListTest.java | 65 ++++++++++++++++
11 files changed, 192 insertions(+), 143 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
index 71ad189092ad..cfe3891e93c4 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
@@ -157,6 +157,12 @@ the matching `*_doc` tool. The default `limit` for
`camel_catalog_components` an
`camel_catalog_dataformats` is also lowered from 50 to 20; pass an explicit
`limit` to restore the
previous behaviour.
+==== camel-jbang plugin commands
+
+The `camel plugin get --all` option is deprecated. Use the new `camel plugin
list` command instead,
+which lists all available plugins (installed, bundled, and known 3rd party).
+The `camel plugin get` command now only shows installed plugins.
+
==== camel-jbang plugins
Plugins are now loaded lazily. Built-in commands that do not consume plugins
diff --git
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
index be343bbd3f71..a664283a3f47 100644
---
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
+++
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
@@ -2,7 +2,7 @@
// AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE
= camel plugin get
-Display available plugins
+Get installed plugins
== Usage
@@ -19,7 +19,6 @@ camel plugin get [options]
[cols="2,5,1,2",options="header"]
|===
| Option | Description | Default | Type
-| `--all` | Display all available plugins | false | boolean
| `--repos` | Display maven repository column | false | boolean
| `-h,--help` | Display the help and sub-commands | | boolean
|===
diff --git
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-list.adoc
similarity index 71%
copy from
docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
copy to
docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-list.adoc
index be343bbd3f71..a98fbb6a8423 100644
---
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
+++
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-list.adoc
@@ -1,15 +1,15 @@
// AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE
-= camel plugin get
+= camel plugin list
-Display available plugins
+List all available plugins
== Usage
[source,bash]
----
-camel plugin get [options]
+camel plugin list [options]
----
@@ -19,7 +19,6 @@ camel plugin get [options]
[cols="2,5,1,2",options="header"]
|===
| Option | Description | Default | Type
-| `--all` | Display all available plugins | false | boolean
| `--repos` | Display maven repository column | false | boolean
| `-h,--help` | Display the help and sub-commands | | boolean
|===
diff --git
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
index d345109609ad..1397ec4d03a6 100644
--- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
+++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
@@ -20,7 +20,8 @@ camel plugin [options]
| Subcommand | Description
| xref:jbang-commands/camel-jbang-plugin-add.adoc[add] | Add new plugin
| xref:jbang-commands/camel-jbang-plugin-delete.adoc[delete] | Removes a plugin
-| xref:jbang-commands/camel-jbang-plugin-get.adoc[get] | Display available
plugins
+| xref:jbang-commands/camel-jbang-plugin-get.adoc[get] | Get installed plugins
+| xref:jbang-commands/camel-jbang-plugin-list.adoc[list] | List all available
plugins
|===
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
index 194ec512ccdc..f668e15d7669 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
+++
b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
@@ -22,7 +22,7 @@
{ "name": "jolokia", "fullName": "jolokia", "description": "Attach Jolokia
JVM Agent to a running Camel integration", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.process.Jolokia", "options": [ {
"names": "--port", "description": "To use a specific port number when attaching
Jolokia JVM Agent (default a free port is found in range 8778-9999)",
"javaType": "int", "type": "integer" }, { "names": "--stop", "description":
"Stops the Jolokia JVM Agent in the running Camel inte [...]
{ "name": "log", "fullName": "log", "description": "Tail logs from running
Camel integrations", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.action.CamelLogAction", "options": [
{ "names": "--find", "description": "Find and highlight matching text (ignore
case).", "javaType": "java.lang.String", "type": "string" }, { "names":
"--follow", "description": "Keep following and outputting new log lines (press
enter to exit).", "defaultValue": "true", "javaType": "boolean", "typ [...]
{ "name": "nano", "fullName": "nano", "description": "Nano editor to edit
file", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Nano",
"options": [ { "names": "-h,--help", "description": "Display the help and
sub-commands", "javaType": "boolean", "type": "boolean" } ] },
- { "name": "plugin", "fullName": "plugin", "description": "Manage plugins
that add sub-commands to this CLI", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "add",
"fullName": "plugin add", "description": "Add new plugin", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginA [...]
+ { "name": "plugin", "fullName": "plugin", "description": "Manage plugins
that add sub-commands to this CLI", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "add",
"fullName": "plugin add", "description": "Add new plugin", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginA [...]
{ "name": "ps", "fullName": "ps", "description": "List running Camel
integrations", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.process.ListProcess", "options": [ {
"names": "--json", "description": "Output in JSON Format", "javaType":
"boolean", "type": "boolean" }, { "names": "--pid", "description": "List only
pid in the output", "javaType": "boolean", "type": "boolean" }, { "names":
"--remote", "description": "Break down counters into remote\/total pairs",
"javaType": [...]
{ "name": "run", "fullName": "run", "description": "Run as local Camel
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Run",
"options": [ { "names": "--background", "description": "Run in the background",
"defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names":
"--background-wait", "description": "To wait for run in background to startup
successfully, before returning", "defaultValue": "true", "javaType": "boolean",
"type": "boolean" }, { [...]
{ "name": "sbom", "fullName": "sbom", "description": "Generate a CycloneDX
or SPDX SBOM for a specific project", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.SBOMGenerator", "options": [ {
"names": "--build-property", "description": "Maven build properties, ex.
--build-property=prop1=foo", "javaType": "java.util.List", "type": "array" }, {
"names": "--camel-spring-boot-version", "description": "Camel version to use
with Spring Boot", "javaType": "java.lang.String", "type" [...]
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index 5d9035bcb121..52366e048c5d 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -48,6 +48,7 @@ import
org.apache.camel.dsl.jbang.core.commands.plugin.PluginAdd;
import org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand;
import org.apache.camel.dsl.jbang.core.commands.plugin.PluginDelete;
import org.apache.camel.dsl.jbang.core.commands.plugin.PluginGet;
+import org.apache.camel.dsl.jbang.core.commands.plugin.PluginList;
import org.apache.camel.dsl.jbang.core.commands.process.*;
import org.apache.camel.dsl.jbang.core.commands.update.UpdateCommand;
import org.apache.camel.dsl.jbang.core.commands.update.UpdateList;
@@ -185,7 +186,8 @@ public class CamelJBangMain implements Callable<Integer> {
.addSubcommand("plugin", new CommandLine(new
PluginCommand(this))
.addSubcommand("add", new CommandLine(new
PluginAdd(this)))
.addSubcommand("delete", new CommandLine(new
PluginDelete(this)))
- .addSubcommand("get", new CommandLine(new
PluginGet(this))))
+ .addSubcommand("get", new CommandLine(new
PluginGet(this)))
+ .addSubcommand("list", new CommandLine(new
PluginList(this))))
.addSubcommand("ps", new CommandLine(new ListProcess(this)))
.addSubcommand("run", new CommandLine(new Run(this)))
.addSubcommand("sbom", new CommandLine(new
SBOMGenerator(this)))
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
index 0395a5f5f720..0b6913f48f2f 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
@@ -31,10 +31,12 @@ import org.apache.camel.util.json.JsonObject;
import picocli.CommandLine;
@CommandLine.Command(name = "get",
- description = "Display available plugins", sortOptions =
false, showDefaultValues = true)
+ description = "Get installed plugins", sortOptions =
false, showDefaultValues = true)
public class PluginGet extends PluginBaseCommand {
- @CommandLine.Option(names = { "--all" }, defaultValue = "false",
description = "Display all available plugins")
+ @Deprecated
+ @CommandLine.Option(names = { "--all" }, hidden = true, defaultValue =
"false",
+ description = "DEPRECATED: use 'camel plugin list'
instead")
public boolean all;
@CommandLine.Option(names = { "--repos" }, defaultValue = "false",
description = "Display maven repository column")
@@ -46,6 +48,12 @@ public class PluginGet extends PluginBaseCommand {
@Override
public Integer doCall() throws Exception {
+ if (all) {
+ PluginList delegate = new PluginList(getMain());
+ delegate.repos = this.repos;
+ return delegate.doCall();
+ }
+
List<Row> rows = new ArrayList<>();
JsonObject plugins = loadConfig().getMap("plugins");
@@ -64,50 +72,11 @@ public class PluginGet extends PluginBaseCommand {
rows.add(new Row(name, command, dependency, description, repos,
vendor));
});
- printRows(rows);
-
- if (all) {
- rows.clear();
- for (PluginType camelPlugin : PluginType.values()) {
- if (plugins.get(camelPlugin.getName()) == null) {
- String dependency =
"org.apache.camel:camel-jbang-plugin-%s".formatted(camelPlugin.getCommand());
- rows.add(new Row(
- camelPlugin.getName(), camelPlugin.getCommand(),
dependency,
- camelPlugin.getDescription(),
camelPlugin.getRepos(), camelPlugin.getVendor()));
- }
- }
-
- if (!rows.isEmpty()) {
- printer().println();
- printer().println("Supported plugins:");
- printer().println();
-
- printRows(rows);
- }
-
- rows.clear();
- List<JsonObject> knownPlugins = PluginHelper.loadKnownPlugins();
- for (JsonObject kp : knownPlugins) {
- String kpName = kp.getString("name");
- if (plugins.get(kpName) == null &&
PluginType.findByName(kpName).isEmpty()) {
- String dep = kp.getString("groupId") != null &&
kp.getString("artifactId") != null
- ? "%s:%s".formatted(kp.getString("groupId"),
kp.getString("artifactId"))
- : kp.getStringOrDefault("dependency", "");
- rows.add(new Row(
- kpName, kp.getString("command"), dep,
- kp.getString("description"), kp.getString("repos"),
- kp.getStringOrDefault("vendor", "Community")));
- }
- }
-
- if (!rows.isEmpty()) {
- printer().println();
- printer().println("Known 3rd party plugins:");
- printer().println();
-
- printRows(rows);
- }
+ if (!rows.isEmpty()) {
+ printer().println("Installed plugins:");
+ printer().println();
}
+ printRows(rows);
return 0;
}
@@ -119,7 +88,7 @@ public class PluginGet extends PluginBaseCommand {
.orElse("");
}
- private void printRows(List<Row> rows) {
+ protected void printRows(List<Row> rows) {
if (!rows.isEmpty()) {
printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows,
Arrays.asList(
new
Column().header("NAME").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
@@ -134,11 +103,11 @@ public class PluginGet extends PluginBaseCommand {
.dataAlign(HorizontalAlign.LEFT)
.with(r -> r.repos),
new
Column().header("DESCRIPTION").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
- .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT)
+ .maxWidth(80, OverflowBehaviour.ELLIPSIS_RIGHT)
.with(r -> r.description))));
}
}
- private record Row(String name, String command, String dependency, String
description, String repos, String vendor) {
+ record Row(String name, String command, String dependency, String
description, String repos, String vendor) {
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginList.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginList.java
new file mode 100644
index 000000000000..bae4fe094f42
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginList.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.plugin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.PluginHelper;
+import org.apache.camel.dsl.jbang.core.common.PluginType;
+import org.apache.camel.util.json.JsonObject;
+import picocli.CommandLine;
+
[email protected](name = "list",
+ description = "List all available plugins", sortOptions =
false, showDefaultValues = true)
+public class PluginList extends PluginGet {
+
+ public PluginList(CamelJBangMain main) {
+ super(main);
+ }
+
+ @Override
+ public Integer doCall() throws Exception {
+ super.doCall();
+
+ JsonObject plugins = loadConfig().getMap("plugins");
+
+ List<Row> rows = new ArrayList<>();
+ for (PluginType camelPlugin : PluginType.values()) {
+ if (plugins.get(camelPlugin.getName()) == null) {
+ String dependency =
"org.apache.camel:camel-jbang-plugin-%s".formatted(camelPlugin.getCommand());
+ rows.add(new Row(
+ camelPlugin.getName(), camelPlugin.getCommand(),
dependency,
+ camelPlugin.getDescription(), camelPlugin.getRepos(),
camelPlugin.getVendor()));
+ }
+ }
+
+ if (!rows.isEmpty()) {
+ printer().println();
+ printer().println("Bundled plugins:");
+ printer().println();
+ printRows(rows);
+ }
+
+ rows.clear();
+ List<JsonObject> knownPlugins = PluginHelper.loadKnownPlugins();
+ for (JsonObject kp : knownPlugins) {
+ String kpName = kp.getString("name");
+ if (plugins.get(kpName) == null &&
PluginType.findByName(kpName).isEmpty()) {
+ String dep = kp.getString("groupId") != null &&
kp.getString("artifactId") != null
+ ? "%s:%s".formatted(kp.getString("groupId"),
kp.getString("artifactId"))
+ : kp.getStringOrDefault("dependency", "");
+ rows.add(new Row(
+ kpName, kp.getString("command"), dep,
+ kp.getString("description"), kp.getString("repos"),
+ kp.getStringOrDefault("vendor", "Community")));
+ }
+ }
+
+ if (!rows.isEmpty()) {
+ printer().println();
+ printer().println("Known 3rd party plugins:");
+ printer().println();
+ printRows(rows);
+ }
+
+ return 0;
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/exceptionhandler/ParameterExceptionHandlerTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/exceptionhandler/ParameterExceptionHandlerTest.java
index 0155c7ef70f2..a6ec85d69c6c 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/exceptionhandler/ParameterExceptionHandlerTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/exceptionhandler/ParameterExceptionHandlerTest.java
@@ -48,11 +48,12 @@ class ParameterExceptionHandlerTest {
CamelJBangMain.run(camelJBangMainNotExiting, "plugin",
"secondInvalid");
String[] lines = err.capturedLines();
- Assertions.assertEquals(3, lines.length, "3 lines for the error is
expected but received " + lines.length);
+ Assertions.assertTrue(lines.length >= 3, "At least 3 lines for the
error is expected but received " + lines.length);
Assertions.assertEquals("Unmatched argument at index 1:
'secondInvalid'", lines[0],
"First line mentioning unmatched argument");
- Assertions.assertEquals("Usage: camel plugin [-h] [COMMAND]",
lines[1], "Second line with usage");
- Assertions.assertEquals("Try 'camel plugin --help' for more
information.", lines[2],
+ Assertions.assertEquals("Usage: camel plugin [-h] [COMMAND]",
lines[lines.length - 2],
+ "Second to last line with usage");
+ Assertions.assertEquals("Try 'camel plugin --help' for more
information.", lines[lines.length - 1],
"Last line with what to try to get help");
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
index ba950afb31bb..d3e6f3a3de4d 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
@@ -54,29 +54,12 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
command.doCall();
List<String> output = printer.getLines();
- Assertions.assertEquals(2, output.size());
+ Assertions.assertEquals(4, output.size());
+ Assertions.assertEquals("Installed plugins:", output.get(0));
Assertions.assertEquals("NAME COMMAND VENDOR DEPENDENCY
DESCRIPTION",
- output.get(0));
- Assertions.assertEquals(
- "kubernetes kubernetes ASF
org.apache.camel:camel-jbang-plugin-kubernetes %s"
- .formatted(PluginType.KUBERNETES.getDescription()),
- output.get(1));
- }
-
- @Test
- public void shouldGetDefaultPlugins() throws Exception {
- PluginGet command = new PluginGet(new
CamelJBangMain().withPrinter(printer));
- command.all = true;
- command.doCall();
-
- List<String> output = printer.getLines();
- Assertions.assertTrue(output.size() >= 10);
- Assertions.assertEquals("Supported plugins:", output.get(0));
- Assertions.assertEquals(
- "NAME COMMAND VENDOR DEPENDENCY
DESCRIPTION",
output.get(2));
Assertions.assertEquals(
- "kubernetes kubernetes ASF
org.apache.camel:camel-jbang-plugin-kubernetes %s"
+ "kubernetes kubernetes ASF
org.apache.camel:camel-jbang-plugin-kubernetes %s"
.formatted(PluginType.KUBERNETES.getDescription()),
output.get(3));
}
@@ -97,71 +80,12 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
command.doCall();
List<String> output = printer.getLines();
- Assertions.assertEquals(2, output.size());
- Assertions.assertEquals("NAME COMMAND VENDOR DEPENDENCY
DESCRIPTION", output.get(0));
+ Assertions.assertEquals(4, output.size());
+ Assertions.assertEquals("Installed plugins:", output.get(0));
+ Assertions.assertEquals("NAME COMMAND VENDOR DEPENDENCY
DESCRIPTION", output.get(2));
Assertions.assertEquals(
"foo foo
org.apache.camel:camel-jbang-plugin-foo Plugin foo called with command foo",
- output.get(1));
- }
-
- @Test
- public void shouldGetAllPlugins() throws Exception {
- JsonObject pluginConfig = PluginHelper.getOrCreatePluginConfig();
- JsonObject plugins = pluginConfig.getMap("plugins");
-
- JsonObject fooPlugin = new JsonObject();
- fooPlugin.put("name", "foo-plugin");
- fooPlugin.put("command", "foo");
- fooPlugin.put("dependency", "org.apache.camel:foo-plugin:1.0.0");
- plugins.put("foo-plugin", fooPlugin);
-
- PluginHelper.savePluginConfig(pluginConfig);
-
- PluginGet command = new PluginGet(new
CamelJBangMain().withPrinter(printer));
- command.all = true;
- command.doCall();
-
- List<String> output = printer.getLines();
- Assertions.assertTrue(output.size() >= 13);
- Assertions.assertEquals("NAME COMMAND VENDOR DEPENDENCY
DESCRIPTION", output.get(0));
- Assertions.assertEquals(
- "foo-plugin foo
org.apache.camel:foo-plugin:1.0.0 Plugin foo-plugin called with command foo",
- output.get(1));
-
- Assertions.assertEquals("Supported plugins:", output.get(3));
- Assertions.assertEquals(
- "NAME COMMAND VENDOR DEPENDENCY
DESCRIPTION",
- output.get(5));
- Assertions.assertEquals(
- "kubernetes kubernetes ASF
org.apache.camel:camel-jbang-plugin-kubernetes %s"
- .formatted(PluginType.KUBERNETES.getDescription()),
- output.get(6));
- Assertions.assertEquals(
- "generate generate ASF
org.apache.camel:camel-jbang-plugin-generate %s"
- .formatted(PluginType.GENERATE.getDescription()),
- output.get(7));
- Assertions.assertEquals(
- "edit edit ASF
org.apache.camel:camel-jbang-plugin-edit %s"
- .formatted(PluginType.EDIT.getDescription()),
- output.get(8));
- Assertions.assertEquals(
- "test test ASF
org.apache.camel:camel-jbang-plugin-test %s"
- .formatted(PluginType.TEST.getDescription()),
- output.get(9));
- Assertions.assertEquals(
- "route-parser route-parser ASF
org.apache.camel:camel-jbang-plugin-route-parser %s"
- .formatted(PluginType.ROUTE_PARSER.getDescription()),
- output.get(10));
- Assertions.assertEquals(
- "validate validate ASF
org.apache.camel:camel-jbang-plugin-validate %s"
- .formatted(PluginType.VALIDATE.getDescription()),
- output.get(11));
- Assertions.assertEquals(
- "tui tui ASF
org.apache.camel:camel-jbang-plugin-tui %s"
- .formatted(PluginType.TUI.getDescription()),
- output.get(12));
-
- Assertions.assertEquals("Known 3rd party plugins:", output.get(14));
+ output.get(3));
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
new file mode 100644
index 000000000000..88c5d342a0cf
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.plugin;
+
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.dsl.jbang.core.common.PluginHelper;
+import org.apache.camel.dsl.jbang.core.common.PluginType;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class PluginListTest extends CamelCommandBaseTestSupport {
+
+ @BeforeEach
+ public void setup() throws Exception {
+ super.setup();
+
+ CommandLineHelper.useHomeDir("target");
+ PluginHelper.createPluginConfig();
+ }
+
+ @Test
+ public void shouldListDefaultPlugins() throws Exception {
+ PluginList command = new PluginList(new
CamelJBangMain().withPrinter(printer));
+ command.doCall();
+
+ List<String> output = printer.getLines();
+ Assertions.assertTrue(output.size() > 2);
+ Assertions.assertEquals("Bundled plugins:", output.get(0));
+ }
+
+ @Test
+ public void shouldListAllPlugins() throws Exception {
+ PluginHelper.enable(PluginType.KUBERNETES);
+
+ PluginList command = new PluginList(new
CamelJBangMain().withPrinter(printer));
+ command.doCall();
+
+ List<String> output = printer.getLines();
+ Assertions.assertTrue(output.size() > 2);
+ Assertions.assertEquals("Installed plugins:", output.get(0));
+
+ boolean hasBundled = output.stream().anyMatch(l -> l.equals("Bundled
plugins:"));
+ Assertions.assertTrue(hasBundled);
+ }
+
+}