// Copyright 2018 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_BINDINGS_TESTING_UTILS_H_
#define COBALT_BINDINGS_TESTING_UTILS_H_

#include <string>

#include "base/strings/stringprintf.h"

namespace cobalt {
namespace bindings {
namespace testing {

// In bindings tests that depend on a platform object prototype converted to a
// string, we accept both of these results because (e.g.)
// "String(Object.getPrototypeOf(document.body));" will evaluate to "[object
// HTMLBodyElement]" on Chrome 63 and "[object HTMLBodyElementPrototype]" on
// Firefox 57.  So, when we use any non-V8 engine, we handle this in the style
// of non-Chrome browsers, and when we use V8, we handle this in the style of
// Chrome.
inline bool IsAcceptablePrototypeString(const std::string& interface_name,
                                        const std::string& string) {
  auto spec_style_string =
      base::StringPrintf("[object %sPrototype]", interface_name.c_str());
  auto chrome_style_string =
      base::StringPrintf("[object %s]", interface_name.c_str());
  return string == spec_style_string || string == chrome_style_string;
}

}  // namespace testing
}  // namespace bindings
}  // namespace cobalt

#endif  // COBALT_BINDINGS_TESTING_UTILS_H_
