• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 
4 #include "gn/builder_record_map.h"
5 #include "gn/builder_record.h"
6 #include "gn/label.h"
7 #include "gn/source_dir.h"
8 #include "util/test/test.h"
9 
TEST(BuilderRecordMap,Construction)10 TEST(BuilderRecordMap, Construction) {
11   const Label kLabel1(SourceDir("//src"), "foo");
12   BuilderRecordMap map;
13   EXPECT_TRUE(map.empty());
14   EXPECT_EQ(0u, map.size());
15   EXPECT_FALSE(map.find(kLabel1));
16 }
17 
TEST(BuilderRecordMap,TryEmplace)18 TEST(BuilderRecordMap, TryEmplace) {
19   const Label kLabel1(SourceDir("//src"), "foo");
20   const Label kLabel2(SourceDir("//src"), "bar");
21   const Label kLabel3(SourceDir("//third_party/src"), "zoo");
22 
23   BuilderRecordMap map;
24 
25   auto ret = map.try_emplace(kLabel1, nullptr, BuilderRecord::ITEM_TARGET);
26   EXPECT_TRUE(ret.first);
27   EXPECT_TRUE(ret.second);
28   EXPECT_EQ(BuilderRecord::ITEM_TARGET, ret.second->type());
29   EXPECT_EQ(kLabel1, ret.second->label());
30   EXPECT_EQ(ret.second, map.find(kLabel1));
31   EXPECT_EQ(1u, map.size());
32 
33   BuilderRecord* record = ret.second;
34   ret = map.try_emplace(kLabel1, nullptr, BuilderRecord::ITEM_CONFIG);
35   EXPECT_FALSE(ret.first);
36   EXPECT_EQ(record, ret.second);
37   EXPECT_EQ(1u, map.size());
38 
39   ret = map.try_emplace(kLabel2, nullptr, BuilderRecord::ITEM_CONFIG);
40   EXPECT_TRUE(ret.first);
41   EXPECT_TRUE(ret.second);
42   EXPECT_EQ(2u, map.size());
43   EXPECT_EQ(BuilderRecord::ITEM_CONFIG, ret.second->type());
44   EXPECT_EQ(kLabel2, ret.second->label());
45   EXPECT_EQ(ret.second, map.find(kLabel2));
46 
47   ret = map.try_emplace(kLabel3, nullptr, BuilderRecord::ITEM_TOOLCHAIN);
48   EXPECT_TRUE(ret.first);
49   EXPECT_TRUE(ret.second);
50   EXPECT_EQ(3u, map.size());
51   EXPECT_EQ(BuilderRecord::ITEM_TOOLCHAIN, ret.second->type());
52   EXPECT_EQ(kLabel3, ret.second->label());
53   EXPECT_EQ(ret.second, map.find(kLabel3));
54 
55   ret = map.try_emplace(kLabel2, nullptr, BuilderRecord::ITEM_CONFIG);
56   EXPECT_FALSE(ret.first);
57 
58   EXPECT_EQ(3u, map.size());
59   EXPECT_TRUE(map.find(kLabel1));
60   EXPECT_TRUE(map.find(kLabel2));
61   EXPECT_TRUE(map.find(kLabel3));
62 }
63