1// Copyright 2014 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
5#include "crazy_linker_thread.h"
6
7#include <minitest/minitest.h>
8
9namespace crazy {
10
11TEST(Thread, GetThreadData) {
12  ThreadData* data = GetThreadData();
13  TEST_TEXT << "Checking first GetThreadData() call";
14  EXPECT_TRUE(data);
15  EXPECT_EQ(data, GetThreadData());
16  EXPECT_EQ(data, GetThreadDataFast());
17}
18
19TEST(Thread, GetErrorEmpty) {
20  ThreadData* data = GetThreadData();
21  const char* error = data->GetError();
22  EXPECT_TRUE(error);
23  EXPECT_STREQ("", error);
24}
25
26TEST(Thread, SetError) {
27  ThreadData* data = GetThreadData();
28  data->SetError("Hello");
29  data->SetError("World");
30  EXPECT_STREQ("World", data->GetError());
31}
32
33TEST(Thread, SetErrorNull) {
34  ThreadData* data = GetThreadData();
35  data->SetError("Hello");
36  data->SetError(NULL);
37  EXPECT_STREQ("", data->GetError());
38}
39
40TEST(Thread, GetError) {
41  ThreadData* data = GetThreadData();
42  data->SetError("Hello");
43
44  const char* error = data->GetError();
45  EXPECT_STREQ("Hello", error);
46
47  error = data->GetError();
48  EXPECT_STREQ("Hello", error);
49}
50
51TEST(Thread, SwapErrorBuffers) {
52  ThreadData* data = GetThreadData();
53  data->SetError("Hello");
54  EXPECT_STREQ("Hello", data->GetError());
55
56  data->SwapErrorBuffers();
57  EXPECT_STREQ("", data->GetError());
58
59  data->SetError("World");
60  EXPECT_STREQ("World", data->GetError());
61
62  data->SwapErrorBuffers();
63  EXPECT_STREQ("", data->GetError());
64}
65
66TEST(Thread, AppendErrorTwice) {
67  ThreadData* data = GetThreadData();
68  data->SetError(NULL);
69  data->AppendError("Hello");
70  EXPECT_STREQ("Hello", data->GetError());
71
72  data->AppendError(" World");
73  EXPECT_STREQ("Hello World", data->GetError());
74}
75
76TEST(Thread, AppendErrorFull) {
77  const size_t kMaxCount = 1000;
78  ThreadData* data = GetThreadData();
79  data->SetError(NULL);
80
81  for (size_t n = 0; n < kMaxCount; ++n)
82    data->AppendError("0123456789");
83
84  const char* error = data->GetError();
85  size_t error_len = strlen(error);
86
87  EXPECT_GT(0, error_len);
88  EXPECT_LT(kMaxCount * 10, error_len);
89
90  for (size_t n = 0; n < error_len; ++n) {
91    TEST_TEXT << "Checking error[" << n << "]";
92    EXPECT_EQ('0' + (n % 10), error[n]);
93  }
94}
95
96TEST(Thread, AppendErrorNull) {
97  ThreadData* data = GetThreadData();
98  data->SetError("Hello");
99  data->AppendError(NULL);
100  data->AppendError(" World");
101  EXPECT_STREQ("Hello World", data->GetError());
102}
103
104TEST(Thread, SetLinkerErrorString) {
105  ThreadData* data = GetThreadData();
106
107  SetLinkerErrorString("Hello World");
108  EXPECT_STREQ("Hello World", data->GetError());
109
110  SetLinkerErrorString(NULL);
111  EXPECT_STREQ("", data->GetError());
112}
113
114TEST(Thread, SetLinkerError) {
115  ThreadData* data = GetThreadData();
116
117  SetLinkerError("%s %s!", "Hi", "Captain");
118  EXPECT_STREQ("Hi Captain!", data->GetError());
119
120  SetLinkerError("Woosh");
121  EXPECT_STREQ("Woosh", data->GetError());
122}
123
124}  // namespace crazy
125