1/*
2 * Copyright (C) 2013 Samsung Electronics. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27
28#include "UnitTestUtils/EWK2UnitTestBase.h"
29
30using namespace EWK2UnitTest;
31
32extern EWK2UnitTestEnvironment* environment;
33
34static const char htmlString[] = "<html><head><title>Foo</title></head><body style='background-color: red'><script>document.title=window.getComputedStyle(document.body, null).getPropertyValue('background-color')</script>HELLO</body></html>";
35static const char userStyleSheet[] = "body { background-color: green !important; }";
36static const char greenInRGB[] = "rgb(0, 128, 0)";
37static const char redInRGB[] = "rgb(255, 0, 0)";
38
39TEST_F(EWK2UnitTestBase, ewk_page_group)
40{
41    Evas_Smart* smart = evas_smart_class_new(&(ewkViewClass()->sc));
42    Ewk_Page_Group* pageGroup = ewk_page_group_create("test");
43    ASSERT_TRUE(pageGroup);
44
45    Evas_Object* newWebView = ewk_view_smart_add(canvas(), smart, ewk_context_default_get(), pageGroup);
46    setWebView(newWebView);
47
48    ASSERT_EQ(pageGroup, ewk_view_page_group_get(newWebView));
49    ewk_object_unref(pageGroup);
50}
51
52TEST_F(EWK2UnitTestBase, ewk_page_group_settings_get)
53{
54    Ewk_Page_Group* pageGroup = ewk_view_page_group_get(webView());
55    Ewk_Settings* settings = ewk_page_group_settings_get(pageGroup);
56    ASSERT_TRUE(settings);
57    ASSERT_EQ(settings, ewk_page_group_settings_get(pageGroup));
58
59    Evas_Object* newWebView = ewk_view_add(canvas());
60    Ewk_Page_Group* newPageGroup = ewk_view_page_group_get(newWebView);
61    ASSERT_NE(settings, ewk_page_group_settings_get(newPageGroup));
62}
63
64TEST_F(EWK2UnitTestBase, ewk_page_group_user_style_sheet_add_before_creating_view)
65{
66    Evas_Smart* smart = evas_smart_class_new(&(ewkViewClass()->sc));
67    Ewk_Page_Group* pageGroup = ewk_page_group_create("test");
68    ASSERT_TRUE(pageGroup);
69
70    // Add a user style sheet to the page group before creating a view.
71    ewk_page_group_user_style_sheet_add(pageGroup, userStyleSheet, 0, 0, 0, true);
72
73    // Create a new web view with this page group.
74    Evas_Object* newWebView = ewk_view_smart_add(canvas(), smart, ewk_context_default_get(), pageGroup);
75    setWebView(newWebView);
76
77    ewk_object_unref(pageGroup);
78    ewk_view_theme_set(webView(), environment->defaultTheme());
79    evas_object_resize(webView(), environment->defaultWidth(), environment->defaultHeight());
80    evas_object_show(webView());
81    evas_object_focus_set(webView(), true);
82
83    ewk_view_html_string_load(webView(), htmlString, 0, 0);
84    ASSERT_TRUE(waitUntilTitleChangedTo(greenInRGB));
85}
86
87TEST_F(EWK2UnitTestBase, ewk_page_group_user_style_sheet_add_after_creating_view)
88{
89    // Add a user style sheet to the page group after creating a view.
90    Ewk_Page_Group* pageGroup = ewk_view_page_group_get(webView());
91    ASSERT_TRUE(pageGroup);
92    ewk_page_group_user_style_sheet_add(pageGroup, userStyleSheet, 0, 0, 0, true);
93
94    ewk_view_html_string_load(webView(), htmlString, 0, 0);
95    ASSERT_TRUE(waitUntilTitleChangedTo(greenInRGB));
96}
97
98TEST_F(EWK2UnitTestBase, ewk_page_group_user_style_sheets_remove_all)
99{
100    Evas_Smart* smart = evas_smart_class_new(&(ewkViewClass()->sc));
101    Ewk_Page_Group* pageGroup = ewk_page_group_create("test");
102    ASSERT_TRUE(pageGroup);
103
104    // Add a user style sheet to the page group before creating a view.
105    ewk_page_group_user_style_sheet_add(pageGroup, userStyleSheet, 0, 0, 0, true);
106
107    // Create a new web view with this page group.
108    Evas_Object* newWebView = ewk_view_smart_add(canvas(), smart, ewk_context_default_get(), pageGroup);
109    setWebView(newWebView);
110
111    ewk_object_unref(pageGroup);
112    ewk_view_theme_set(webView(), environment->defaultTheme());
113    evas_object_resize(webView(), environment->defaultWidth(), environment->defaultHeight());
114    evas_object_show(webView());
115    evas_object_focus_set(webView(), true);
116
117    ewk_view_html_string_load(webView(), htmlString, 0, 0);
118
119    // Remove all user style sheets in the page group.
120    ewk_page_group_user_style_sheets_remove_all(ewk_view_page_group_get(webView()));
121    ASSERT_TRUE(waitUntilTitleChangedTo(redInRGB));
122
123    // Add a user style sheet to the page group after creating a view.
124    pageGroup = ewk_view_page_group_get(webView());
125    ewk_page_group_user_style_sheet_add(pageGroup, userStyleSheet, 0, 0, 0, true);
126    ewk_view_html_string_load(webView(), htmlString, 0, 0);
127
128    // Remove all user style sheets in the page group.
129    ewk_page_group_user_style_sheets_remove_all(ewk_view_page_group_get(webView()));
130    ASSERT_TRUE(waitUntilTitleChangedTo(redInRGB));
131}
132