blob: 14b40d3e3cd38e2c44dd1ec4f27a63c8a5eb5b7a [file] [log] [blame]
// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gtest/gtest.h>
#include "policy_manager/generic_variables.h"
using base::TimeDelta;
using std::string;
namespace chromeos_policy_manager {
TEST(PmCopyVariableTest, SimpleTest) {
int obj_int = 5;
CopyVariable<int> var(obj_int);
string errmsg = "Nope";
const int* res_1 = var.GetValue(TimeDelta::FromSeconds(1), &errmsg);
EXPECT_NE(res_1, static_cast<void*>(NULL));
EXPECT_EQ(5, *res_1);
obj_int = 42;
// Check the result in res_1 is actually a new copy.
EXPECT_EQ(5, *res_1);
const int* res_2 = var.GetValue(TimeDelta::FromSeconds(1), &errmsg);
EXPECT_NE(res_2, static_cast<void*>(NULL));
EXPECT_EQ(42, *res_2);
delete res_1;
delete res_2;
}
class ConstructorTestClass {
public:
ConstructorTestClass(void) : copied_(false) {}
ConstructorTestClass(const ConstructorTestClass& /* ignored */)
: copied_(true) {}
// Tells if the instance was constructed using the copy-constructor.
bool copied_;
};
TEST(PmCopyVariableTest, UseCopyConstructorTest) {
ConstructorTestClass obj;
ASSERT_FALSE(obj.copied_);
string errmsg;
CopyVariable<ConstructorTestClass> var(obj);
const ConstructorTestClass* value =
var.GetValue(TimeDelta::FromSeconds(1), &errmsg);
EXPECT_NE(value, static_cast<void*>(NULL));
EXPECT_TRUE(value->copied_);
delete value;
}
} // namespace chromeos_policy_manager