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

Side by Side Diff: sync/test/fake_server/fake_server_verifier.cc

Issue 1008983002: Sync: Print FakeServer contents on test failure (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_2
Patch Set: Created 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/test/fake_server/fake_server_verifier.h" 5 #include "sync/test/fake_server/fake_server_verifier.h"
6 6
7 #include "base/json/json_writer.h"
7 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
8 #include "base/values.h" 9 #include "base/values.h"
9 #include "sync/internal_api/public/base/model_type.h" 10 #include "sync/internal_api/public/base/model_type.h"
10 #include "sync/test/fake_server/fake_server.h" 11 #include "sync/test/fake_server/fake_server.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
14 using base::JSONWriter;
maniscalco 2015/03/18 15:33:55 Is the using statement necessary? I ask because i
pval...(no longer on Chromium) 2015/03/23 23:35:39 It's not necessary, but I think the code below rea
13 using std::string; 15 using std::string;
14 using testing::AssertionFailure; 16 using testing::AssertionFailure;
15 using testing::AssertionResult; 17 using testing::AssertionResult;
16 using testing::AssertionSuccess; 18 using testing::AssertionSuccess;
17 19
18 namespace { 20 namespace {
19 21
20 AssertionResult DictionaryCreationAssertionFailure() { 22 AssertionResult DictionaryCreationAssertionFailure() {
21 return AssertionFailure() << "FakeServer failed to create an entities " 23 return AssertionFailure() << "FakeServer failed to create an entities "
22 << "dictionary."; 24 << "dictionary.";
23 } 25 }
24 26
25 AssertionResult VerificationCountAssertionFailure(size_t actual_count, 27 AssertionResult VerificationCountAssertionFailure(size_t actual_count,
26 size_t expected_count) { 28 size_t expected_count) {
27 return AssertionFailure() << "Actual count: " << actual_count << "; " 29 return AssertionFailure() << "Actual count: " << actual_count << "; "
28 << "Expected count: " << expected_count; 30 << "Expected count: " << expected_count;
29 } 31 }
30 32
31 AssertionResult UnknownTypeAssertionFailure(const string& model_type) { 33 AssertionResult UnknownTypeAssertionFailure(const string& model_type) {
32 return AssertionFailure() << "Verification not attempted. Unknown ModelType: " 34 return AssertionFailure() << "Verification not attempted. Unknown ModelType: "
33 << model_type; 35 << model_type;
34 } 36 }
35 37
38 // Caller maintains ownership of |entities|.
39 string ConvertFakeServerContentsToString(base::DictionaryValue* entities) {
maniscalco 2015/03/18 15:33:56 Does entities need to be a non-const pointer? Cou
pval...(no longer on Chromium) 2015/03/23 23:35:39 It does not. Thanks for pointing this out; I've ma
maniscalco 2015/03/24 00:11:19 Great.
40 string entities_str;
41 if (!JSONWriter::WriteWithOptions(entities,
42 JSONWriter::OPTIONS_PRETTY_PRINT,
43 &entities_str)) {
44 entities_str = "Could not convert FakeServer contents to string.";
45 }
46 return "FakeServer contents:\n" + entities_str;
47 }
48
36 } // namespace 49 } // namespace
37 50
38 namespace fake_server { 51 namespace fake_server {
39 52
40 FakeServerVerifier::FakeServerVerifier(FakeServer* fake_server) 53 FakeServerVerifier::FakeServerVerifier(FakeServer* fake_server)
41 : fake_server_(fake_server) { } 54 : fake_server_(fake_server) { }
42 55
43 FakeServerVerifier::~FakeServerVerifier() {} 56 FakeServerVerifier::~FakeServerVerifier() {}
44 57
45 AssertionResult FakeServerVerifier::VerifyEntityCountByType( 58 AssertionResult FakeServerVerifier::VerifyEntityCountByType(
46 size_t expected_count, 59 size_t expected_count,
47 syncer::ModelType model_type) const { 60 syncer::ModelType model_type) const {
48 scoped_ptr<base::DictionaryValue> entities = 61 scoped_ptr<base::DictionaryValue> entities =
49 fake_server_->GetEntitiesAsDictionaryValue(); 62 fake_server_->GetEntitiesAsDictionaryValue();
50 if (!entities.get()) { 63 if (!entities.get()) {
51 return DictionaryCreationAssertionFailure(); 64 return DictionaryCreationAssertionFailure();
52 } 65 }
53 66
54 string model_type_string = ModelTypeToString(model_type); 67 string model_type_string = ModelTypeToString(model_type);
55 base::ListValue* entity_list = NULL; 68 base::ListValue* entity_list = NULL;
56 if (!entities->GetList(model_type_string, &entity_list)) { 69 if (!entities->GetList(model_type_string, &entity_list)) {
57 return UnknownTypeAssertionFailure(model_type_string); 70 return UnknownTypeAssertionFailure(model_type_string);
58 } else if (expected_count != entity_list->GetSize()) { 71 } else if (expected_count != entity_list->GetSize()) {
59 return VerificationCountAssertionFailure(entity_list->GetSize(), 72 return VerificationCountAssertionFailure(entity_list->GetSize(),
60 expected_count); 73 expected_count)
74 << "\n\n"
75 << ConvertFakeServerContentsToString(entities.get());
61 } 76 }
62 77
63 return AssertionSuccess(); 78 return AssertionSuccess();
64 } 79 }
65 80
66 AssertionResult FakeServerVerifier::VerifyEntityCountByTypeAndName( 81 AssertionResult FakeServerVerifier::VerifyEntityCountByTypeAndName(
67 size_t expected_count, 82 size_t expected_count,
68 syncer::ModelType model_type, 83 syncer::ModelType model_type,
69 const string& name) const { 84 const string& name) const {
70 scoped_ptr<base::DictionaryValue> entities = 85 scoped_ptr<base::DictionaryValue> entities =
(...skipping 12 matching lines...) Expand all
83 if (name_value->Equals(*it)) { 98 if (name_value->Equals(*it)) {
84 actual_count++; 99 actual_count++;
85 } 100 }
86 } 101 }
87 } 102 }
88 103
89 if (!entity_list) { 104 if (!entity_list) {
90 return UnknownTypeAssertionFailure(model_type_string); 105 return UnknownTypeAssertionFailure(model_type_string);
91 } else if (actual_count != expected_count) { 106 } else if (actual_count != expected_count) {
92 return VerificationCountAssertionFailure(actual_count, expected_count) 107 return VerificationCountAssertionFailure(actual_count, expected_count)
93 << "; Name: " << name; 108 << "; Name: "
109 << name
110 << "\n\n"
111 << ConvertFakeServerContentsToString(entities.get());
94 } 112 }
95 113
96 return AssertionSuccess(); 114 return AssertionSuccess();
97 } 115 }
98 116
99 } // namespace fake_server 117 } // namespace fake_server
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698