xref: /aosp_15_r20/external/libchrome/base/sequence_token_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/sequence_token.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker namespace base {
10*635a8641SAndroid Build Coastguard Worker 
TEST(SequenceTokenTest,IsValid)11*635a8641SAndroid Build Coastguard Worker TEST(SequenceTokenTest, IsValid) {
12*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(SequenceToken().IsValid());
13*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(SequenceToken::Create().IsValid());
14*635a8641SAndroid Build Coastguard Worker }
15*635a8641SAndroid Build Coastguard Worker 
TEST(SequenceTokenTest,OperatorEquals)16*635a8641SAndroid Build Coastguard Worker TEST(SequenceTokenTest, OperatorEquals) {
17*635a8641SAndroid Build Coastguard Worker   const SequenceToken invalid_a;
18*635a8641SAndroid Build Coastguard Worker   const SequenceToken invalid_b;
19*635a8641SAndroid Build Coastguard Worker   const SequenceToken valid_a = SequenceToken::Create();
20*635a8641SAndroid Build Coastguard Worker   const SequenceToken valid_b = SequenceToken::Create();
21*635a8641SAndroid Build Coastguard Worker 
22*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid_a == invalid_a);
23*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid_a == invalid_b);
24*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid_a == valid_a);
25*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid_a == valid_b);
26*635a8641SAndroid Build Coastguard Worker 
27*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(valid_a == invalid_a);
28*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(valid_a == invalid_b);
29*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(valid_a, valid_a);
30*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(valid_a == valid_b);
31*635a8641SAndroid Build Coastguard Worker }
32*635a8641SAndroid Build Coastguard Worker 
TEST(SequenceTokenTest,OperatorNotEquals)33*635a8641SAndroid Build Coastguard Worker TEST(SequenceTokenTest, OperatorNotEquals) {
34*635a8641SAndroid Build Coastguard Worker   const SequenceToken invalid_a;
35*635a8641SAndroid Build Coastguard Worker   const SequenceToken invalid_b;
36*635a8641SAndroid Build Coastguard Worker   const SequenceToken valid_a = SequenceToken::Create();
37*635a8641SAndroid Build Coastguard Worker   const SequenceToken valid_b = SequenceToken::Create();
38*635a8641SAndroid Build Coastguard Worker 
39*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(invalid_a, invalid_a);
40*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(invalid_a, invalid_b);
41*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(invalid_a, valid_a);
42*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(invalid_a, valid_b);
43*635a8641SAndroid Build Coastguard Worker 
44*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(valid_a, invalid_a);
45*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(valid_a, invalid_b);
46*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(valid_a != valid_a);
47*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(valid_a, valid_b);
48*635a8641SAndroid Build Coastguard Worker }
49*635a8641SAndroid Build Coastguard Worker 
TEST(SequenceTokenTest,GetForCurrentThread)50*635a8641SAndroid Build Coastguard Worker TEST(SequenceTokenTest, GetForCurrentThread) {
51*635a8641SAndroid Build Coastguard Worker   const SequenceToken token = SequenceToken::Create();
52*635a8641SAndroid Build Coastguard Worker 
53*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(SequenceToken::GetForCurrentThread().IsValid());
54*635a8641SAndroid Build Coastguard Worker 
55*635a8641SAndroid Build Coastguard Worker   {
56*635a8641SAndroid Build Coastguard Worker     ScopedSetSequenceTokenForCurrentThread
57*635a8641SAndroid Build Coastguard Worker         scoped_set_sequence_token_for_current_thread(token);
58*635a8641SAndroid Build Coastguard Worker     EXPECT_TRUE(SequenceToken::GetForCurrentThread().IsValid());
59*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(token, SequenceToken::GetForCurrentThread());
60*635a8641SAndroid Build Coastguard Worker   }
61*635a8641SAndroid Build Coastguard Worker 
62*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(SequenceToken::GetForCurrentThread().IsValid());
63*635a8641SAndroid Build Coastguard Worker }
64*635a8641SAndroid Build Coastguard Worker 
TEST(SequenceTokenTest,ToInternalValue)65*635a8641SAndroid Build Coastguard Worker TEST(SequenceTokenTest, ToInternalValue) {
66*635a8641SAndroid Build Coastguard Worker   const SequenceToken token1 = SequenceToken::Create();
67*635a8641SAndroid Build Coastguard Worker   const SequenceToken token2 = SequenceToken::Create();
68*635a8641SAndroid Build Coastguard Worker 
69*635a8641SAndroid Build Coastguard Worker   // Confirm that internal values are unique.
70*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(token1.ToInternalValue(), token2.ToInternalValue());
71*635a8641SAndroid Build Coastguard Worker }
72*635a8641SAndroid Build Coastguard Worker 
73*635a8641SAndroid Build Coastguard Worker // Expect a default-constructed TaskToken to be invalid and not equal to
74*635a8641SAndroid Build Coastguard Worker // another invalid TaskToken.
TEST(TaskTokenTest,InvalidDefaultConstructed)75*635a8641SAndroid Build Coastguard Worker TEST(TaskTokenTest, InvalidDefaultConstructed) {
76*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(TaskToken().IsValid());
77*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(TaskToken(), TaskToken());
78*635a8641SAndroid Build Coastguard Worker }
79*635a8641SAndroid Build Coastguard Worker 
80*635a8641SAndroid Build Coastguard Worker // Expect a TaskToken returned by TaskToken::GetForCurrentThread() outside the
81*635a8641SAndroid Build Coastguard Worker // scope of a ScopedSetSequenceTokenForCurrentThread to be invalid.
TEST(TaskTokenTest,InvalidOutsideScope)82*635a8641SAndroid Build Coastguard Worker TEST(TaskTokenTest, InvalidOutsideScope) {
83*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(TaskToken::GetForCurrentThread().IsValid());
84*635a8641SAndroid Build Coastguard Worker }
85*635a8641SAndroid Build Coastguard Worker 
86*635a8641SAndroid Build Coastguard Worker // Expect an invalid TaskToken not to be equal with a valid TaskToken.
TEST(TaskTokenTest,ValidNotEqualsInvalid)87*635a8641SAndroid Build Coastguard Worker TEST(TaskTokenTest, ValidNotEqualsInvalid) {
88*635a8641SAndroid Build Coastguard Worker   ScopedSetSequenceTokenForCurrentThread
89*635a8641SAndroid Build Coastguard Worker       scoped_set_sequence_token_for_current_thread(SequenceToken::Create());
90*635a8641SAndroid Build Coastguard Worker   TaskToken valid = TaskToken::GetForCurrentThread();
91*635a8641SAndroid Build Coastguard Worker   TaskToken invalid;
92*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(valid, invalid);
93*635a8641SAndroid Build Coastguard Worker }
94*635a8641SAndroid Build Coastguard Worker 
95*635a8641SAndroid Build Coastguard Worker // Expect TaskTokens returned by TaskToken::GetForCurrentThread() in the scope
96*635a8641SAndroid Build Coastguard Worker // of the same ScopedSetSequenceTokenForCurrentThread instance to be
97*635a8641SAndroid Build Coastguard Worker // valid and equal with each other.
TEST(TaskTokenTest,EqualInSameScope)98*635a8641SAndroid Build Coastguard Worker TEST(TaskTokenTest, EqualInSameScope) {
99*635a8641SAndroid Build Coastguard Worker   ScopedSetSequenceTokenForCurrentThread
100*635a8641SAndroid Build Coastguard Worker       scoped_set_sequence_token_for_current_thread(SequenceToken::Create());
101*635a8641SAndroid Build Coastguard Worker 
102*635a8641SAndroid Build Coastguard Worker   const TaskToken token_a = TaskToken::GetForCurrentThread();
103*635a8641SAndroid Build Coastguard Worker   const TaskToken token_b = TaskToken::GetForCurrentThread();
104*635a8641SAndroid Build Coastguard Worker 
105*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(token_a.IsValid());
106*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(token_b.IsValid());
107*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(token_a, token_b);
108*635a8641SAndroid Build Coastguard Worker }
109*635a8641SAndroid Build Coastguard Worker 
110*635a8641SAndroid Build Coastguard Worker // Expect TaskTokens returned by TaskToken::GetForCurrentThread() in the scope
111*635a8641SAndroid Build Coastguard Worker // of different ScopedSetSequenceTokenForCurrentThread instances to be
112*635a8641SAndroid Build Coastguard Worker // valid but not equal to each other.
TEST(TaskTokenTest,NotEqualInDifferentScopes)113*635a8641SAndroid Build Coastguard Worker TEST(TaskTokenTest, NotEqualInDifferentScopes) {
114*635a8641SAndroid Build Coastguard Worker   TaskToken token_a;
115*635a8641SAndroid Build Coastguard Worker   TaskToken token_b;
116*635a8641SAndroid Build Coastguard Worker 
117*635a8641SAndroid Build Coastguard Worker   {
118*635a8641SAndroid Build Coastguard Worker     ScopedSetSequenceTokenForCurrentThread
119*635a8641SAndroid Build Coastguard Worker         scoped_set_sequence_token_for_current_thread(SequenceToken::Create());
120*635a8641SAndroid Build Coastguard Worker     token_a = TaskToken::GetForCurrentThread();
121*635a8641SAndroid Build Coastguard Worker   }
122*635a8641SAndroid Build Coastguard Worker   {
123*635a8641SAndroid Build Coastguard Worker     ScopedSetSequenceTokenForCurrentThread
124*635a8641SAndroid Build Coastguard Worker         scoped_set_sequence_token_for_current_thread(SequenceToken::Create());
125*635a8641SAndroid Build Coastguard Worker     token_b = TaskToken::GetForCurrentThread();
126*635a8641SAndroid Build Coastguard Worker   }
127*635a8641SAndroid Build Coastguard Worker 
128*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(token_a.IsValid());
129*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(token_b.IsValid());
130*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(token_a, token_b);
131*635a8641SAndroid Build Coastguard Worker }
132*635a8641SAndroid Build Coastguard Worker 
133*635a8641SAndroid Build Coastguard Worker }  // namespace base
134