1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/log/test_net_log_util.h"
#include <cstddef>
namespace net {
namespace {
// Takes the list of entries and an offset, and returns an index into the array.
// If |offset| is positive, just returns |offset|. If it's negative, it
// indicates a position relative to the end of the array.
size_t GetIndex(const TestNetLogEntry::List& entries, int offset) {
if (offset >= 0)
return static_cast<size_t>(offset);
size_t abs_offset = static_cast<size_t>(-offset);
// If offset indicates a position before the start of the array, just return
// the end of the list.
if (abs_offset > entries.size())
return entries.size();
return entries.size() - abs_offset;
}
} // namespace
::testing::AssertionResult LogContainsEvent(
const TestNetLogEntry::List& entries,
int offset,
NetLog::EventType expected_event,
NetLog::EventPhase expected_phase) {
size_t index = GetIndex(entries, offset);
if (index >= entries.size())
return ::testing::AssertionFailure() << index << " is out of bounds.";
const TestNetLogEntry& entry = entries[index];
if (expected_event != entry.type) {
return ::testing::AssertionFailure()
<< "Actual event: " << NetLog::EventTypeToString(entry.type)
<< ". Expected event: " << NetLog::EventTypeToString(expected_event)
<< ".";
}
if (expected_phase != entry.phase) {
return ::testing::AssertionFailure()
<< "Actual phase: " << entry.phase
<< ". Expected phase: " << expected_phase << ".";
}
return ::testing::AssertionSuccess();
}
::testing::AssertionResult LogContainsBeginEvent(
const TestNetLogEntry::List& entries,
int offset,
NetLog::EventType expected_event) {
return LogContainsEvent(entries, offset, expected_event, NetLog::PHASE_BEGIN);
}
::testing::AssertionResult LogContainsEndEvent(
const TestNetLogEntry::List& entries,
int offset,
NetLog::EventType expected_event) {
return LogContainsEvent(entries, offset, expected_event, NetLog::PHASE_END);
}
::testing::AssertionResult LogContainsEntryWithType(
const TestNetLogEntry::List& entries,
int offset,
NetLog::EventType type) {
size_t index = GetIndex(entries, offset);
if (index >= entries.size())
return ::testing::AssertionFailure() << index << " is out of bounds.";
const TestNetLogEntry& entry = entries[index];
if (entry.type != type)
return ::testing::AssertionFailure() << "Type does not match.";
return ::testing::AssertionSuccess();
}
::testing::AssertionResult LogContainsEntryWithTypeAfter(
const TestNetLogEntry::List& entries,
int start_offset,
NetLog::EventType type) {
for (size_t i = GetIndex(entries, start_offset); i < entries.size(); ++i) {
const TestNetLogEntry& entry = entries[i];
if (entry.type == type)
return ::testing::AssertionSuccess();
}
return ::testing::AssertionFailure();
}
size_t ExpectLogContainsSomewhere(const TestNetLogEntry::List& entries,
size_t min_offset,
NetLog::EventType expected_event,
NetLog::EventPhase expected_phase) {
size_t min_index = GetIndex(entries, min_offset);
size_t i = 0;
for (; i < entries.size(); ++i) {
const TestNetLogEntry& entry = entries[i];
if (entry.type == expected_event && entry.phase == expected_phase)
break;
}
EXPECT_LT(i, entries.size());
EXPECT_GE(i, min_index);
return i;
}
size_t ExpectLogContainsSomewhereAfter(const TestNetLogEntry::List& entries,
size_t start_offset,
NetLog::EventType expected_event,
NetLog::EventPhase expected_phase) {
size_t i = GetIndex(entries, start_offset);
for (; i < entries.size(); ++i) {
const TestNetLogEntry& entry = entries[i];
if (entry.type == expected_event && entry.phase == expected_phase)
break;
}
EXPECT_LT(i, entries.size());
return i;
}
} // namespace net
|