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.
5 #include "sync/test/fake_server/fake_server_verifier.h"
7 #include "base/json/json_writer.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/values.h"
10 #include "sync/internal_api/public/base/model_type.h"
11 #include "sync/test/fake_server/fake_server.h"
12 #include "testing/gtest/include/gtest/gtest.h"
14 using base::JSONWriter
;
16 using testing::AssertionFailure
;
17 using testing::AssertionResult
;
18 using testing::AssertionSuccess
;
22 AssertionResult
DictionaryCreationAssertionFailure() {
23 return AssertionFailure() << "FakeServer failed to create an entities "
27 AssertionResult
VerificationCountAssertionFailure(size_t actual_count
,
28 size_t expected_count
) {
29 return AssertionFailure() << "Actual count: " << actual_count
<< "; "
30 << "Expected count: " << expected_count
;
33 AssertionResult
UnknownTypeAssertionFailure(const string
& model_type
) {
34 return AssertionFailure() << "Verification not attempted. Unknown ModelType: "
38 // Caller maintains ownership of |entities|.
39 string
ConvertFakeServerContentsToString(
40 const base::DictionaryValue
& entities
) {
42 if (!JSONWriter::WriteWithOptions(&entities
,
43 JSONWriter::OPTIONS_PRETTY_PRINT
,
45 entities_str
= "Could not convert FakeServer contents to string.";
47 return "FakeServer contents:\n" + entities_str
;
52 namespace fake_server
{
54 FakeServerVerifier::FakeServerVerifier(FakeServer
* fake_server
)
55 : fake_server_(fake_server
) { }
57 FakeServerVerifier::~FakeServerVerifier() {}
59 AssertionResult
FakeServerVerifier::VerifyEntityCountByType(
60 size_t expected_count
,
61 syncer::ModelType model_type
) const {
62 scoped_ptr
<base::DictionaryValue
> entities
=
63 fake_server_
->GetEntitiesAsDictionaryValue();
64 if (!entities
.get()) {
65 return DictionaryCreationAssertionFailure();
68 string model_type_string
= ModelTypeToString(model_type
);
69 base::ListValue
* entity_list
= NULL
;
70 if (!entities
->GetList(model_type_string
, &entity_list
)) {
71 return UnknownTypeAssertionFailure(model_type_string
);
72 } else if (expected_count
!= entity_list
->GetSize()) {
73 return VerificationCountAssertionFailure(entity_list
->GetSize(),
76 << ConvertFakeServerContentsToString(*entities
);
79 return AssertionSuccess();
82 AssertionResult
FakeServerVerifier::VerifyEntityCountByTypeAndName(
83 size_t expected_count
,
84 syncer::ModelType model_type
,
85 const string
& name
) const {
86 scoped_ptr
<base::DictionaryValue
> entities
=
87 fake_server_
->GetEntitiesAsDictionaryValue();
88 if (!entities
.get()) {
89 return DictionaryCreationAssertionFailure();
92 string model_type_string
= ModelTypeToString(model_type
);
93 base::ListValue
* entity_list
= NULL
;
94 size_t actual_count
= 0;
95 if (entities
->GetList(model_type_string
, &entity_list
)) {
96 scoped_ptr
<base::Value
> name_value(new base::StringValue(name
));
97 for (base::ListValue::const_iterator it
= entity_list
->begin();
98 it
!= entity_list
->end(); ++it
) {
99 if (name_value
->Equals(*it
)) {
106 return UnknownTypeAssertionFailure(model_type_string
);
107 } else if (actual_count
!= expected_count
) {
108 return VerificationCountAssertionFailure(actual_count
, expected_count
)
112 << ConvertFakeServerContentsToString(*entities
);
115 return AssertionSuccess();
118 } // namespace fake_server