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.
7 #include "ewk_value_product.h"
8 #include "utc_blink_ewk_base.h"
10 template <typename T, size_t N>
11 size_t ArraySize(T (&)[N]) {
17 const char* test_strings[] = {
20 " \n\n", // white space string
21 "testtesttest", // continous text string
22 "1 2 3 4 5 6 7 8 9 0", // digits
23 "test test test 1 2 3 4 5 6 7 8 9 0" // mixed
26 const char* test_keys[] = {"bool_key", "double_key", "int_key",
27 "string_key", "array_key", "dictionary_key"};
39 bool CompareString(Ewk_Value v1, Ewk_Value v2);
40 bool CompareArray(Ewk_Value v1, Ewk_Value v2);
41 bool CompareDictionary(Ewk_Value v1, Ewk_Value v2);
43 bool Compare(Ewk_Value v1, Ewk_Value v2) {
44 if (ewk_value_type_get(v1) != ewk_value_type_get(v2))
47 if (ewk_value_type_get(v1) == ewk_value_boolean_type_get()) {
49 ewk_value_boolean_value_get(v1, &b1);
50 ewk_value_boolean_value_get(v2, &b2);
52 } else if (ewk_value_type_get(v1) == ewk_value_double_type_get()) {
54 ewk_value_double_value_get(v1, &d1);
55 ewk_value_double_value_get(v2, &d2);
57 } else if (ewk_value_type_get(v1) == ewk_value_int_type_get()) {
59 ewk_value_int_value_get(v1, &i1);
60 ewk_value_int_value_get(v2, &i2);
62 } else if (ewk_value_type_get(v1) == ewk_value_string_type_get()) {
63 return CompareString(v1, v2);
64 } else if (ewk_value_type_get(v1) == ewk_value_array_type_get()) {
65 return CompareArray(v1, v2);
66 } else if (ewk_value_type_get(v1) == ewk_value_dictionary_type_get()) {
67 return CompareDictionary(v1, v2);
73 bool CompareString(Ewk_Value v1, Ewk_Value v2) {
74 if (ewk_value_type_get(v1) != ewk_value_string_type_get() ||
75 ewk_value_type_get(v2) != ewk_value_string_type_get())
78 Eina_Stringshare* s1 = ewk_value_string_value_get(v1);
79 Eina_Stringshare* s2 = ewk_value_string_value_get(v2);
81 strcmp(static_cast<const char*>(s1), static_cast<const char*>(s2)) == 0;
82 eina_stringshare_del(s1);
83 eina_stringshare_del(s2);
87 bool CompareArray(Ewk_Value v1, Ewk_Value v2) {
88 if (ewk_value_type_get(v1) != ewk_value_array_type_get() ||
89 ewk_value_type_get(v2) != ewk_value_array_type_get() ||
90 ewk_value_array_is_mutable(v1) == EINA_FALSE ||
91 ewk_value_array_is_mutable(v2) == EINA_FALSE ||
92 ewk_value_array_count(v1) != ewk_value_array_count(v2))
95 size_t count = ewk_value_array_count(v1);
96 for (size_t i = 0; i < count; ++i) {
98 if (ewk_value_array_get(v1, i, &a1) == EINA_FALSE)
100 if (ewk_value_array_get(v2, i, &a2) == EINA_FALSE) {
104 bool cmp = Compare(a1, a2);
113 bool CompareDictionary(Ewk_Value v1, Ewk_Value v2) {
114 if (ewk_value_type_get(v1) != ewk_value_dictionary_type_get() ||
115 ewk_value_type_get(v2) != ewk_value_dictionary_type_get() ||
116 ewk_value_dictionary_is_mutable(v1) == EINA_FALSE ||
117 ewk_value_dictionary_is_mutable(v2) == EINA_FALSE)
121 if (ewk_value_dictionary_keys(v1, &k) == EINA_FALSE)
124 size_t count = ewk_value_array_count(k);
125 for (size_t i = 0; i < count; ++i) {
127 if (ewk_value_array_get(k, i, &key) == EINA_FALSE)
131 if (ewk_value_dictionary_get(v1, key, &a1) == EINA_FALSE) {
135 if (ewk_value_dictionary_get(v2, key, &a2) == EINA_FALSE) {
141 bool cmp = Compare(a1, a2);