Chromium Code Reviews| Index: base/template_util_unittest.cc |
| diff --git a/base/template_util_unittest.cc b/base/template_util_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..31655a6a3855055b2b231ee23207ebaf147ffb14 |
| --- /dev/null |
| +++ b/base/template_util_unittest.cc |
| @@ -0,0 +1,66 @@ |
| +// Copyright (c) 2011 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/template_util.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace base { |
| +namespace { |
| + |
| +struct AStruct {}; |
| +class AClass {}; |
| +enum AnEnum {}; |
| + |
| +class Parent {}; |
| +class Child : public Parent {}; |
| + |
| +TEST(TemplateUtilTest, IsPointer) { |
| + EXPECT_FALSE(is_pointer<int>::value); |
| + EXPECT_FALSE(is_pointer<int&>::value); |
| + EXPECT_TRUE(is_pointer<int*>::value); |
| + EXPECT_TRUE(is_pointer<const int*>::value); |
| +} |
| + |
| +TEST(TemplateUtilTest, IsArray) { |
| + EXPECT_FALSE(is_array<int>::value); |
| + EXPECT_FALSE(is_array<int*>::value); |
| + EXPECT_FALSE(is_array<int(*)[3]>::value); |
| + EXPECT_TRUE(is_array<int[]>::value); |
| + EXPECT_TRUE(is_array<const int[]>::value); |
| + EXPECT_TRUE(is_array<int[3]>::value); |
| +} |
| + |
| +TEST(TemplateUtilTest, IsNonConstReference) { |
| + EXPECT_FALSE(is_non_const_reference<int>::value); |
| + EXPECT_FALSE(is_non_const_reference<const int&>::value); |
| + EXPECT_TRUE(is_non_const_reference<int&>::value); |
| +} |
| + |
| +#if !defined(OS_WIN) |
| +// TODO(ajwong): Why is is_convertible disabled on windows? |
|
willchan no longer on Chromium
2011/02/15 01:17:14
I couldn't ever get it to compile in Windows :P Yo
awong
2011/02/15 01:27:06
Hah...next CL.
|
| +TEST(TemplateUtilTest, IsConvertable) { |
|
willchan no longer on Chromium
2011/02/15 01:17:14
IsConvertable=>IsConvertible
awong
2011/02/15 01:27:06
Done.
|
| + // Extra parents needed to make EXPECT_*'s parsing happy. Otherwise, |
| + // it sees the equivalent of |
| + // |
| + // EXPECT_TRUE( (is_convertible < Child), (Parent > ::value)); |
| + // |
| + // Silly C++. |
| + EXPECT_TRUE( (is_convertible<Child, Parent>::value) ); |
| + EXPECT_FALSE( (is_convertible<Parent, Child>::value) ); |
| +} |
| +#endif // !defined(OS_WIN) |
| + |
| +TEST(TemplateUtilTest, IsClass) { |
| + EXPECT_EQ(true, is_class<AStruct>::value); |
| + EXPECT_EQ(true, is_class<AClass>::value); |
| + |
| + EXPECT_EQ(false, is_class<AnEnum>::value); |
| + EXPECT_EQ(false, is_class<int>::value); |
| + EXPECT_EQ(false, is_class<char*>::value); |
| + EXPECT_EQ(false, is_class<int&>::value); |
| + EXPECT_EQ(false, is_class<char[3]>::value); |
| +} |
| + |
| +} // namespace |
| +} // namespace base |