Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / remoting / webapp / crd / js / typecheck.js
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 /**
6  * Get the |key| attribute in the given |dict| and verify that it is an
7  * array value.
8  *
9  * If the attribute is not an array, then an exception will be thrown unless
10  * a default value is specified in |opt_default|.
11  *
12  * @param {Object.<string,*>} dict The dictionary containing the |key|
13  * @param {string} key The key to typecheck in the |dict|.
14  * @param {Array=} opt_default The value to return if the key is not a bool.
15  * @return {Array} The |key| attribute value as an object.
16  */
17 function getArrayAttr(dict, key, opt_default) {
18   var value = /** @type {Array} */ (dict[key]);
19   if (!(value instanceof Array)) {
20     if (opt_default === undefined) {
21       throw 'Invalid data type for ' + key +
22           ' (expected: array, actual: ' + typeof value + ')';
23     } else {
24       return opt_default;
25     }
26   }
27   return value;
28 }
29
30 /**
31  * Get the |key| attribute in the given |dict| and verify that it is a
32  * boolean value.
33  *
34  * If the attribute is not a boolean, then an exception will be thrown unless
35  * a default value is specified in |opt_default|.
36  *
37  * @param {Object.<string,*>} dict The dictionary containing the |key|
38  * @param {string} key The key to typecheck in the |dict|.
39  * @param {boolean=} opt_default The value to return if the key is not a bool.
40  * @return {boolean} The |key| attribute value as a boolean.
41  */
42 function getBooleanAttr(dict, key, opt_default) {
43   var value = /** @type {boolean} */ (dict[key]);
44   if (typeof value != 'boolean') {
45     if (opt_default === undefined) {
46       throw 'Invalid data type for ' + key +
47           ' (expected: boolean, actual: ' + typeof value + ')';
48     } else {
49       return opt_default;
50     }
51   }
52   return value;
53 }
54
55 /**
56  * Get the |key| attribute in the given |dict| and verify that it is a
57  * number value.
58  *
59  * If the attribute is not a number, then an exception will be thrown unless
60  * a default value is specified in |opt_default|.
61  *
62  * @param {Object.<string,*>} dict The dictionary containing the |key|
63  * @param {string} key The key to typecheck in the |dict|.
64  * @param {number=} opt_default The value to return if the key is not a number.
65  * @return {number} The |key| attribute value as a number.
66  */
67 function getNumberAttr(dict, key, opt_default) {
68   var value = /** @type {number} */(dict[key]);
69   if (typeof value != 'number') {
70     if (opt_default === undefined) {
71       throw 'Invalid data type for ' + key +
72           ' (expected: number, actual: ' + typeof value + ')';
73     } else {
74       return opt_default;
75     }
76   }
77   return value;
78 }
79
80 /**
81  * Get the |key| attribute in the given |dict| and verify that it is an
82  * object value.
83  *
84  * If the attribute is not an object, then an exception will be thrown unless
85  * a default value is specified in |opt_default|.
86  *
87  * @param {Object.<string,*>} dict The dictionary containing the |key|
88  * @param {string} key The key to typecheck in the |dict|.
89  * @param {Object=} opt_default The value to return if the key is not a bool.
90  * @return {Object} The |key| attribute value as an object.
91  */
92 function getObjectAttr(dict, key, opt_default) {
93   var value = /** @type {Object} */ (dict[key]);
94   if (typeof value != 'object') {
95     if (opt_default === undefined) {
96       throw 'Invalid data type for ' + key +
97           ' (expected: object, actual: ' + typeof value + ')';
98     } else {
99       return opt_default;
100     }
101   }
102   return value;
103 }
104
105 /**
106  * Get the |key| attribute in the given |dict| and verify that it is a
107  * string value.
108  *
109  * If the attribute is not a string, then an exception will be thrown unless
110  * a default value is specified in |opt_default|.
111  *
112  * @param {Object.<string,*>} dict The dictionary containing the |key|
113  * @param {string} key The key to typecheck in the |dict|.
114  * @param {string=} opt_default The value to return if the key is not a string.
115  * @return {string} The |key| attribute value as a string.
116  */
117 function getStringAttr(dict, key, opt_default) {
118   var value =  /** @type {string} */ (dict[key]);
119   if (typeof value != 'string') {
120     if (opt_default === undefined) {
121       throw 'Invalid data type for ' + key +
122           ' (expected: string, actual: ' + typeof value + ')';
123     } else {
124       return opt_default;
125     }
126   }
127   return value;
128 }
129
130 /**
131  * Return a JSON object parsed from a string.
132  *
133  * If the string cannot be parsed, or does not result in an object, then an
134  * exception will be thrown.
135  *
136  * @param {string} jsonString The JSON string to parse.
137  * @return {Object} The JSON object created from the |jsonString|.
138  */
139 function getJsonObjectFromString(jsonString) {
140   var value = /** @type {Object} */ JSON.parse(jsonString);
141   if (typeof value != 'object') {
142     throw 'Invalid data type (expected: Object, actual: ' + typeof value + ')';
143   }
144   return value;
145 }