Index: base/trace_event/category_filter_unittest.cc |
diff --git a/base/trace_event/category_filter_unittest.cc b/base/trace_event/category_filter_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d6cacfb1ab8c133715650b81f88ee7edf522344d |
--- /dev/null |
+++ b/base/trace_event/category_filter_unittest.cc |
@@ -0,0 +1,111 @@ |
+// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/trace_event/category_filter.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace base { |
+namespace trace_event { |
+ |
+// Test the category filter. |
+TEST(CategoryFilterTest, CategoryFilter) { |
+ // Using the default filter. |
+ CategoryFilter default_cf = CategoryFilter( |
+ CategoryFilter::kDefaultCategoryFilterString); |
+ std::string category_filter_str = default_cf.ToString(); |
+ EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); |
+ EXPECT_FALSE( |
+ default_cf.IsCategoryGroupEnabled("disabled-by-default-category")); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2")); |
+ |
+ // Make sure that upon an empty string, we fall back to the default filter. |
+ default_cf = CategoryFilter(); |
+ category_filter_str = default_cf.ToString(); |
+ EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
+ EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2")); |
+ |
+ // Using an arbitrary non-empty filter. |
+ CategoryFilter cf("included,-excluded,inc_pattern*,-exc_pattern*"); |
+ category_filter_str = cf.ToString(); |
+ EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*", |
+ category_filter_str.c_str()); |
+ EXPECT_TRUE(cf.IsCategoryGroupEnabled("included")); |
+ EXPECT_TRUE(cf.IsCategoryGroupEnabled("inc_pattern_category")); |
+ EXPECT_FALSE(cf.IsCategoryGroupEnabled("exc_pattern_category")); |
+ EXPECT_FALSE(cf.IsCategoryGroupEnabled("excluded")); |
+ EXPECT_FALSE(cf.IsCategoryGroupEnabled("not-excluded-nor-included")); |
+ EXPECT_FALSE(cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
+ EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
+ EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryTest,Category2")); |
+ |
+ cf.Merge(default_cf); |
+ category_filter_str = cf.ToString(); |
+ EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test", |
+ category_filter_str.c_str()); |
+ cf.Clear(); |
+ |
+ CategoryFilter reconstructed_cf(category_filter_str); |
+ category_filter_str = reconstructed_cf.ToString(); |
+ EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test", |
+ category_filter_str.c_str()); |
+ |
+ // One included category. |
+ CategoryFilter one_inc_cf("only_inc_cat"); |
+ category_filter_str = one_inc_cf.ToString(); |
+ EXPECT_STREQ("only_inc_cat", category_filter_str.c_str()); |
+ |
+ // One excluded category. |
+ CategoryFilter one_exc_cf("-only_exc_cat"); |
+ category_filter_str = one_exc_cf.ToString(); |
+ EXPECT_STREQ("-only_exc_cat", category_filter_str.c_str()); |
+ |
+ // Enabling a disabled- category does not require all categories to be traced |
+ // to be included. |
+ CategoryFilter disabled_cat("disabled-by-default-cc,-excluded"); |
+ EXPECT_STREQ("disabled-by-default-cc,-excluded", |
+ disabled_cat.ToString().c_str()); |
+ EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("disabled-by-default-cc")); |
+ EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("some_other_group")); |
+ EXPECT_FALSE(disabled_cat.IsCategoryGroupEnabled("excluded")); |
+ |
+ // Enabled a disabled- category and also including makes all categories to |
+ // be traced require including. |
+ CategoryFilter disabled_inc_cat("disabled-by-default-cc,included"); |
+ EXPECT_STREQ("included,disabled-by-default-cc", |
+ disabled_inc_cat.ToString().c_str()); |
+ EXPECT_TRUE( |
+ disabled_inc_cat.IsCategoryGroupEnabled("disabled-by-default-cc")); |
+ EXPECT_TRUE(disabled_inc_cat.IsCategoryGroupEnabled("included")); |
+ EXPECT_FALSE(disabled_inc_cat.IsCategoryGroupEnabled("other_included")); |
+ |
+ // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches |
+ // categories that are explicitly forbiden. |
+ // This method is called in a DCHECK to assert that we don't have these types |
+ // of strings as categories. |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ " bad_category ")); |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ " bad_category")); |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ "bad_category ")); |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ " bad_category")); |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ "bad_category ")); |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ " bad_category ")); |
+ EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ "")); |
+ EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
+ "good_category")); |
+} |
+ |
+} // namespace trace_event |
+} // namespace base |