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 "third_party/libaddressinput/chromium/storage_test_runner.h"
6
7#include <cassert>
8#include <cstddef>
9#include <string>
10
11#include "testing/gtest/include/gtest/gtest.h"
12#include "third_party/libaddressinput/src/cpp/include/libaddressinput/callback.h"
13
14namespace autofill {
15
16using ::i18n::addressinput::Storage;
17
18StorageTestRunner::StorageTestRunner(Storage* storage)
19    : storage_(storage),
20      success_(false),
21      key_(),
22      data_() {}
23
24StorageTestRunner::~StorageTestRunner() {}
25
26void StorageTestRunner::RunAllTests() {
27  EXPECT_NO_FATAL_FAILURE(GetWithoutPutReturnsEmptyData());
28  EXPECT_NO_FATAL_FAILURE(GetReturnsWhatWasPut());
29  EXPECT_NO_FATAL_FAILURE(SecondPutOverwritesData());
30}
31
32void StorageTestRunner::ClearValues() {
33  success_ = false;
34  key_.clear();
35  data_.clear();
36}
37
38scoped_ptr<Storage::Callback> StorageTestRunner::BuildCallback() {
39  return scoped_ptr<Storage::Callback>(::i18n::addressinput::BuildCallback(
40      this, &StorageTestRunner::OnDataReady));
41}
42
43void StorageTestRunner::OnDataReady(bool success,
44                                    const std::string& key,
45                                    std::string* data) {
46  assert(!success || data != NULL);
47  success_ = success;
48  key_ = key;
49  if (data != NULL) {
50    data_ = *data;
51    delete data;
52  }
53}
54
55void StorageTestRunner::GetWithoutPutReturnsEmptyData() {
56  ClearValues();
57  scoped_ptr<Storage::Callback> callback(BuildCallback());
58  storage_->Get("key", *callback);
59
60  EXPECT_FALSE(success_);
61  EXPECT_EQ("key", key_);
62  EXPECT_TRUE(data_.empty());
63}
64
65void StorageTestRunner::GetReturnsWhatWasPut() {
66  ClearValues();
67  storage_->Put("key", new std::string("value"));
68  scoped_ptr<Storage::Callback> callback(BuildCallback());
69  storage_->Get("key", *callback);
70
71  EXPECT_TRUE(success_);
72  EXPECT_EQ("key", key_);
73  EXPECT_EQ("value", data_);
74}
75
76void StorageTestRunner::SecondPutOverwritesData() {
77  ClearValues();
78  storage_->Put("key", new std::string("bad-value"));
79  storage_->Put("key", new std::string("good-value"));
80  scoped_ptr<Storage::Callback> callback(BuildCallback());
81  storage_->Get("key", *callback);
82
83  EXPECT_TRUE(success_);
84  EXPECT_EQ("key", key_);
85  EXPECT_EQ("good-value", data_);
86}
87
88}  // namespace autofill
89