• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2023 Google LLC.  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 "upb/reflection/internal/def_builder.h"
9 
10 #include <gtest/gtest.h>
11 #include "absl/strings/string_view.h"
12 #include "upb/mem/arena.hpp"
13 
14 // Must be last.
15 #include "upb/port/def.inc"
16 
17 struct IdentTestData {
18   absl::string_view text;
19   bool ok;
20 };
21 
22 class FullIdentTestBase : public testing::TestWithParam<IdentTestData> {};
23 
TEST_P(FullIdentTestBase,CheckFullIdent)24 TEST_P(FullIdentTestBase, CheckFullIdent) {
25   upb_Status status;
26   upb_DefBuilder ctx;
27   upb::Arena arena;
28   ctx.status = &status;
29   ctx.arena = arena.ptr();
30   upb_Status_Clear(&status);
31 
32   if (UPB_SETJMP(ctx.err)) {
33     EXPECT_FALSE(GetParam().ok);
34   } else {
35     _upb_DefBuilder_CheckIdentFull(
36         &ctx, upb_StringView_FromDataAndSize(GetParam().text.data(),
37                                              GetParam().text.size()));
38     EXPECT_TRUE(GetParam().ok);
39   }
40 }
41 
42 INSTANTIATE_TEST_SUITE_P(FullIdentTest, FullIdentTestBase,
43                          testing::ValuesIn(std::vector<IdentTestData>{
44                              {"foo.bar", true},
45                              {"foo.", true},
46                              {"foo", true},
47 
48                              {"foo.7bar", false},
49                              {".foo", false},
50                              {"#", false},
51                              {".", false},
52                              {"", false}}));
53 
54 class PartIdentTestBase : public testing::TestWithParam<IdentTestData> {};
55 
TEST_P(PartIdentTestBase,TestNotFullIdent)56 TEST_P(PartIdentTestBase, TestNotFullIdent) {
57   upb_Status status;
58   upb_DefBuilder ctx;
59   upb::Arena arena;
60   ctx.status = &status;
61   ctx.arena = arena.ptr();
62   upb_Status_Clear(&status);
63 
64   if (UPB_SETJMP(ctx.err)) {
65     EXPECT_FALSE(GetParam().ok);
66   } else {
67     _upb_DefBuilder_MakeFullName(
68         &ctx, "abc",
69         upb_StringView_FromDataAndSize(GetParam().text.data(),
70                                        GetParam().text.size()));
71     EXPECT_TRUE(GetParam().ok);
72   }
73 }
74 
75 INSTANTIATE_TEST_SUITE_P(PartIdentTest, PartIdentTestBase,
76                          testing::ValuesIn(std::vector<IdentTestData>{
77                              {"foo", true},
78                              {"foo1", true},
79 
80                              {"foo.bar", false},
81                              {"1foo", false},
82                              {"#", false},
83                              {".", false},
84                              {"", false}}));
85