// Copyright 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 "chromeos-dbus-bindings/method_name_generator.h"

#include <string>
#include <vector>

#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <gtest/gtest.h>

#include "chromeos-dbus-bindings/interface.h"

using std::string;
using testing::Test;

namespace chromeos_dbus_bindings {

namespace {

const char kMethodName0[] = "Zircon";
const char kMethodName1[] = "Encrusted";
const char kMethodName2[] = "Tweezers";
const char kExpectedOutput[] = R"(
namespace MyInterface {
const char kZirconMethod[] = "Zircon";
const char kEncrustedMethod[] = "Encrusted";
const char kTweezersMethod[] = "Tweezers";
}  // namespace MyInterface
)";

}  // namespace

class MethodNameGeneratorTest : public Test {
 public:
  void SetUp() override {
    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
  }

 protected:
  base::FilePath CreateInputFile(const string& contents) {
    base::FilePath path;
    EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &path));
    EXPECT_EQ(contents.size(),
              base::WriteFile(path, contents.c_str(), contents.size()));
    return path;
  }

  base::ScopedTempDir temp_dir_;
};

TEST_F(MethodNameGeneratorTest, GnerateMethodNames) {
  Interface interface;
  interface.name = "MyInterface";
  interface.methods.emplace_back(kMethodName0);
  interface.methods.emplace_back(kMethodName1);
  interface.methods.emplace_back(kMethodName2);
  base::FilePath output_path = temp_dir_.path().Append("output.h");
  EXPECT_TRUE(MethodNameGenerator::GenerateMethodNames({interface},
                                                       output_path));
  string contents;
  EXPECT_TRUE(base::ReadFileToString(output_path, &contents));
  EXPECT_STREQ(kExpectedOutput, contents.c_str());
}

}  // namespace chromeos_dbus_bindings
