Make sure the command listing is triggered on wrong subcommand.

Signed-off-by: Henner Zeller <hzeller@google.com>
diff --git a/common/util/subcommand.cc b/common/util/subcommand.cc
index bc8fb1f..560bd58 100644
--- a/common/util/subcommand.cc
+++ b/common/util/subcommand.cc
@@ -38,8 +38,9 @@
           {"error",
            {[this](const SubcommandArgsRange& args, std::istream& ins,
                    std::ostream& outs, std::ostream& errs) {
-             const auto unused_status = Help({}, ins, outs, errs);
-             return absl::InvalidArgumentError("Unknown subcommand.");
+              // Call with empty arguments to just get the command listing.
+              const auto unused_status = Help({}, ins, outs, errs);
+              return absl::InvalidArgumentError("Unknown subcommand.");
             },
             "same as 'help', but exits non-zero to signal a wrong command.\n",
             false}},
diff --git a/common/util/subcommand_test.cc b/common/util/subcommand_test.cc
index 85368c0..fffedd3 100644
--- a/common/util/subcommand_test.cc
+++ b/common/util/subcommand_test.cc
@@ -92,26 +92,23 @@
   EXPECT_EQ(outs.str(), "42");
 }
 
-TEST(SubcommandRegistryTest, ShowRegisteredCommandsInHelp) {
+TEST(SubcommandRegistryTest, ShowRegisteredCommandsOnWrongCommandRequest) {
   SubcommandRegistry registry;
   {
     const auto status = registry.RegisterCommand("fizz", fizz_func);
     EXPECT_TRUE(absl::StrContains(registry.ListCommands(), "fizz"));
   }
 
-  std::vector<absl::string_view> args;
-  const SubcommandArgsRange range(args.begin(), args.end());
-  const SubcommandEntry& help_entry(registry.GetSubcommandEntry("wrong_cmd"));
+  const SubcommandEntry& cmd(registry.GetSubcommandEntry("wrong_command"));
 
+  std::vector<absl::string_view> args{"foo", "bar"};
+  const SubcommandArgsRange range(args.begin(), args.end());
   std::istringstream ins;
   std::ostringstream outs, errs;
-  const auto status = help_entry.main(range, ins, outs, errs);
+  const auto status = cmd.main(range, ins, outs, errs);
   EXPECT_FALSE(status.ok()) << status.message();
-  std::cerr << status.message() << "\n";
-  std::cerr << outs.str() << "\n";
-  std::cerr << errs.str() << "\n";
+  EXPECT_TRUE(absl::StrContains(errs.str(), "available commands"));
   EXPECT_TRUE(absl::StrContains(errs.str(), "fizz"));
-  EXPECT_TRUE(absl::StrContains(errs.str(), "help"));
 }
 
 static const SubcommandEntry buzz_func{