// Copyright 2018 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.

#ifndef DIAGNOSTICS_COMMON_PROTOBUF_TEST_UTILS_H_
#define DIAGNOSTICS_COMMON_PROTOBUF_TEST_UTILS_H_

#include <string>
#include <vector>

#include <base/strings/string_util.h>
#include <google/protobuf/util/message_differencer.h>

namespace diagnostics {

// gmock matcher for protobufs, allowing to check protobuf arguments in mocks
// and test assertions.
MATCHER_P(ProtobufEquals,
          expected_message,
          "equals to {" + expected_message.ShortDebugString() + "}") {
  return google::protobuf::util::MessageDifferencer::Equals(arg,
                                                            expected_message);
}

// Given a range of protobuf messages, returns the human-readable representation
// of it (using protobuf::Message::ShortDebugString()).
template <typename Iterator>
inline std::string GetProtosRangeDebugString(Iterator protos_begin,
                                             Iterator protos_end) {
  std::vector<std::string> formatted_items;
  for (auto iterator = protos_begin; iterator != protos_end; ++iterator)
    formatted_items.push_back("{" + iterator->ShortDebugString() + "}");
  return "[" + base::JoinString(formatted_items, ", ") + "]";
}

}  // namespace diagnostics

#endif  // DIAGNOSTICS_COMMON_PROTOBUF_TEST_UTILS_H_
