18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License Version 1.1 (the "License"); you may not use this file 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* except in compliance with the License. You may obtain a copy of 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the License at http://www.mozilla.org/NPL/ 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an "AS IS" 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* basis, WITHOUT WARRANTY OF ANY KIND, either expressed 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* or implied. See the License for the specific language governing 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* rights and limitations under the License. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is mozilla.org code. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Communications Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (C) 1998 Netscape Communications Corporation. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* All Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributor(s): pschwartau@netscape.com 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date: 07 February 2001 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Functionality common to RegExp testing - 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------------------------------------------------------------------- 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar MSG_PATTERN = '\nregexp = '; 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar MSG_STRING = '\nstring = '; 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar MSG_EXPECT = '\nExpect: '; 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar MSG_ACTUAL = '\nActual: '; 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ERR_LENGTH = '\nERROR !!! match arrays have different lengths:'; 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ERR_MATCH = '\nERROR !!! regexp failed to give expected match array:'; 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ERR_NO_MATCH = '\nERROR !!! regexp FAILED to match anything !!!'; 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ERR_UNEXP_MATCH = '\nERROR !!! regexp MATCHED when we expected it to fail !!!'; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_LBRACKET = '['; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_RBRACKET = ']'; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_QT_DBL = '"'; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_QT = "'"; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_NL = '\n'; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_COMMA = ','; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CHAR_SPACE = ' '; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar TYPE_STRING = typeof 'abc'; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction testRegExp(statuses, patterns, strings, actualmatches, expectedmatches) 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var status = ''; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var pattern = new RegExp(); 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var string = ''; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var actualmatch = new Array(); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var expectedmatch = new Array(); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var state = ''; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var lActual = -1; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var lExpect = -1; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i=0; i != patterns.length; i++) 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project status = statuses[i]; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pattern = patterns[i]; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project string = strings[i]; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actualmatch=actualmatches[i]; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expectedmatch=expectedmatches[i]; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state = getState(status, pattern, string); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if(actualmatch) 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if(expectedmatch) 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // expectedmatch and actualmatch are arrays - 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project lExpect = expectedmatch.length; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project lActual = actualmatch.length; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (lActual != lExpect) 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportFailure( 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state + ERR_LENGTH + 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_EXPECT + formatArray(expectedmatch) + 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_ACTUAL + formatArray(actualmatch) + 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CHAR_NL 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // OK, the arrays have same length - 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (formatArray(expectedmatch) != formatArray(actualmatch)) 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportFailure( 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state + ERR_MATCH + 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_EXPECT + formatArray(expectedmatch) + 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_ACTUAL + formatArray(actualmatch) + 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CHAR_NL 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else //expectedmatch is null - that is, we did not expect a match - 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportFailure( 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state + ERR_UNEXP_MATCH + 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_EXPECT + expectedmatch + 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_ACTUAL + formatArray(actualmatch) + 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CHAR_NL 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else // actualmatch is null 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (expectedmatch) 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportFailure( 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state + ERR_NO_MATCH + 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_EXPECT + formatArray(expectedmatch) + 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MSG_ACTUAL + actualmatch + 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CHAR_NL 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else // we did not expect a match 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Being ultra-cautious. Presumably expectedmatch===actualmatch===null 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportCompare (expectedmatch, actualmatch, state); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getState(status, pattern, string) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Escape \n's, etc. to make them LITERAL in the presentation string. 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * We don't have to worry about this in |pattern|; such escaping is 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * done automatically by pattern.toString(), invoked implicitly below. 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * One would like to simply do: string = string.replace(/(\s)/g, '\$1'). 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * However, the backreference $1 is not a literal string value, 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * so this method doesn't work. 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Also tried string = string.replace(/(\s)/g, escape('$1')); 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but this just inserts the escape of the literal '$1', i.e. '%241'. 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project string = string.replace(/\n/g, '\\n'); 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project string = string.replace(/\r/g, '\\r'); 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project string = string.replace(/\t/g, '\\t'); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project string = string.replace(/\v/g, '\\v'); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project string = string.replace(/\f/g, '\\f'); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (status + MSG_PATTERN + pattern + MSG_STRING + singleQuote(string)); 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If available, arr.toSource() gives more detail than arr.toString() 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * var arr = Array(1,2,'3'); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * arr.toSource() 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * [1, 2, "3"] 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * arr.toString() 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1,2,3 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * But toSource() doesn't exist in Rhino, so use our own imitation, below - 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction formatArray(arr) 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project try 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return arr.toSource(); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project catch(e) 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return toSource(arr); 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Imitate SpiderMonkey's arr.toSource() method: 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * a) Double-quote each array element that is of string type 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * b) Represent |undefined| and |null| by empty strings 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * c) Delimit elements by a comma + single space 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * d) Do not add delimiter at the end UNLESS the last element is |undefined| 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * e) Add square brackets to the beginning and end of the string 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction toSource(arr) 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var delim = CHAR_COMMA + CHAR_SPACE; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var elt = ''; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var ret = ''; 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var len = arr.length; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i=0; i<len; i++) 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project elt = arr[i]; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch(true) 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case (typeof elt === TYPE_STRING) : 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ret += doubleQuote(elt); 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case (elt === undefined || elt === null) : 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; // add nothing but the delimiter, below - 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ret += elt.toString(); 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ((i < len-1) || (elt === undefined)) 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ret += delim; 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CHAR_LBRACKET + ret + CHAR_RBRACKET; 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction doubleQuote(text) 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CHAR_QT_DBL + text + CHAR_QT_DBL; 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction singleQuote(text) 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CHAR_QT + text + CHAR_QT; 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 231