1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "config.h"
6#include "core/testing/PrivateScriptTest.h"
7
8#include "bindings/core/v8/PrivateScriptRunner.h"
9#include "bindings/core/v8/V8Binding.h"
10#include "bindings/core/v8/V8PrivateScriptTest.h"
11#include "core/testing/DummyPageHolder.h"
12
13#include <gtest/gtest.h>
14
15// PrivateScriptTest.js is available only in debug builds.
16#ifndef NDEBUG
17namespace blink {
18
19namespace {
20
21class PrivateScriptTestTest : public ::testing::Test {
22public:
23    PrivateScriptTestTest()
24        : m_scope(v8::Isolate::GetCurrent())
25        , m_dummyPageHolder(DummyPageHolder::create())
26        , m_privateScriptTest(PrivateScriptTest::create(frame()))
27    {
28    }
29
30    ~PrivateScriptTestTest()
31    {
32    }
33
34    LocalFrame* frame() const { return &m_dummyPageHolder->frame(); }
35    Document* document() const { return &m_dummyPageHolder->document(); }
36    v8::Isolate* isolate() const { return m_scope.isolate(); }
37    PrivateScriptTest* privateScriptTest() const { return m_privateScriptTest.get(); }
38
39protected:
40    V8TestingScope m_scope;
41    OwnPtr<DummyPageHolder> m_dummyPageHolder;
42    Persistent<PrivateScriptTest> m_privateScriptTest;
43};
44
45TEST_F(PrivateScriptTestTest, invokePrivateScriptMethodFromCPP)
46{
47    bool success;
48    int result;
49    success = V8PrivateScriptTest::PrivateScript::addIntegerForPrivateScriptOnlyMethod(frame(), privateScriptTest(), 100, 200, &result);
50    EXPECT_TRUE(success);
51    EXPECT_EQ(result, 300);
52}
53
54TEST_F(PrivateScriptTestTest, invokePrivateScriptAttributeFromCPP)
55{
56    bool success;
57    String result;
58    success = V8PrivateScriptTest::PrivateScript::stringAttributeForPrivateScriptOnlyAttributeGetter(frame(), privateScriptTest(), &result);
59    EXPECT_TRUE(success);
60    EXPECT_EQ(result, "yyy");
61    success = V8PrivateScriptTest::PrivateScript::stringAttributeForPrivateScriptOnlyAttributeSetter(frame(), privateScriptTest(), "foo");
62    EXPECT_TRUE(success);
63    success = V8PrivateScriptTest::PrivateScript::stringAttributeForPrivateScriptOnlyAttributeGetter(frame(), privateScriptTest(), &result);
64    EXPECT_TRUE(success);
65    EXPECT_EQ(result, "foo");
66}
67
68} // namespace
69
70} // namespace blink
71#endif
72