• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2014 Google Inc.  All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7 
8 #include "google/protobuf/compiler/objectivec/names.h"
9 
10 #include <gtest/gtest.h>
11 
12 namespace google {
13 namespace protobuf {
14 namespace compiler {
15 namespace objectivec {
16 
17 namespace {
18 
TEST(ObjCHelper,IsRetainedName)19 TEST(ObjCHelper, IsRetainedName) {
20   EXPECT_TRUE(IsRetainedName("new"));
21   EXPECT_TRUE(IsRetainedName("alloc"));
22   EXPECT_TRUE(IsRetainedName("copy"));
23   EXPECT_TRUE(IsRetainedName("mutableCopy"));
24   EXPECT_TRUE(IsRetainedName("newFoo"));
25   EXPECT_TRUE(IsRetainedName("allocFoo"));
26   EXPECT_TRUE(IsRetainedName("copyFoo"));
27   EXPECT_TRUE(IsRetainedName("mutableCopyFoo"));
28   EXPECT_TRUE(IsRetainedName("new_foo"));
29   EXPECT_TRUE(IsRetainedName("alloc_foo"));
30   EXPECT_TRUE(IsRetainedName("copy_foo"));
31   EXPECT_TRUE(IsRetainedName("mutableCopy_foo"));
32 
33   EXPECT_FALSE(IsRetainedName(""));
34   EXPECT_FALSE(IsRetainedName("ne"));
35   EXPECT_FALSE(IsRetainedName("all"));
36   EXPECT_FALSE(IsRetainedName("co"));
37   EXPECT_FALSE(IsRetainedName("mutable"));
38   EXPECT_FALSE(IsRetainedName("New"));
39   EXPECT_FALSE(IsRetainedName("Alloc"));
40   EXPECT_FALSE(IsRetainedName("Copy"));
41   EXPECT_FALSE(IsRetainedName("MutableCopy"));
42   EXPECT_FALSE(IsRetainedName("newer"));
43   EXPECT_FALSE(IsRetainedName("alloced"));
44   EXPECT_FALSE(IsRetainedName("copying"));
45   EXPECT_FALSE(IsRetainedName("mutableCopying"));
46 
47   EXPECT_FALSE(IsRetainedName("init"));
48   EXPECT_FALSE(IsRetainedName("Create"));
49   EXPECT_FALSE(IsRetainedName("Copy"));
50 }
51 
TEST(ObjCHelper,IsInitName)52 TEST(ObjCHelper, IsInitName) {
53   EXPECT_TRUE(IsInitName("init"));
54   EXPECT_TRUE(IsInitName("initFoo"));
55   EXPECT_TRUE(IsInitName("init_foo"));
56 
57   EXPECT_FALSE(IsInitName(""));
58   EXPECT_FALSE(IsInitName("in"));
59   EXPECT_FALSE(IsInitName("Init"));
60   EXPECT_FALSE(IsInitName("inIt"));
61   EXPECT_FALSE(IsInitName("initial"));
62   EXPECT_FALSE(IsInitName("initiAl"));
63   EXPECT_FALSE(IsInitName("fooInit"));
64   EXPECT_FALSE(IsInitName("foo_init"));
65 
66   EXPECT_FALSE(IsInitName("new"));
67   EXPECT_FALSE(IsInitName("alloc"));
68   EXPECT_FALSE(IsInitName("copy"));
69   EXPECT_FALSE(IsInitName("mutableCopy"));
70   EXPECT_FALSE(IsInitName("Create"));
71   EXPECT_FALSE(IsInitName("Copy"));
72 }
73 
TEST(ObjCHelper,IsCreateName)74 TEST(ObjCHelper, IsCreateName) {
75   EXPECT_TRUE(IsCreateName("Create"));
76   EXPECT_TRUE(IsCreateName("Copy"));
77   EXPECT_TRUE(IsCreateName("CreateFoo"));
78   EXPECT_TRUE(IsCreateName("CopyFoo"));
79   EXPECT_TRUE(IsCreateName("Create_foo"));
80   EXPECT_TRUE(IsCreateName("Copy_foo"));
81   EXPECT_TRUE(IsCreateName("ReCreate"));
82   EXPECT_TRUE(IsCreateName("ReCopy"));
83   EXPECT_TRUE(IsCreateName("FOOCreate"));
84   EXPECT_TRUE(IsCreateName("FOOCopy"));
85   EXPECT_TRUE(IsCreateName("CreateWithCopy"));
86 
87   EXPECT_FALSE(IsCreateName(""));
88   EXPECT_FALSE(IsCreateName("Crea"));
89   EXPECT_FALSE(IsCreateName("Co"));
90   EXPECT_FALSE(IsCreateName("create"));
91   EXPECT_FALSE(IsCreateName("recreate"));
92   EXPECT_FALSE(IsCreateName("recopy"));
93   EXPECT_FALSE(IsCreateName("ReCreated"));
94   EXPECT_FALSE(IsCreateName("ReCopying"));
95 
96   EXPECT_FALSE(IsCreateName("init"));
97   EXPECT_FALSE(IsCreateName("new"));
98   EXPECT_FALSE(IsCreateName("alloc"));
99   EXPECT_FALSE(IsCreateName("copy"));
100   EXPECT_TRUE(IsCreateName("mutableCopy"));
101 }
102 
103 // TODO: Should probably add some unittests for all the special cases
104 // of name mangling (class name, field name, enum names).  Rather than doing
105 // this with an ObjC test in the objectivec directory, we should be able to
106 // use src/google/protobuf/compiler/importer* (like other tests) to support a
107 // virtual file system to feed in protos, once we have the Descriptor tree, the
108 // tests could use the helper methods for generating names and validate the
109 // right things are happening.
110 
111 }  // namespace
112 
113 }  // namespace objectivec
114 }  // namespace compiler
115 }  // namespace protobuf
116 }  // namespace google
117