// Copyright 2016 The Chromium 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 "ui/display/test/display_matchers.h"

namespace display {

namespace {

const float kEpsilon = 0.0001f;

// Matcher to check DisplayMode size and refresh rate.
class DisplayModeMatcher
    : public testing::MatcherInterface<const ui::DisplayMode&> {
 public:
  DisplayModeMatcher(int width, int height, float refresh_rate)
      : size_(width, height), refresh_rate_(refresh_rate) {}

  bool MatchAndExplain(const ui::DisplayMode& mode,
                       testing::MatchResultListener* listener) const override {
    return mode.size() == size_ &&
           std::fabs(mode.refresh_rate() - refresh_rate_) < kEpsilon;
  }

  void DescribeTo(std::ostream* os) const override {
    *os << "[" << size_.ToString() << " rate=" << refresh_rate_ << "]";
  }

  void DescribeNegationTo(std::ostream* os) const override {
    *os << "not [" << size_.ToString() << " rate=" << refresh_rate_ << "]";
  }

 private:
  gfx::Size size_;
  float refresh_rate_;
};

}  // namespace

testing::Matcher<const ui::DisplayMode&> IsDisplayMode(int width,
                                                       int height,
                                                       float refresh_rate) {
  return testing::MakeMatcher(
      new DisplayModeMatcher(width, height, refresh_rate));
}

}  // namespace display
