sequence_token_unittest.cc 4.2 KB

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