/*
 * Copyright 2015 Google Inc. 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.
 */

#include "cobalt/bindings/testing/bindings_test_base.h"
#include "cobalt/bindings/testing/conditional_interface.h"

#include "testing/gtest/include/gtest/gtest.h"

using ::testing::Return;

namespace cobalt {
namespace bindings {
namespace testing {

namespace {
typedef InterfaceBindingsTest<ConditionalInterface> ConditionalInterfaceTest;
typedef BindingsTestBase DisabledInterfaceTest;
}  // namespace

TEST_F(ConditionalInterfaceTest, HasInterfaceObject) {
  EXPECT_TRUE(
      EvaluateScript("this.hasOwnProperty(\"ConditionalInterface\");", NULL));
}

TEST_F(ConditionalInterfaceTest, HasConditionalProperties) {
  EXPECT_TRUE(EvaluateScript(
      "ConditionalInterface.hasOwnProperty(\"enabledOperation\");", NULL));
  EXPECT_TRUE(
      EvaluateScript("test.hasOwnProperty(\"enabledAttribute\");", NULL));
}

TEST_F(ConditionalInterfaceTest, DoesNotHaveDisabledProperties) {
  EXPECT_TRUE(EvaluateScript(
      "!ConditionalInterface.hasOwnProperty(\"disabledOperation\");", NULL));
  EXPECT_TRUE(
      EvaluateScript("!test.hasOwnProperty(\"disabledAttribute\");", NULL));
}

TEST_F(DisabledInterfaceTest, NoInterfaceObject) {
  EXPECT_TRUE(EvaluateScript("this.DisabledInterface === undefined", NULL));
}

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