Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: chrome/renderer/net/mockable_one_shot_timer_unittest.cc

Issue 136203009: Support auto-reload on errors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Add MockableOneShotTimer tests. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 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 "chrome/renderer/net/mockable_one_shot_timer.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace {
11
12 void BumpCounter(int *counter) {
13 (*counter)++;
14 }
15
16 } // namespace
mmenke 2014/03/11 20:07:54 Can't this entire file be put in the anonymous nam
Elly Fong-Jones 2014/03/12 15:08:58 Done.
17
18 TEST(MockableOneShotTimerTest, TimerRuns) {
19 base::MessageLoop loop;
20 int calls = 0;
21 MockableOneShotTimer timer;
22 timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
23 base::Bind(&BumpCounter,
24 base::Unretained(&calls)));
25 base::MessageLoop::current()->RunUntilIdle();
26 EXPECT_EQ(1, calls);
27 }
28
29 class Incrementer {
mmenke 2014/03/11 20:07:54 I think this is very hard to follow. How about so
mmenke 2014/03/12 13:19:42 Could actually get away with just using a WeakFact
Elly Fong-Jones 2014/03/12 15:08:58 Done.
Elly Fong-Jones 2014/03/12 15:08:58 Done.
30 public:
31 Incrementer(int* counter) : counter_(counter) {}
mmenke 2014/03/11 20:07:54 explicit
Elly Fong-Jones 2014/03/12 15:08:58 Deleted.
32 ~Incrementer() { (*counter_)++; }
33 void set_counter(int* counter) { counter_ = counter; }
34 private:
mmenke 2014/03/11 20:07:54 Blank line before private.
Elly Fong-Jones 2014/03/12 15:08:58 Deleted.
35 int* counter_;
mmenke 2014/03/11 20:07:54 DISALLOW_COPY_AND_ASSIGN
Elly Fong-Jones 2014/03/12 15:08:58 Deleted.
36 };
37
38 namespace {
39
40 void AllDone(int* counter) {
mmenke 2014/03/11 20:07:54 Do we really need both this and BumpCounter?
Elly Fong-Jones 2014/03/12 15:08:58 Deleted.
41 (*counter)++;
42 }
43
44 void RestartTimer(int* counter, int* new_counter, Incrementer* incrementer,
45 MockableOneShotTimer* timer) {
46 (*counter)++;
47 timer->Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
48 base::Bind(&AllDone,
49 base::Unretained(counter)));
50 incrementer->set_counter(new_counter);
51 };
52
53 }
54
55 // Test that MockableOneShotTimer does not destroy the callback while the
56 // callback is still being run. Create a closure that owns an Incrementer (see
57 // above) and keep track of whether the Incrementer is destroyed "early" while
58 // the callback is running or not. Also, ensure that the timer executes both
59 // RestartTimer() and AllDone().
60 TEST(MockableOneShotTimerTest, NoDestructionAtStart) {
61 base::MessageLoop loop;
62 int early_destructions = 0;
63 int destructions = 0;
64 int calls = 0;
65 MockableOneShotTimer timer;
66 // If |incrementer| is destroyed, it will increment |early_destructions|;
67 // |RestartTimer| is responsible for swapping its destruction counter from
68 // |early_destructions| to |destructions|.
69 Incrementer* incrementer = new Incrementer(&early_destructions);
70 timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
71 base::Bind(&RestartTimer,
72 base::Unretained(&calls),
73 base::Unretained(&destructions),
74 base::Owned(incrementer),
75 base::Unretained(&timer)));
76 base::MessageLoop::current()->RunUntilIdle();
77 // Both |AllDone| and |RestartTimer| must have run.
78 EXPECT_EQ(2, calls);
79 EXPECT_EQ(0, early_destructions);
80 EXPECT_EQ(1, destructions);
81 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698