[M120 Migration][MM] Support W3C EME
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / unittest / utc_blink_ewk_array_value.cpp
1 // Copyright 2016 Samsung Electronics. 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 <cstring>
6
7 #include "ewk_value_product.h"
8 #include "utc_blink_ewk_base.h"
9 #include "utc_blink_ewk_value_compare.h"
10
11 class utc_blink_ewk_array_value : public utc_blink_ewk_base {};
12
13 /*
14 Tested structure layout:
15 [ bool, int, double, string, array[bool, int, double] ]
16 */
17 TEST_F(utc_blink_ewk_array_value, POS_TEST) {
18   // check type
19   Ewk_Value arr = ewk_value_array_new();
20   EXPECT_EQ(ewk_value_type_get(arr), ewk_value_array_type_get());
21   ASSERT_EQ(ewk_value_array_count(arr), 0u);
22   ASSERT_EQ(ewk_value_array_is_mutable(arr), EINA_TRUE);
23
24   // add bool
25   Ewk_Value v = ewk_value_boolean_new(EINA_TRUE);
26   ewk_value_array_append(arr, v);
27   ewk_value_unref(v);
28   ASSERT_EQ(ewk_value_array_count(arr), 1u);
29
30   // add double
31   v = ewk_value_double_new(1.23f);
32   ewk_value_array_append(arr, v);
33   ewk_value_unref(v);
34   ASSERT_EQ(ewk_value_array_count(arr), 2u);
35
36   // add int
37   v = ewk_value_int_new(123);
38   ewk_value_array_append(arr, v);
39   ewk_value_unref(v);
40   ASSERT_EQ(ewk_value_array_count(arr), 3u);
41
42   // add string
43   v = ewk_value_string_new("test_string");
44   ewk_value_array_append(arr, v);
45   ewk_value_unref(v);
46   ASSERT_EQ(ewk_value_array_count(arr), 4u);
47
48   // add another array
49   Ewk_Value arr2 = ewk_value_array_new();
50   // add bool
51   v = ewk_value_boolean_new(EINA_TRUE);
52   ewk_value_array_append(arr2, v);
53   ewk_value_unref(v);
54   ASSERT_EQ(ewk_value_array_count(arr2), 1u);
55   // add double
56   v = ewk_value_double_new(1.23f);
57   ewk_value_array_append(arr2, v);
58   ewk_value_unref(v);
59   ASSERT_EQ(ewk_value_array_count(arr2), 2u);
60   // add int
61   v = ewk_value_int_new(123);
62   ewk_value_array_append(arr2, v);
63   ewk_value_unref(v);
64   ASSERT_EQ(ewk_value_array_count(arr2), 3u);
65
66   // append te second array to array
67   ewk_value_array_append(arr, arr2);
68   ewk_value_unref(arr2);
69   ASSERT_EQ(ewk_value_array_count(arr), 5u);
70
71   // check the values
72   // bool
73   ASSERT_EQ(ewk_value_array_get(arr, 0, &v), EINA_TRUE);
74   EXPECT_EQ(ewk_value_type_get(v), ewk_value_boolean_type_get());
75   Eina_Bool b;
76   ASSERT_EQ(ewk_value_boolean_value_get(v, &b), EINA_TRUE);
77   EXPECT_EQ(b, EINA_TRUE);
78   ewk_value_unref(v);
79
80   // double
81   ASSERT_EQ(ewk_value_array_get(arr, 1, &v), EINA_TRUE);
82   EXPECT_EQ(ewk_value_type_get(v), ewk_value_double_type_get());
83   double d;
84   ASSERT_EQ(ewk_value_double_value_get(v, &d), EINA_TRUE);
85   EXPECT_EQ(d, 1.23f);
86   ewk_value_unref(v);
87
88   // int
89   ASSERT_EQ(ewk_value_array_get(arr, 2, &v), EINA_TRUE);
90   EXPECT_EQ(ewk_value_type_get(v), ewk_value_int_type_get());
91   int i;
92   ASSERT_EQ(ewk_value_int_value_get(v, &i), EINA_TRUE);
93   EXPECT_EQ(i, 123);
94   ewk_value_unref(v);
95
96   // string
97   ASSERT_EQ(ewk_value_array_get(arr, 3, &v), EINA_TRUE);
98   EXPECT_EQ(ewk_value_type_get(v), ewk_value_string_type_get());
99   Eina_Stringshare* str = ewk_value_string_value_get(v);
100   ASSERT_TRUE(str != NULL);
101   EXPECT_STREQ((const char*)str, "test_string");
102   eina_stringshare_del(str);
103   ewk_value_unref(v);
104
105   // array
106   ASSERT_EQ(ewk_value_array_get(arr, 4, &arr2), EINA_TRUE);
107   EXPECT_EQ(ewk_value_type_get(arr2), ewk_value_array_type_get());
108   // check values inside the array
109   // bool
110   ASSERT_EQ(ewk_value_array_get(arr2, 0, &v), EINA_TRUE);
111   EXPECT_EQ(ewk_value_type_get(v), ewk_value_boolean_type_get());
112   ASSERT_EQ(ewk_value_boolean_value_get(v, &b), EINA_TRUE);
113   EXPECT_EQ(b, EINA_TRUE);
114   ewk_value_unref(v);
115   // double
116   ASSERT_EQ(ewk_value_array_get(arr2, 1, &v), EINA_TRUE);
117   EXPECT_EQ(ewk_value_type_get(v), ewk_value_double_type_get());
118   ASSERT_EQ(ewk_value_double_value_get(v, &d), EINA_TRUE);
119   EXPECT_EQ(d, 1.23f);
120   ewk_value_unref(v);
121   // int
122   ASSERT_EQ(ewk_value_array_get(arr2, 2, &v), EINA_TRUE);
123   EXPECT_EQ(ewk_value_type_get(v), ewk_value_int_type_get());
124   ASSERT_EQ(ewk_value_int_value_get(v, &i), EINA_TRUE);
125   EXPECT_EQ(i, 123);
126   ewk_value_unref(v);
127   ewk_value_unref(arr2);
128
129   // remove some values
130   // try to remove out of scope
131   EXPECT_EQ(ewk_value_array_remove(arr, 10), EINA_FALSE);
132   ASSERT_EQ(ewk_value_array_count(arr), 5u);
133
134   // remove bool
135   EXPECT_EQ(ewk_value_array_remove(arr, 0), EINA_TRUE);
136   ASSERT_EQ(ewk_value_array_count(arr), 4u);
137
138   // remove int
139   EXPECT_EQ(ewk_value_array_remove(arr, 1), EINA_TRUE);
140   ASSERT_EQ(ewk_value_array_count(arr), 3u);
141
142   // check values that are left
143   // double
144   ASSERT_EQ(ewk_value_array_get(arr, 0, &v), EINA_TRUE);
145   EXPECT_EQ(ewk_value_type_get(v), ewk_value_double_type_get());
146   ASSERT_EQ(ewk_value_double_value_get(v, &d), EINA_TRUE);
147   EXPECT_EQ(d, 1.23f);
148   ewk_value_unref(v);
149
150   // string
151   ASSERT_EQ(ewk_value_array_get(arr, 1, &v), EINA_TRUE);
152   EXPECT_EQ(ewk_value_type_get(v), ewk_value_string_type_get());
153   str = ewk_value_string_value_get(v);
154   ASSERT_TRUE(str != NULL);
155   EXPECT_STREQ((const char*)str, "test_string");
156   eina_stringshare_del(str);
157   ewk_value_unref(v);
158
159   // try to get value out of scope
160   EXPECT_EQ(ewk_value_array_get(arr, 3, &v), EINA_FALSE);
161
162   ewk_value_unref(arr);
163 }