CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/08/25 23:11:01
Modified files: . : ChangeLog server/asobj : string.cpp testsuite/actionscript.all: String.as testsuite/swfdec: PASSING Log message: * server/asobj/string.cpp (string_split): correctly handle some more corner cases. * testsuite/swfdec/PASSING: string-split-empty-*.swf tests succeed. * testsuite/actionscript.all/String.as: some more testing for String.split CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4103&r2=1.4104 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/string.cpp?cvsroot=gnash&r1=1.34&r2=1.35 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/String.as?cvsroot=gnash&r1=1.19&r2=1.20 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.25&r2=1.26 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.4103 retrieving revision 1.4104 diff -u -b -r1.4103 -r1.4104 --- ChangeLog 25 Aug 2007 21:38:48 -0000 1.4103 +++ ChangeLog 25 Aug 2007 23:11:00 -0000 1.4104 @@ -1,3 +1,11 @@ +2007-08-26 Sandro Santilli <[EMAIL PROTECTED]> + + * server/asobj/string.cpp (string_split): correctly handle some more + corner cases. + * testsuite/swfdec/PASSING: string-split-empty-*.swf tests succeed. + * testsuite/actionscript.all/String.as: some more testing for + String.split + 2007-08-25 Sandro Santilli <[EMAIL PROTECTED]> * testsuite/actionscript.all/toString_valueOf.as: note that any Index: server/asobj/string.cpp =================================================================== RCS file: /sources/gnash/gnash/server/asobj/string.cpp,v retrieving revision 1.34 retrieving revision 1.35 diff -u -b -r1.34 -r1.35 --- server/asobj/string.cpp 1 Aug 2007 15:56:54 -0000 1.34 +++ server/asobj/string.cpp 25 Aug 2007 23:11:00 -0000 1.35 @@ -16,7 +16,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: string.cpp,v 1.34 2007/08/01 15:56:54 strk Exp $ */ +/* $Id: string.cpp,v 1.35 2007/08/25 23:11:00 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -223,7 +223,10 @@ boost::intrusive_ptr<as_array_object> array(new as_array_object()); - if (fn.nargs == 0) { + int SWFVersion = fn.env().get_version(); + + if (fn.nargs == 0) + { val.set_std_string(str); array->push(val); @@ -233,7 +236,7 @@ const std::string& delim = fn.arg(0).to_string(&(fn.env())); // SWF5 didn't support multichar or empty delimiter - if ( fn.env().get_version() < 6 ) + if ( SWFVersion < 6 ) { if ( delim.size() != 1 ) { @@ -245,10 +248,25 @@ size_t max = str.size(); - if (fn.nargs >= 2) { - max = iclamp(fn.arg(1).to_number<size_t>(), 0, str.size()); + if (fn.nargs >= 2) + { + int max_in = fn.arg(1).to_number<int>(); + if ( SWFVersion < 6 && max_in < 1 ) + { + return as_value(array.get()); + } + max = iclamp((size_t)max_in, 0, str.size()); } + if ( str.empty() ) + { + val.set_std_string(str); + array->push(val); + + return as_value(array.get()); + } + + //if (delim == "") { if ( delim.empty() ) { for (unsigned i=0; i <max; i++) { Index: testsuite/actionscript.all/String.as =================================================================== RCS file: /sources/gnash/gnash/testsuite/actionscript.all/String.as,v retrieving revision 1.19 retrieving revision 1.20 diff -u -b -r1.19 -r1.20 --- testsuite/actionscript.all/String.as 1 Jul 2007 10:54:40 -0000 1.19 +++ testsuite/actionscript.all/String.as 25 Aug 2007 23:11:00 -0000 1.20 @@ -16,7 +16,7 @@ // Original author: Mike Carlson - June 19th, 2006 -rcsid="$Id: String.as,v 1.19 2007/07/01 10:54:40 bjacques Exp $"; +rcsid="$Id: String.as,v 1.20 2007/08/25 23:11:00 strk Exp $"; #include "check.as" @@ -75,13 +75,60 @@ check_equals ( a.split("la").length, 1 ); #endif +// TODO: test String.split(delim, limit) [ second arg ] + +primitiveString = ''; +ret = primitiveString.split('x'); +check_equals(typeof(ret), 'object'); +check_equals(ret.length, 1); +check_equals(typeof(ret[0]), 'string'); +check_equals(ret[0], ''); + +ret = primitiveString.split('x', -1); +#if OUTPUT_VERSION < 6 + check_equals(ret.length, 0); +#else // OUTPUT_VERSION >= 6 + check_equals(ret.length, 1); +#endif // OUTPUT_VERSION >= 6 +ret = primitiveString.split('x', 0); +#if OUTPUT_VERSION < 6 + check_equals(ret.length, 0); +#else // OUTPUT_VERSION >= 6 + check_equals(ret.length, 1); +#endif // OUTPUT_VERSION >= 6 +ret = primitiveString.split('x', 1); +check_equals(ret.length, 1); +ret = primitiveString.split('x', 2); +check_equals(ret.length, 1); + +primitiveString = 'abcde'; +ret = primitiveString.split('x'); +check_equals(typeof(ret), 'object'); +check_equals(ret.length, 1); +check_equals(typeof(ret[0]), 'string'); +check_equals(ret[0], 'abcde'); + + +//---------------------------------------- +// Check String.fromCharCode +//----------------------------------------- + // This is the correct usage pattern var b = String.fromCharCode(97,98,99,100); check_equals ( b, "abcd" ); +//------------------------------------------- +// Check String.toUpperCase and toLowerCase +//------------------------------------------- + check_equals ( a.toUpperCase(), "WALLAWALLAWASHINGTON" ); check_equals ( a.toLowerCase(), "wallawallawashington" ); + +//------------------------------------------- +// Check substr / slice / substring +//------------------------------------------- + a = new String("abcdefghijklmnopqrstuvwxyz"); check_equals ( a.substr(5,2), "fg" ); check_equals ( a.substr(5,7), "fghijkl" ); Index: testsuite/swfdec/PASSING =================================================================== RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v retrieving revision 1.25 retrieving revision 1.26 diff -u -b -r1.25 -r1.26 --- testsuite/swfdec/PASSING 6 Aug 2007 20:42:57 -0000 1.25 +++ testsuite/swfdec/PASSING 25 Aug 2007 23:11:01 -0000 1.26 @@ -96,3 +96,6 @@ bitwise-5.swf bitwise-6.swf bitwise-7.swf +string-split-empty-5.swf +string-split-empty-6.swf +string-split-empty-7.swf _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit