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