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