瀏覽代碼

2008-01-11 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Added the message to inform users that other help categories are
	available in -h option.
	* src/version_usage.cc
	* src/TagContainer.{h, cc}
	* test/TagContainerTest.cc
	* src/TaggedItem.{h, cc}
	* test/TaggedItemTest.cc
	* src/HelpItem.h
Tatsuhiro Tsujikawa 18 年之前
父節點
當前提交
08a8d8aae2
共有 9 個文件被更改,包括 77 次插入3 次删除
  1. 11 0
      ChangeLog
  2. 5 0
      src/HelpItem.h
  3. 10 0
      src/TagContainer.cc
  4. 2 0
      src/TagContainer.h
  5. 5 0
      src/TaggedItem.cc
  6. 5 1
      src/TaggedItem.h
  7. 4 1
      src/version_usage.cc
  8. 22 1
      test/TagContainerTest.cc
  9. 13 0
      test/TaggedItemTest.cc

+ 11 - 0
ChangeLog

@@ -1,3 +1,14 @@
+2008-01-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Added the message to inform users that other help categories are
+	available in -h option.
+	* src/version_usage.cc
+	* src/TagContainer.{h, cc}
+	* test/TagContainerTest.cc
+	* src/TaggedItem.{h, cc}
+	* test/TaggedItemTest.cc
+	* src/HelpItem.h
+
 2008-01-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Added Piece::getFirstMissingBlockIndexWithoutLock() and it is called

+ 5 - 0
src/HelpItem.h

@@ -61,6 +61,11 @@ public:
     _availableValues = availableValues;
   }
 
+  const string& getAvailableValues() const
+  {
+    return _availableValues;
+  }
+
   friend ostream& operator<<(ostream& o, const HelpItem& helpItem);
 
   friend ostream& operator<<(ostream& o, const HelpItemHandle& helpItem);

+ 10 - 0
src/TagContainer.cc

@@ -95,6 +95,16 @@ TaggedItems TagContainer::nameMatchForward(const string& name) const
   return for_each(_taggedItems.begin(), _taggedItems.end(), NameMatchForward(name)).getResult();
 }
 
+TaggedItemHandle TagContainer::nameMatch(const string& name) const
+{
+  TaggedItems::const_iterator itr = find(_taggedItems.begin(), _taggedItems.end(), TaggedItemHandle(new TaggedItem(name)));
+  if(itr == _taggedItems.end()) {
+    return 0;
+  } else {
+    return *itr;
+  }
+}
+
 const TaggedItems& TagContainer::getAllItems() const
 {
   return _taggedItems;

+ 2 - 0
src/TagContainer.h

@@ -57,6 +57,8 @@ public:
 
   TaggedItems nameMatchForward(const string& name) const;
 
+  TaggedItemHandle nameMatch(const string& name) const;
+
   const TaggedItems& getAllItems() const;
 };
 

+ 5 - 0
src/TaggedItem.cc

@@ -65,3 +65,8 @@ bool TaggedItem::operator<(const TaggedItem& item) const
 {
   return _name < item._name;
 }
+
+bool TaggedItem::operator==(const TaggedItem& item) const
+{
+  return _name == item._name;
+}

+ 5 - 1
src/TaggedItem.h

@@ -37,6 +37,9 @@
 
 #include "common.h"
 
+class TaggedItem;
+typedef SharedHandle<TaggedItem> TaggedItemHandle;
+
 class TaggedItem {
 private:
   string _name;
@@ -62,8 +65,9 @@ public:
   }
 
   bool operator<(const TaggedItem& item) const;
+
+  bool operator==(const TaggedItem& item) const;
 };
 
-typedef SharedHandle<TaggedItem> TaggedItemHandle;
 typedef deque<TaggedItemHandle> TaggedItems;
 #endif // _D_TAGGED_ITEM_H_

+ 4 - 1
src/version_usage.cc

@@ -106,6 +106,9 @@ void showUsage(const string& category) {
       printf(_("Printing all options."));
     } else {
       printf(_("Printing options tagged with '%s'."), category.c_str());
+      cout << "\n";
+      printf(_("See -h option to know other command-line options(%s)."),
+	       HelpItemHandle(tc->nameMatch("help"))->getAvailableValues().c_str());
     }
     cout << "\n";
     cout << _("Options:") << endl;
@@ -120,7 +123,7 @@ void showUsage(const string& category) {
     } else {
       printf(_("No help category or option name matching with '%s'."), category.c_str());
       cout << "\n";
-      cout << HelpItemHandle(tc->nameMatchForward("help").front()) << "\n";
+      cout << HelpItemHandle(tc->nameMatch("help")) << "\n";
     }
   }
   if(category == TAG_BASIC) {

+ 22 - 1
test/TagContainerTest.cc

@@ -8,13 +8,14 @@ class TagContainerTest:public CppUnit::TestFixture {
 
   CPPUNIT_TEST_SUITE(TagContainerTest);
   CPPUNIT_TEST(testSearch);
+  CPPUNIT_TEST(testNameMatch);
   CPPUNIT_TEST_SUITE_END();
 private:
-
 public:
   void setUp() {}
 
   void testSearch();
+  void testNameMatch();
 };
 
 
@@ -47,3 +48,23 @@ void TagContainerTest::testSearch()
     CPPUNIT_ASSERT_EQUAL(string("foo"), res[0]->toTagString());
   }
 }
+
+void TagContainerTest::testNameMatch()
+{
+  TaggedItemHandle items[] = {
+    new TaggedItem("alpha"),
+    new TaggedItem("bravo"),
+    new TaggedItem("charlie"),
+    new TaggedItem("bravo")
+  };
+  items[1]->addTag("foo");
+  TagContainer tc(TaggedItems(&items[0], &items[3]));
+  {
+    TaggedItemHandle item = tc.nameMatch("bravo");
+    CPPUNIT_ASSERT_EQUAL(string("bravo"), item->getName());
+    CPPUNIT_ASSERT_EQUAL(string("foo"), item->toTagString());
+  }
+  {
+    CPPUNIT_ASSERT(tc.nameMatch("delta").isNull());
+  }
+}

+ 13 - 0
test/TaggedItemTest.cc

@@ -6,6 +6,7 @@ class TaggedItemTest:public CppUnit::TestFixture {
   CPPUNIT_TEST_SUITE(TaggedItemTest);
   CPPUNIT_TEST(testHasTag);
   CPPUNIT_TEST(testToTagString);
+  CPPUNIT_TEST(testOperatorEqual);
   CPPUNIT_TEST_SUITE_END();
 private:
 
@@ -14,6 +15,7 @@ public:
 
   void testHasTag();
   void testToTagString();
+  void testOperatorEqual();
 };
 
 
@@ -37,3 +39,14 @@ void TaggedItemTest::testToTagString()
 
   CPPUNIT_ASSERT_EQUAL(string("foo,bar"), item.toTagString());
 }
+
+void TaggedItemTest::testOperatorEqual()
+{
+  TaggedItem none("");
+  TaggedItem foo("foo");
+  TaggedItem foo2("foo");
+  TaggedItem bar("bar");
+  CPPUNIT_ASSERT(!(none == foo));
+  CPPUNIT_ASSERT(!(bar == foo));
+  CPPUNIT_ASSERT(foo == foo);
+}