15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_test_utils.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_file_value_serializer.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_test_utils.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace onc {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test_utils {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The name of the component directory to get the test data from.
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetworkComponentDirectory[] = "network";
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ReadTestData(const std::string& filename) {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!chromeos::test_utils::GetTestDataPath(kNetworkComponentDirectory,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                             filename,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                             &path)) {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NOTREACHED() << "Unable to get test data path for "
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 << kNetworkComponentDirectory << "/" << filename;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return "";
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result;
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::ReadFileToString(path, &result);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return result;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_ptr<base::DictionaryValue> ReadTestDictionary(
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& filename) {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* dict = NULL;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!chromeos::test_utils::GetTestDataPath(kNetworkComponentDirectory,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                             filename,
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                             &path)) {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NOTREACHED() << "Unable to get test dictionary path for "
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 << kNetworkComponentDirectory << "/" << filename;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return make_scoped_ptr(dict);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  JSONFileValueSerializer serializer(path);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  serializer.set_allow_trailing_comma(true);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string error_message;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Value* content = serializer.Deserialize(NULL, &error_message);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(content != NULL) << "Couldn't json-deserialize file '"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         << filename << "': " << error_message;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(content->GetAsDictionary(&dict))
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "File '" << filename
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "' does not contain a dictionary as expected, but type "
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << content->GetType();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return make_scoped_ptr(dict);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch::testing::AssertionResult Equals(const base::Value* expected,
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                  const base::Value* actual) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(expected != NULL);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actual == NULL)
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return ::testing::AssertionFailure() << "Actual value pointer is NULL";
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (expected->Equals(actual))
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return ::testing::AssertionSuccess() << "Values are equal";
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return ::testing::AssertionFailure() << "Values are unequal.\n"
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                       << "Expected value:\n" << *expected
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                       << "Actual value:\n" << *actual;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test_utils
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace onc
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
84