GOptionContext: Don't show headings without options
authorMatthias Clasen <mclasen@redhat.com>
Fri, 29 Jun 2012 17:47:15 +0000 (13:47 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 29 Jun 2012 18:16:55 +0000 (14:16 -0400)
If the only entry in the main group is for the rest args,
don't bother printing "Application Options".

glib/goption.c
glib/tests/option-context.c

index 1a16a725f52f1eb47f489aee22fd11b2d7be156b..e40554664812a04c2fb1de1d2713bae019deacb4 100644 (file)
@@ -639,6 +639,8 @@ group_has_visible_entries (GOptionContext *context,
 
       if (main_entries && !main_group && !(entry->flags & G_OPTION_FLAG_IN_MAIN))
         continue;
+      if (entry->long_name[0] == 0) /* ignore rest entry */
+        continue;
       if (!(entry->flags & reject_filter))
         return TRUE;
     }
index 50081175d1ef2184011e9a0e908cd96dc5c0c49c..da511ad6796f78b0f7531c53eddc7b44b31788e9 100644 (file)
@@ -1992,6 +1992,30 @@ test_help (void)
   g_option_context_free (context);
 }
 
+static void
+test_help_no_options (void)
+{
+  GOptionContext *context;
+  gchar **sarr = NULL;
+  GOptionEntry entries[] = {
+    { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &sarr, "Rest goes here", "REST" },
+    { NULL }
+  };
+  gchar *str;
+
+  context = g_option_context_new ("blabla");
+  g_option_context_add_main_entries (context, entries, NULL);
+
+  str = g_option_context_get_help (context, FALSE, NULL);
+  g_assert (strstr (str, "blabla") != NULL);
+  g_assert (strstr (str, "REST") != NULL);
+  g_assert (strstr (str, "Help Options") != NULL);
+  g_assert (strstr (str, "Application Options") == NULL);
+
+  g_free (str);
+  g_option_context_free (context);
+}
+
 static void
 set_bool (gpointer data)
 {
@@ -2198,7 +2222,8 @@ main (int   argc,
   g_test_init (&argc, &argv, NULL);
 
   g_test_bug_base ("http://bugzilla.gnome.org/");
-  g_test_add_func ("/option/help", test_help);
+  g_test_add_func ("/option/help/options", test_help);
+  g_test_add_func ("/option/help/no-options", test_help_no_options);
 
   g_test_add_func ("/option/basic", test_basic);
   g_test_add_func ("/option/group/captions", test_group_captions);