blob: 4303d135188279c947438d269c89adb4a9104b8b [file] [log] [blame]
Chris Masone27bf1032011-06-28 17:02:01 -07001// Copyright (c) 2011 The Chromium OS 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 "shill/property_accessor.h"
6
7#include <limits>
8#include <map>
9#include <string>
10#include <vector>
11
12#include <base/basictypes.h>
13#include <gtest/gtest.h>
14#include <gmock/gmock.h>
15
mukesh agrawalffa3d042011-10-06 15:26:10 -070016#include "shill/error.h"
17
Chris Masone27bf1032011-06-28 17:02:01 -070018using std::map;
19using std::string;
20using std::vector;
21using ::testing::Return;
22using ::testing::Test;
23
24namespace shill {
25
26TEST(PropertyAccessorTest, SignedIntCorrectness) {
27 int32 int_store = 0;
28 {
mukesh agrawalffa3d042011-10-06 15:26:10 -070029 Error error;
Chris Masone27bf1032011-06-28 17:02:01 -070030 Int32Accessor accessor(new PropertyAccessor<int32>(&int_store));
31 EXPECT_EQ(int_store, accessor->Get());
32
33 int32 expected_int32 = 127;
mukesh agrawalffa3d042011-10-06 15:26:10 -070034 accessor->Set(expected_int32, &error);
35 ASSERT_TRUE(error.IsSuccess());
Chris Masone27bf1032011-06-28 17:02:01 -070036 EXPECT_EQ(expected_int32, accessor->Get());
37
38 int_store = std::numeric_limits<int32>::max();
39 EXPECT_EQ(std::numeric_limits<int32>::max(), accessor->Get());
40 }
41 {
mukesh agrawalffa3d042011-10-06 15:26:10 -070042 Error error;
Chris Masone27bf1032011-06-28 17:02:01 -070043 Int32Accessor accessor(new ConstPropertyAccessor<int32>(&int_store));
44 EXPECT_EQ(int_store, accessor->Get());
45
46 int32 expected_int32 = 127;
mukesh agrawalffa3d042011-10-06 15:26:10 -070047 accessor->Set(expected_int32, &error);
48 ASSERT_FALSE(error.IsSuccess());
49 EXPECT_EQ(Error::kInvalidArguments, error.type());
Chris Masone27bf1032011-06-28 17:02:01 -070050 EXPECT_EQ(int_store, accessor->Get());
51
52 int_store = std::numeric_limits<int32>::max();
53 EXPECT_EQ(std::numeric_limits<int32>::max(), accessor->Get());
54 }
55}
56
57TEST(PropertyAccessorTest, UnsignedIntCorrectness) {
58 uint32 int_store = 0;
59 {
mukesh agrawalffa3d042011-10-06 15:26:10 -070060 Error error;
Chris Masone27bf1032011-06-28 17:02:01 -070061 Uint32Accessor accessor(new PropertyAccessor<uint32>(&int_store));
62 EXPECT_EQ(int_store, accessor->Get());
63
64 uint32 expected_uint32 = 127;
mukesh agrawalffa3d042011-10-06 15:26:10 -070065 accessor->Set(expected_uint32, &error);
66 ASSERT_TRUE(error.IsSuccess());
Chris Masone27bf1032011-06-28 17:02:01 -070067 EXPECT_EQ(expected_uint32, accessor->Get());
68
69 int_store = std::numeric_limits<uint32>::max();
70 EXPECT_EQ(std::numeric_limits<uint32>::max(), accessor->Get());
71 }
72 {
mukesh agrawalffa3d042011-10-06 15:26:10 -070073 Error error;
Chris Masone27bf1032011-06-28 17:02:01 -070074 Uint32Accessor accessor(new ConstPropertyAccessor<uint32>(&int_store));
75 EXPECT_EQ(int_store, accessor->Get());
76
77 uint32 expected_uint32 = 127;
mukesh agrawalffa3d042011-10-06 15:26:10 -070078 accessor->Set(expected_uint32, &error);
79 ASSERT_FALSE(error.IsSuccess());
80 EXPECT_EQ(Error::kInvalidArguments, error.type());
Chris Masone27bf1032011-06-28 17:02:01 -070081 EXPECT_EQ(int_store, accessor->Get());
82
83 int_store = std::numeric_limits<uint32>::max();
84 EXPECT_EQ(std::numeric_limits<uint32>::max(), accessor->Get());
85 }
86}
87
88TEST(PropertyAccessorTest, StringCorrectness) {
89 string storage;
90 {
mukesh agrawalffa3d042011-10-06 15:26:10 -070091 Error error;
Chris Masone27bf1032011-06-28 17:02:01 -070092 StringAccessor accessor(new PropertyAccessor<string>(&storage));
93 EXPECT_EQ(storage, accessor->Get());
94
95 string expected_string("what");
mukesh agrawalffa3d042011-10-06 15:26:10 -070096 accessor->Set(expected_string, &error);
97 ASSERT_TRUE(error.IsSuccess());
Chris Masone27bf1032011-06-28 17:02:01 -070098 EXPECT_EQ(expected_string, accessor->Get());
99
100 storage = "nooooo";
101 EXPECT_EQ(storage, accessor->Get());
102 }
103 {
mukesh agrawalffa3d042011-10-06 15:26:10 -0700104 Error error;
Chris Masone27bf1032011-06-28 17:02:01 -0700105 StringAccessor accessor(new ConstPropertyAccessor<string>(&storage));
106 EXPECT_EQ(storage, accessor->Get());
107
108 string expected_string("what");
mukesh agrawalffa3d042011-10-06 15:26:10 -0700109 accessor->Set(expected_string, &error);
110 ASSERT_FALSE(error.IsSuccess());
111 EXPECT_EQ(Error::kInvalidArguments, error.type());
Chris Masone27bf1032011-06-28 17:02:01 -0700112 EXPECT_EQ(storage, accessor->Get());
113
114 storage = "nooooo";
115 EXPECT_EQ(storage, accessor->Get());
116 }
117}
118
119} // namespace shill