Sandro Santilli
2017-03-07 13:32:02 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnash".
The branch, master has been updated
via bed373ff164acbe8ac56ee340714ed00ce1c3aca (commit)
via 2807c76a97eeb1059a4ace49caa42ac604405795 (commit)
via 694de7113c1561a7616511f711de2ffbcdd153e9 (commit)
via 5dcfebdbda43c7ff73984dd384a25eceedf18944 (commit)
via 836df7f932f192d536fb56df77978f80c6c37530 (commit)
via 76ac22da4dd7c167b6b68083d87b4f5e79220dad (commit)
from 144e0827072b746b2bedebe39ca8a7e0fb43a455 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=bed373ff164acbe8ac56ee340714ed00ce1c3aca
commit bed373ff164acbe8ac56ee340714ed00ce1c3aca
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:14:29 2017 +0100
Add automated tests on unconventional target values in getURL().
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/.gitignore b/.gitignore
index 5ebc15b..ea49f31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -138,6 +138,7 @@ testsuite/misc-ming.all/*.swf
testsuite/misc-ming.all/extgetvariable_testrunner_v*
testsuite/misc-ming.all/hostcmd_testrunner_v*
testsuite/misc-ming.all/hostcmd_htmltest_v*.html
+testsuite/misc-ming.all/hostcmd-geturl_testrunner_v*
testsuite/misc-ming.all/XMLSocketTester
testsuite/misc-ming.all/sound/*.swf
testsuite/misc-mtasc.all/pp_*.as
diff --git a/testsuite/misc-ming.all/Makefile.am b/testsuite/misc-ming.all/Makefile.am
index 5ef927b..bea287b 100644
--- a/testsuite/misc-ming.all/Makefile.am
+++ b/testsuite/misc-ming.all/Makefile.am
@@ -35,7 +35,9 @@ DISTCLEANFILES = XMLSocketTester extgetvariable_testrunner_v5 \
hostcmd_testrunner_v6 hostcmd_testrunner_v7 \
hostcmd_testrunner_v8 hostcmd_htmltest_v5.html \
hostcmd_htmltest_v6.html hostcmd_htmltest_v7.html \
- hostcmd_htmltest_v8.html
+ hostcmd_htmltest_v8.html hostcmd-geturl_testrunner_v4 \
+ hostcmd-geturl_testrunner_v5 \ hostcmd-geturl_testrunner_v6 \
+ hostcmd-geturl_testrunner_v7 \ hostcmd-geturl_testrunner_v8
SUBDIRS = . loop loading displaylist_depths action_order register_class \
init_action
@@ -80,7 +82,8 @@ EXTRA_DIST = \
XMLSocketTester.sh \
extgetvariable_testrunner.sh \
hostcmd_testrunner.sh \
- hostcmd_htmltest.sh
+ hostcmd_htmltest.sh \
+ hostcmd-geturl_testrunner.sh
AM_CPPFLAGS = \
-I$(top_srcdir)/libbase \
@@ -246,6 +249,11 @@ check_SCRIPTS = \
hostcmd_htmltest_v6.html \
hostcmd_htmltest_v7.html \
hostcmd_htmltest_v8.html \
+ hostcmd-geturl_testrunner_v4 \
+ hostcmd-geturl_testrunner_v5 \
+ hostcmd-geturl_testrunner_v6 \
+ hostcmd-geturl_testrunner_v7 \
+ hostcmd-geturl_testrunner_v8 \
timeline_var_test-Runner \
place_object_testrunner \
place_object_test2runner \
@@ -1391,6 +1399,51 @@ hostcmd_htmltest_v7.html: hostcmd_htmltest.sh hostcmd_v7.swf
hostcmd_htmltest_v8.html: hostcmd_htmltest.sh hostcmd_v8.swf
sh $(srcdir)/hostcmd_htmltest.sh 8 hostcmd_v8.swf > $@
+hostcmd-geturl_v4.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -c -1 -r 1 -v 4 -DOUTPUT_VERSION=4 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v5.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -c -1 -r 1 -v 5 -DOUTPUT_VERSION=5 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v6.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -r 1 -v 6 -DOUTPUT_VERSION=6 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v7.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -r 1 -v 7 -DOUTPUT_VERSION=7 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v8.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -r 1 -v 8 -DOUTPUT_VERSION=8 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_testrunner_v4: hostcmd-geturl_testrunner.sh hostcmd-geturl_v4.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 4 hostcmd-geturl_v4.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v5: hostcmd-geturl_testrunner.sh hostcmd-geturl_v5.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 5 hostcmd-geturl_v5.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v6: hostcmd-geturl_testrunner.sh hostcmd-geturl_v6.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 6 hostcmd-geturl_v6.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v7: hostcmd-geturl_testrunner.sh hostcmd-geturl_v7.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 7 hostcmd-geturl_v7.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v8: hostcmd-geturl_testrunner.sh hostcmd-geturl_v8.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 8 hostcmd-geturl_v8.swf > $@
+ chmod 755 $@
+
GradientFillTest.swf: GradientFillTest.as
$(MAKESWF) $(MAKESWF_FLAGS) -v 8 -r 1 -o $@ $(srcdir)/empty.as $(srcdir)/GradientFillTest.as
@@ -1662,6 +1715,11 @@ TEST_CASES = \
hostcmd_testrunner_v6 \
hostcmd_testrunner_v7 \
hostcmd_testrunner_v8 \
+ hostcmd-geturl_testrunner_v4 \
+ hostcmd-geturl_testrunner_v5 \
+ hostcmd-geturl_testrunner_v6 \
+ hostcmd-geturl_testrunner_v7 \
+ hostcmd-geturl_testrunner_v8 \
DrawingApiTestRunner \
TextSnapshotTest-Runner \
reverse_execute_PlaceObject2_test1runner \
diff --git a/testsuite/misc-ming.all/hostcmd-geturl.as b/testsuite/misc-ming.all/hostcmd-geturl.as
new file mode 100644
index 0000000..f8e1f54
--- /dev/null
+++ b/testsuite/misc-ming.all/hostcmd-geturl.as
@@ -0,0 +1,51 @@
+// hostcmd-geturl.as - getURL()/MovieClip.getURL() target tests
+//
+// Copyright (C) 2017 Free Software Foundation, Inc.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+//
+// Note:
+// This SWF file does not run any test by itself as this is a test on
+// plugin's host interface.
+//
+// Original author: Nutchanon Wetchasit <***@gmail.com>
+//
+
+// Once this Flash movie is run, it will issue `getURL()` call to host
+// container via a built-in `getURL(url,target)` function and
+// via `MovieClip.getURL(url,target)` with unconventional `target` values;
+// each issued call will be checked for correctness by the emulated
+// host container.
+//
+// In real browser environment, this test will not run in a useful manner
+// as the early `getURL()` call will redirect test page to other file
+// before the later tests could run.
+
+trace("STARTOFTEST");
+
+getURL("geturl-emptytarget.html", "");
+
+#if OUTPUT_VERSION >= 5
+getURL("geturl-notarget.html");
+getURL("geturl-undeftarget.html", undefined);
+getURL("geturl-nulltarget.html", null);
+
+this.getURL("mcgeturl-emptytarget.html", "");
+this.getURL("mcgeturl-notarget.html");
+this.getURL("mcgeturl-undeftarget.html", undefined);
+this.getURL("mcgeturl-nulltarget.html", null);
+#endif
+
+trace("ENDOFTEST");
diff --git a/testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh b/testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh
new file mode 100644
index 0000000..1b268a5
--- /dev/null
+++ b/testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh
@@ -0,0 +1,262 @@
+#!/bin/sh
+
+#
+# hostcmd-geturl_testrunner.sh - container-emulated getURL()/MovieClip.getURL()
+# target test runner generator
+#
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#
+# Original author: Nutchanon Wetchasit <***@gmail.com>
+#
+# The generated test runner checks Gnash for:
+# * Undefined and null target passing via getURL() and MovieClip.getURL()
+# (bug #50393)
+# <https://savannah.gnu.org/bugs/?50393>
+#
+# Usage:
+# ./hostcmd-geturl_testrunner.sh <builddir> <srcdir> <swfversion> <swf>
+#
+# Generated test runner's exit codes:
+# 0 if tester ran completely
+# non-zero if tester encountered an error
+#
+# Note:
+# The generated test file requires a filesystem that supports named pipes.
+#
+
+# Check for generation parameters
+while getopts "" name
+do
+ case $name in
+ ?)
+ echo "Usage: $0 <builddir> <srcdir> <swfversion> <swf>" >&2
+ exit 1;;
+ esac
+done
+shift $(($OPTIND - 1))
+if [ "$#" -ne 4 ]
+then
+ echo "Usage: $0 <builddir> <srcdir> <swfversion> <swf>" >&2
+ exit 1
+fi
+
+# Load generation parameters
+top_builddir=$1
+shift
+top_srcdir=$1
+shift
+swfversion=$1
+shift
+swf=$1
+
+# Generate the test runner
+echo "#!/bin/sh"
+echo
+
+echo "# Environment variables"
+env | grep '^GNASH' | while read reply
+do
+ echo "export \"${reply}\""
+done
+
+cat << EOF
+
+# Filenames and constants
+LOGFILE=${top_builddir}/testoutlog.\$\$
+PIPE2CONTAINER=${top_builddir}/tocontainer.\$\$
+PIPE2PLAYER=${top_builddir}/toplayer.\$\$
+STARTTIMEOUT=10
+READTIMEOUT=5
+
+# Test counts
+TESTED=0
+FAILED=0
+PASSED=0
+
+# check_equals(\$op1, \$op2, \$msg)
+# Equality checker and counter
+check_equals() {
+ if [ "\$1" = "\$2" ]
+ then
+ echo "PASSED: \$3"
+ PASSED=\`expr "\$PASSED" + 1\`
+ else
+ echo "FAILED: \$3 (\"\$1\" != \"\$2\")"
+ FAILED=\`expr "\$FAILED" + 1\`
+ fi
+ TESTED=\`expr "\$TESTED" + 1\`
+}
+
+# xcheck_equals(\$op1, \$op2, \$msg)
+# Equality checker and counter (for expected failure)
+xcheck_equals() {
+ if [ "\$1" = "\$2" ]
+ then
+ echo "XPASSED: \$3"
+ PASSED=\`expr "\$PASSED" + 1\`
+ else
+ echo "XFAILED: \$3 (\"\$1\" != \"\$2\")"
+ FAILED=\`expr "\$FAILED" + 1\`
+ fi
+ TESTED=\`expr "\$TESTED" + 1\`
+}
+
+# check_totals(\$op, \$msg)
+# Test count checker
+check_totals() {
+ check_equals "\$TESTED" "\$1" "\$2"
+}
+
+# check_error(\$bool, \$msg)
+# Assert \$bool is 0; if not, flag error in the test, and exit
+check_error() {
+ if [ "\$1" -ne 0 ]
+ then
+ echo "ERROR: \$2" >&2
+ exit 1
+ fi
+}
+
+# read_timeout(\$varname, \$timeout)
+# Read one line from standard input, with a specified timeout (in seconds)
+read_timeout() {
+ trap 'trap - USR1; return 142' USR1
+ (sleep "\$2" && kill -USR1 "\$\$" > /dev/null 2>&1) &
+ TIMEOUTPID=\$!
+ read "\$1"
+ READERROR=\$?
+ kill "\$TIMEOUTPID" > /dev/null 2>&1
+ trap - USR1
+ return \$READERROR
+}
+
+# Create required named pipes
+if [ \! -p "\$PIPE2CONTAINER" ]
+then
+ mkfifo "\$PIPE2CONTAINER"
+ check_error "\$?" "Failed to create a named pipe: \$PIPE2CONTAINER"
+fi
+if [ \! -p "\$PIPE2PLAYER" ]
+then
+ mkfifo "\$PIPE2PLAYER"
+ check_error "\$?" "Failed to create a named pipe: \$PIPE2PLAYER"
+fi
+
+# Open player-to-host pipe
+exec 3<> "\$PIPE2CONTAINER"
+check_error \$? "Failed to open a named pipe: \$PIPE2CONTAINER"
+
+# Open host-to-player pipe
+exec 4<> "\$PIPE2PLAYER"
+check_error \$? "Failed to open a named pipe: \$PIPE2PLAYER"
+
+# Start player
+"${top_builddir}/gui/gnash" -r 0 -vv -F 3:4 "${swf}" > "\$LOGFILE" 2>&1 &
+GNASHPID=\$!
+
+# Wait until the SWF code start running, by loop-checking logfile
+STARTCOUNTDOWN=\$STARTTIMEOUT
+while [ \$STARTCOUNTDOWN -gt 0 ]
+do
+ if grep "TRACE: STARTOFTEST" "\$LOGFILE" 2>&1 > /dev/null
+ then
+ break
+ fi
+ sleep 1
+ STARTCOUNTDOWN=\`expr \$STARTCOUNTDOWN - 1\`
+done
+
+[ \$STARTCOUNTDOWN -ne 0 ]
+check_equals \$? 0 "Gnash-side ActionScript code should be successfully started"
+
+#
+# Built-in getURL target tests
+#
+
+# Read for empty-target getURL statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-emptytarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with empty target"
+
+if [ $swfversion -ge 5 ]
+then
+ # Read for no-target getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-notarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with no target"
+
+ if [ $swfversion -ge 7 ]
+ then
+ # Read for undefined-target getURL statement (SWF7-above form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-undeftarget.html</string><string>GET</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with undefined target"
+ else
+ # Read for undefined-target getURL statement (SWF6-below form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-undeftarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with undefined target"
+ fi
+
+ # Read for null-target getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-nulltarget.html</string><string>GET</string><string>null</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with null target"
+
+ #
+ # MovieClip-based getURL() target tests
+ #
+
+ # Read for empty-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" "<invoke name=\"getURL\" returntype=\"xml\"><arguments><string>mcgeturl-emptytarget.html</string><string>GET</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based getURL call with empty target"
+
+ # Read for no-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>mcgeturl-notarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based getURL call with no target"
+
+ # Read for undefined-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>mcgeturl-undeftarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based getURL call with undefined target"
+
+ # Read for null-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" "<invoke name=\"getURL\" returntype=\"xml\"><arguments><string>mcgeturl-nulltarget.html</string><string>GET</string><string>null</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based getURL call with null target"
+fi
+
+# Close pipes
+exec 3<&-
+exec 4<&-
+
+# Force Gnash to exit
+kill \$GNASHPID
+wait \$GNASHPID
+
+# Show player-side output
+exec 5< "\$LOGFILE"
+cat <&5
+exec 5<&-
+
+# Check for total number of test run
+if [ $swfversion -ge 5 ]
+then
+ check_totals "9" "There should be 9 tests run"
+else
+ check_totals "2" "There should be 2 tests run"
+fi
+
+# Remove temporary files
+rm "\$LOGFILE"
+rm "\$PIPE2CONTAINER"
+rm "\$PIPE2PLAYER"
+EOF
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=2807c76a97eeb1059a4ace49caa42ac604405795
commit 2807c76a97eeb1059a4ace49caa42ac604405795
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:14:22 2017 +0100
Make automated FSCommand invocation tests show player-side output.
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 01bc0c7..070a54f 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -344,6 +344,11 @@ exec 4<&-
kill \$GNASHPID
wait \$GNASHPID
+# Show player-side output
+exec 5< "\$LOGFILE"
+cat <&5
+exec 5<&-
+
# Check for total number of test run
check_totals "35" "There should be 35 tests run"
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=694de7113c1561a7616511f711de2ffbcdd153e9
commit 694de7113c1561a7616511f711de2ffbcdd153e9
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:50 2017 +0100
Add automated tests on function-type FSCommand parameter passing.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/testsuite/misc-ming.all/hostcmd.as b/testsuite/misc-ming.all/hostcmd.as
index 0786790..748124c 100644
--- a/testsuite/misc-ming.all/hostcmd.as
+++ b/testsuite/misc-ming.all/hostcmd.as
@@ -36,6 +36,7 @@
var arrayarg;
var objectarg;
var object_customstringarg;
+var functionarg;
trace("STARTOFTEST");
getURL("FSCommand:");
@@ -60,6 +61,10 @@ object_customstringarg.toString = function():String {
return "This is a custom Object.toString()";
};
getURL("FSCommand:object_customstringarg", object_customstringarg);
+functionarg = function() {
+ trace("This code should not run!");
+};
+getURL("FSCommand:functionarg", functionarg);
this.getURL("FSCommand:");
this.getURL("FSCommand:", "This is a string for empty call");
@@ -77,4 +82,5 @@ this.getURL("FSCommand:m_undefinedarg", undefined);
this.getURL("FSCommand:m_arrayarg", arrayarg);
this.getURL("FSCommand:m_objectarg", objectarg);
this.getURL("FSCommand:m_object_customstringarg", object_customstringarg);
+this.getURL("FSCommand:m_functionarg", functionarg);
trace("ENDOFTEST");
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index cdc5216..354b243 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -187,6 +187,7 @@ cat << EOF
var arrayarg_call = 0;
var objectarg_call = 0;
var object_customstringarg_call = 0;
+ var functionarg_call = 0;
var m_noarg_call = 0;
var m_stringarg_call = 0;
var m_weirdstringarg_call = 0;
@@ -201,6 +202,7 @@ cat << EOF
var m_arrayarg_call = 0;
var m_objectarg_call = 0;
var m_object_customstringarg_call = 0;
+ var m_functionarg_call = 0;
function player_DoFSCommand(cmd, arg) {
if("" == cmd) {
@@ -283,6 +285,10 @@ cat << EOF
object_customstringarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of getURL-based FSCommand call should be correctly passed");
+ } else if("functionarg" == cmd) {
+ functionarg_call++;
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with function parameter should pass string-type parameter");
+ check_equals(arg, "[type Function]", "String representation of function parameter of getURL-based FSCommand call should be correctly passed");
} else if("m_noarg" == cmd) {
m_noarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with no parameter should pass string-type parameter");
@@ -342,6 +348,10 @@ cat << EOF
m_object_customstringarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of MovieClip-based FSCommand call should be correctly passed");
+ } else if("m_functionarg" == cmd) {
+ m_functionarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with function parameter should pass string-type parameter");
+ check_equals(arg, "[type Function]", "String representation of function parameter of MovieClip-based FSCommand call should be correctly passed");
} else {
check_error("Unknown FSCommand issued: \"" + cmd + "\" parameter \"" + arg + "\"");
}
@@ -364,6 +374,7 @@ cat << EOF
check_equals(arrayarg_call, 1, "\"arrayarg\" FSCommand should be called for 1 time");
check_equals(objectarg_call, 1, "\"objectarg\" FSCommand should be called for 1 time");
check_equals(object_customstringarg_call, 1, "\"object_customstringarg\" FSCommand should be called for 1 time");
+ check_equals(m_functionarg_call, 1, "\"functionarg\" FSCommand should be called for 1 time");
check_equals(m_noarg_call, 1, "\"m_noarg\" FSCommand should be called for 1 time");
check_equals(m_stringarg_call, 1, "\"m_stringarg\" FSCommand should be called for 1 time");
@@ -379,8 +390,9 @@ cat << EOF
check_equals(m_arrayarg_call, 1, "\"m_arrayarg\" FSCommand should be called for 1 time");
check_equals(m_objectarg_call, 1, "\"m_objectarg\" FSCommand should be called for 1 time");
check_equals(m_object_customstringarg_call, 1, "\"m_object_customstringarg\" FSCommand should be called for 1 time");
+ check_equals(m_functionarg_call, 1, "\"m_functionarg\" FSCommand should be called for 1 time");
- xcheck_totals(93);
+ xcheck_totals(99);
}
setTimeout("verify_flash()",3000);
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 1946203..01bc0c7 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -260,6 +260,10 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
read_timeout LINE \$READTIMEOUT <&3
check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with object parameter bearing custom toString()"
+# Read for function-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>functionarg</string><string>[type Function]</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with function parameter"
+
#
# MovieClip-based FSCommand tests
#
@@ -328,6 +332,10 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
read_timeout LINE \$READTIMEOUT <&3
check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter bearing custom toString()"
+# Read for function-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_functionarg</string><string>[type Function]</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with function parameter"
+
# Close pipes
exec 3<&-
exec 4<&-
@@ -337,7 +345,7 @@ kill \$GNASHPID
wait \$GNASHPID
# Check for total number of test run
-check_totals "33" "There should be 33 tests run"
+check_totals "35" "There should be 35 tests run"
# Remove temporary files
rm "\$LOGFILE"
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=5dcfebdbda43c7ff73984dd384a25eceedf18944
commit 5dcfebdbda43c7ff73984dd384a25eceedf18944
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:44 2017 +0100
Do not treat getURL()'s undefined and null target parameter as empty string.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/libcore/vm/ASHandlers.cpp b/libcore/vm/ASHandlers.cpp
index 073bca5..396c97e 100644
--- a/libcore/vm/ASHandlers.cpp
+++ b/libcore/vm/ASHandlers.cpp
@@ -1,7 +1,7 @@
// ASHandlers.cpp: ActionScript handlers, for Gnash.
//
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-// Free Software Foundation, Inc
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
+// 2015, 2017 Free Software Foundation, Inc
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -3520,14 +3520,10 @@ commonGetURL(as_environment& env, as_value target,
sendVarsMethod = static_cast<MovieClip::VariablesMethod>(method & 3);
}
- std::string target_string;
- if (!target.is_undefined() && !target.is_null()) {
- target_string = target.to_string();
- }
-
VM& vm = getVM(env);
movie_root& m = vm.getRoot();
-
+ std::string target_string = target.to_string(vm.getSWFVersion());
+
// If the url starts with "FSCommand:", then this is
// a message for the host app.
StringNoCaseEqual noCaseCompare;
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index 0fffffd..cdc5216 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -262,11 +262,15 @@ cat << EOF
} else if("nullarg" == cmd) {
nullarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with null parameter should pass string-type parameter");
- xcheck_equals(arg, "null", "getURL-based FSCommand call should pass a correct string representation of null parameter");
+ check_equals(arg, "null", "getURL-based FSCommand call should pass a correct string representation of null parameter");
} else if("undefinedarg" == cmd) {
undefinedarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with undefined parameter should pass string-type parameter");
- xcheck_equals(arg, "undefined", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
+ if($swfversion >= 7) {
+ check_equals(arg, "undefined", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
+ } else {
+ check_equals(arg, "", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
+ }
} else if("arrayarg" == cmd) {
arrayarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with array parameter should pass string-type parameter");
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 6317e04..1946203 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -235,11 +235,18 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
# Read for null-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with null parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with null parameter"
-# Read for undefined-parameter FSCommand statement
-read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+if [ $swfversion -ge 7 ]
+then
+ # Read for undefined-parameter FSCommand statement (SWF7-above form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+else
+ # Read for undefined-parameter FSCommand statement (SWF6-below form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string></string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+fi
# Read for array-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=836df7f932f192d536fb56df77978f80c6c37530
commit 836df7f932f192d536fb56df77978f80c6c37530
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:37 2017 +0100
Treat undefined target parameter of MovieClip.getURL() like empty string.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/libcore/asobj/MovieClip_as.cpp b/libcore/asobj/MovieClip_as.cpp
index 8973066..ab7fc05 100644
--- a/libcore/asobj/MovieClip_as.cpp
+++ b/libcore/asobj/MovieClip_as.cpp
@@ -1092,7 +1092,7 @@ movieclip_getURL(const fn_call& fn)
as_object* movieclip = ensure<ValidThis>(fn);
std::string urlstr;
- std::string target;
+ as_value target;
as_value val;
if (fn.nargs > 2)
@@ -1123,19 +1123,23 @@ movieclip_getURL(const fn_call& fn)
case 3:
// This argument has already been handled.
case 2:
- target = fn.arg(1).to_string();
+ target = fn.arg(1);
case 1:
urlstr = fn.arg(0).to_string();
break;
}
movie_root& m = getRoot(fn);
+ std::string targetstr;
+ if (!target.is_undefined()) {
+ targetstr = target.to_string();
+ }
// If the URL uses "FSCommand:" scheme, it is a message for the player
// or host container.
StringNoCaseEqual noCaseCompare;
if (noCaseCompare(urlstr.substr(0, 10), "FSCommand:")) {
- m.handleFsCommand(urlstr.substr(10), target);
+ m.handleFsCommand(urlstr.substr(10), targetstr);
return as_value();
}
@@ -1149,7 +1153,7 @@ movieclip_getURL(const fn_call& fn)
vars = getURLEncodedVars(*movieclip);
}
- m.getURL(urlstr, target, vars, method);
+ m.getURL(urlstr, targetstr, vars, method);
return as_value();
}
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index 774e5b6..0fffffd 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -325,7 +325,7 @@ cat << EOF
} else if("m_undefinedarg" == cmd) {
m_undefinedarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with undefined parameter should pass string-type parameter");
- xcheck_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
+ check_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
} else if("m_arrayarg" == cmd) {
m_arrayarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with array parameter should pass string-type parameter");
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 509d5a6..6317e04 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -307,7 +307,7 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
# Read for undefined-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
# Read for array-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=76ac22da4dd7c167b6b68083d87b4f5e79220dad
commit 76ac22da4dd7c167b6b68083d87b4f5e79220dad
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:29 2017 +0100
Add parameter type tests on getURL()-based FSCommand.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/testsuite/misc-ming.all/hostcmd.as b/testsuite/misc-ming.all/hostcmd.as
index 1e4689b..0786790 100644
--- a/testsuite/misc-ming.all/hostcmd.as
+++ b/testsuite/misc-ming.all/hostcmd.as
@@ -33,27 +33,48 @@
// in JavaScript (where "*" is the value of `name` attribute on `<object>`
// or `<embed>` tag which the SWF is playing).
+var arrayarg;
+var objectarg;
var object_customstringarg;
trace("STARTOFTEST");
-this.getURL("FSCommand:");
-this.getURL("FSCommand:", "This is a string for empty call");
-this.getURL("FSCommand:noarg");
-this.getURL("FSCommand:stringarg", "This is a string");
-this.getURL("FSCommand:weirdstringarg", "!@#$%^&*()_+-={}|[]\\:\";\'<>?,./~`");
-this.getURL("FSCommand:integerarg", 9876);
-this.getURL("FSCommand:floatarg", 9876.5432);
-this.getURL("FSCommand:infinitearg", Infinity);
-this.getURL("FSCommand:neginfinitearg", -Infinity);
-this.getURL("FSCommand:nanarg", NaN);
-this.getURL("FSCommand:booleanarg", true);
-this.getURL("FSCommand:nullarg", null);
-this.getURL("FSCommand:undefinedarg", undefined);
-this.getURL("FSCommand:arrayarg", new Array("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"));
-this.getURL("FSCommand:objectarg", new Object());
+getURL("FSCommand:");
+getURL("FSCommand:", "This is a string for empty call");
+getURL("FSCommand:noarg");
+getURL("FSCommand:stringarg", "This is a string");
+getURL("FSCommand:weirdstringarg", "!@#$%^&*()_+-={}|[]\\:\";\'<>?,./~`");
+getURL("FSCommand:integerarg", 9876);
+getURL("FSCommand:floatarg", 9876.5432);
+getURL("FSCommand:infinitearg", Infinity);
+getURL("FSCommand:neginfinitearg", -Infinity);
+getURL("FSCommand:nanarg", NaN);
+getURL("FSCommand:booleanarg", true);
+getURL("FSCommand:nullarg", null);
+getURL("FSCommand:undefinedarg",undefined);
+arrayarg = new Array("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog");
+getURL("FSCommand:arrayarg", arrayarg);
+objectarg = new Object();
+getURL("FSCommand:objectarg", objectarg);
object_customstringarg = new Object();
object_customstringarg.toString = function():String {
return "This is a custom Object.toString()";
};
-this.getURL("FSCommand:object_customstringarg", object_customstringarg);
+getURL("FSCommand:object_customstringarg", object_customstringarg);
+
+this.getURL("FSCommand:");
+this.getURL("FSCommand:", "This is a string for empty call");
+this.getURL("FSCommand:m_noarg");
+this.getURL("FSCommand:m_stringarg", "This is a string");
+this.getURL("FSCommand:m_weirdstringarg", "!@#$%^&*()_+-={}|[]\\:\";\'<>?,./~`");
+this.getURL("FSCommand:m_integerarg", 9876);
+this.getURL("FSCommand:m_floatarg", 9876.5432);
+this.getURL("FSCommand:m_infinitearg", Infinity);
+this.getURL("FSCommand:m_neginfinitearg", -Infinity);
+this.getURL("FSCommand:m_nanarg", NaN);
+this.getURL("FSCommand:m_booleanarg", true);
+this.getURL("FSCommand:m_nullarg", null);
+this.getURL("FSCommand:m_undefinedarg", undefined);
+this.getURL("FSCommand:m_arrayarg", arrayarg);
+this.getURL("FSCommand:m_objectarg", objectarg);
+this.getURL("FSCommand:m_object_customstringarg", object_customstringarg);
trace("ENDOFTEST");
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index 2e455a2..774e5b6 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -26,6 +26,8 @@
# The generated test runner checks Gnash (or proprietary player) for:
# * Support of FSCommand call via MovieClip.getURL() (bug #46944)
# <https://savannah.gnu.org/bugs/?46944>
+# * Undefined FSCommand parameter passing via MovieClip.getURL() (bug #50393)
+# <https://savannah.gnu.org/bugs/?50393>
#
# Usage:
# ./hostcmd_htmltest.sh <swfversion> <swf>
@@ -185,14 +187,34 @@ cat << EOF
var arrayarg_call = 0;
var objectarg_call = 0;
var object_customstringarg_call = 0;
+ var m_noarg_call = 0;
+ var m_stringarg_call = 0;
+ var m_weirdstringarg_call = 0;
+ var m_integerarg_call = 0;
+ var m_floatarg_call = 0;
+ var m_infinitearg_call = 0;
+ var m_neginfinitearg_call = 0;
+ var m_nanarg_call = 0;
+ var m_booleanarg_call = 0;
+ var m_nullarg_call = 0;
+ var m_undefinedarg_call = 0;
+ var m_arrayarg_call = 0;
+ var m_objectarg_call = 0;
+ var m_object_customstringarg_call = 0;
function player_DoFSCommand(cmd, arg) {
if("" == cmd) {
noname_call++;
if (noname_call == 1) {
+ check_equals(typeof(arg), "string", "getURL-based no-name FSCommand call with no parameter should pass string-type parameter");
+ check_equals(arg, "", "getURL-based no-name FSCommand call with no-parameter should pass an empty string parameter");
+ } else if(noname_call == 2) {
+ check_equals(typeof(arg), "string", "getURL-based no-name FSCommand call with string parameter should pass string-type parameter");
+ check_equals(arg, "This is a string for empty call", "getURL-based no-name FSCommand call with string parameter should pass a correct string parameter value");
+ } else if(noname_call == 3) {
check_equals(typeof(arg), "string", "MovieClip-based no-name FSCommand call with no parameter should pass string-type parameter");
check_equals(arg, "", "MovieClip-based no-name FSCommand call with no-parameter should pass an empty string parameter");
- } else if(noname_call == 2) {
+ } else if(noname_call == 4) {
check_equals(typeof(arg), "string", "MovieClip-based no-name FSCommand call with string parameter should pass string-type parameter");
check_equals(arg, "This is a string for empty call", "MovieClip-based no-name FSCommand call with string parameter should pass a correct string parameter value");
} else {
@@ -200,61 +222,120 @@ cat << EOF
}
} else if("noarg" == cmd) {
noarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with no parameter should pass string-type parameter");
- check_equals(arg, "", "MovieClip-based FSCommand call with no parameter should pass an empty string parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with no parameter should pass string-type parameter");
+ check_equals(arg, "", "getURL-based FSCommand call with no parameter should pass an empty string parameter value");
} else if("stringarg" == cmd) {
stringarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with string parameter should pass string-type parameter");
- check_equals(arg, "This is a string", "MovieClip-based FSCommand call with string parameter should pass a correct string parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with string parameter should pass string-type parameter");
+ check_equals(arg, "This is a string", "getURL-based FSCommand call with string parameter should pass a correct string parameter value");
} else if("weirdstringarg" == cmd) {
// Currently, this FSCommand won't run under libgnashplugin,
// due to its internal parameter parsing issue.
weirdstringarg_call++;
- xcheck_equals(typeof(arg),"string", "MovieClip-based FSCommand call with string parameter full of symbols should pass string-type parameter");
- xcheck_equals(arg,"!@#\$%^&*()_+-={}|[]\\\\:\";\'<>?,./~\`", "Full-of-symbols string parameter value of MovieClip-based FSCommand call should be passed correctly");
+ xcheck_equals(typeof(arg),"string", "getURL-based FSCommand call with string parameter full of symbols should pass string-type parameter");
+ xcheck_equals(arg,"!@#\$%^&*()_+-={}|[]\\\\:\";\'<>?,./~\`", "Full-of-symbols string parameter value of getURL-based FSCommand call should be passed correctly");
} else if("integerarg" == cmd) {
integerarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with integer parameter should pass string-type parameter");
- check_equals(arg, "9876", "MovieClip-based FSCommand call should pass a correct string representation of integer parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with integer parameter should pass string-type parameter");
+ check_equals(arg, "9876", "getURL-based FSCommand call should pass a correct string representation of integer parameter value");
} else if("floatarg" == cmd) {
floatarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with floating point parameter should pass string-type parameter");
- check_equals(arg, "9876.5432", "MovieClip-based FSCommand call should pass a correct string representation of floating point parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with floating point parameter should pass string-type parameter");
+ check_equals(arg, "9876.5432", "getURL-based FSCommand call should pass a correct string representation of floating point parameter value");
} else if("infinitearg" == cmd) {
infinitearg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with infinity parameter should pass string-type parameter");
- check_equals(arg, "Infinity", "MovieClip-based FSCommand call should pass a correct string representation of infinity parameter");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with infinity parameter should pass string-type parameter");
+ check_equals(arg, "Infinity", "getURL-based FSCommand call should pass a correct string representation of infinity parameter");
} else if("neginfinitearg" == cmd) {
neginfinitearg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with negative infinity parameter should pass string-type parameter");
- check_equals(arg, "-Infinity", "MovieClip-based FSCommand call should pass a correct string representation of negative infinity parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with negative infinity parameter should pass string-type parameter");
+ check_equals(arg, "-Infinity", "getURL-based FSCommand call should pass a correct string representation of negative infinity parameter value");
} else if("nanarg" == cmd) {
nanarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with not-a-number parameter should pass string-type parameter");
- check_equals(arg, "NaN", "MovieClip-based FSCommand call should pass a correct string representation of not-a-number parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with not-a-number parameter should pass string-type parameter");
+ check_equals(arg, "NaN", "getURL-based FSCommand call should pass a correct string representation of not-a-number parameter value");
} else if("booleanarg" == cmd) {
booleanarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with boolean parameter should pass string-type parameter");
- check_equals(arg, "true", "MovieClip-based FSCommand call should pass a correct string representation of boolean parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with boolean parameter should pass string-type parameter");
+ check_equals(arg, "true", "getURL-based FSCommand call should pass a correct string representation of boolean parameter value");
} else if("nullarg" == cmd) {
nullarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with null parameter should pass string-type parameter");
- check_equals(arg, "null", "MovieClip-based FSCommand call should pass a correct string representation of null parameter");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with null parameter should pass string-type parameter");
+ xcheck_equals(arg, "null", "getURL-based FSCommand call should pass a correct string representation of null parameter");
} else if("undefinedarg" == cmd) {
undefinedarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with undefined parameter should pass string-type parameter");
- xcheck_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with undefined parameter should pass string-type parameter");
+ xcheck_equals(arg, "undefined", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
} else if("arrayarg" == cmd) {
arrayarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with array parameter should pass string-type parameter");
- check_equals(arg, "The,quick,brown,fox,jumps,over,the,lazy,dog", "Array parameter value of MovieClip-based FSCommand call should be passed correctly as CSV string");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with array parameter should pass string-type parameter");
+ check_equals(arg, "The,quick,brown,fox,jumps,over,the,lazy,dog", "Array parameter value of getURL-based FSCommand call should be passed correctly as CSV string");
} else if("objectarg" == cmd) {
objectarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter should pass string-type parameter");
- check_equals(arg, "[object Object]", "String representation of Object parameter of MovieClip-based FSCommand call should be correctly passed");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with object parameter should pass string-type parameter");
+ check_equals(arg, "[object Object]", "String representation of object parameter of getURL-based FSCommand call should be correctly passed");
} else if("object_customstringarg" == cmd) {
object_customstringarg_call++;
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
+ check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of getURL-based FSCommand call should be correctly passed");
+ } else if("m_noarg" == cmd) {
+ m_noarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with no parameter should pass string-type parameter");
+ check_equals(arg, "", "MovieClip-based FSCommand call with no parameter should pass an empty string parameter value");
+ } else if("m_stringarg" == cmd) {
+ m_stringarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with string parameter should pass string-type parameter");
+ check_equals(arg, "This is a string", "MovieClip-based FSCommand call with string parameter should pass a correct string parameter value");
+ } else if("m_weirdstringarg" == cmd) {
+ // Currently, this FSCommand won't run under libgnashplugin,
+ // due to its internal parameter parsing issue.
+
+ m_weirdstringarg_call++;
+ xcheck_equals(typeof(arg),"string", "MovieClip-based FSCommand call with string parameter full of symbols should pass string-type parameter");
+ xcheck_equals(arg,"!@#\$%^&*()_+-={}|[]\\\\:\";\'<>?,./~\`", "Full-of-symbols string parameter value of MovieClip-based FSCommand call should be passed correctly");
+ } else if("m_integerarg" == cmd) {
+ m_integerarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with integer parameter should pass string-type parameter");
+ check_equals(arg, "9876", "MovieClip-based FSCommand call should pass a correct string representation of integer parameter value");
+ } else if("m_floatarg" == cmd) {
+ m_floatarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with floating point parameter should pass string-type parameter");
+ check_equals(arg, "9876.5432", "MovieClip-based FSCommand call should pass a correct string representation of floating point parameter value");
+ } else if("m_infinitearg" == cmd) {
+ m_infinitearg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with infinity parameter should pass string-type parameter");
+ check_equals(arg, "Infinity", "MovieClip-based FSCommand call should pass a correct string representation of infinity parameter");
+ } else if("m_neginfinitearg" == cmd) {
+ m_neginfinitearg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with negative infinity parameter should pass string-type parameter");
+ check_equals(arg, "-Infinity", "MovieClip-based FSCommand call should pass a correct string representation of negative infinity parameter value");
+ } else if("m_nanarg" == cmd) {
+ m_nanarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with not-a-number parameter should pass string-type parameter");
+ check_equals(arg, "NaN", "MovieClip-based FSCommand call should pass a correct string representation of not-a-number parameter value");
+ } else if("m_booleanarg" == cmd) {
+ m_booleanarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with boolean parameter should pass string-type parameter");
+ check_equals(arg, "true", "MovieClip-based FSCommand call should pass a correct string representation of boolean parameter value");
+ } else if("m_nullarg" == cmd) {
+ m_nullarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with null parameter should pass string-type parameter");
+ check_equals(arg, "null", "MovieClip-based FSCommand call should pass a correct string representation of null parameter");
+ } else if("m_undefinedarg" == cmd) {
+ m_undefinedarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with undefined parameter should pass string-type parameter");
+ xcheck_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
+ } else if("m_arrayarg" == cmd) {
+ m_arrayarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with array parameter should pass string-type parameter");
+ check_equals(arg, "The,quick,brown,fox,jumps,over,the,lazy,dog", "Array parameter value of MovieClip-based FSCommand call should be passed correctly as CSV string");
+ } else if("m_objectarg" == cmd) {
+ m_objectarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter should pass string-type parameter");
+ check_equals(arg, "[object Object]", "String representation of object parameter of MovieClip-based FSCommand call should be correctly passed");
+ } else if("m_object_customstringarg" == cmd) {
+ m_object_customstringarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of MovieClip-based FSCommand call should be correctly passed");
} else {
@@ -263,7 +344,8 @@ cat << EOF
}
function verify_flash() {
- check_equals(noname_call, 2, "No-name FSCommand should be called for 2 times");
+ check_equals(noname_call, 4, "No-name FSCommand should be called for 4 times");
+
check_equals(noarg_call, 1, "\"noarg\" FSCommand should be called for 1 time");
check_equals(stringarg_call, 1, "\"stringarg\" FSCommand should be called for 1 time");
xcheck_equals(weirdstringarg_call, 1, "\"weirdstringarg\" FSCommand should be called for 1 time");
@@ -279,7 +361,22 @@ cat << EOF
check_equals(objectarg_call, 1, "\"objectarg\" FSCommand should be called for 1 time");
check_equals(object_customstringarg_call, 1, "\"object_customstringarg\" FSCommand should be called for 1 time");
- xcheck_totals(47);
+ check_equals(m_noarg_call, 1, "\"m_noarg\" FSCommand should be called for 1 time");
+ check_equals(m_stringarg_call, 1, "\"m_stringarg\" FSCommand should be called for 1 time");
+ xcheck_equals(m_weirdstringarg_call, 1, "\"m_weirdstringarg\" FSCommand should be called for 1 time");
+ check_equals(m_integerarg_call, 1, "\"m_integerarg\" FSCommand should be called for 1 time");
+ check_equals(m_floatarg_call, 1, "\"m_floatarg\" FSCommand should be called for 1 time");
+ check_equals(m_infinitearg_call, 1, "\"m_infinitearg\" FSCommand should be called for 1 time");
+ check_equals(m_neginfinitearg_call, 1, "\"m_neginfinitearg\" FSCommand should be called for 1 time");
+ check_equals(m_nanarg_call, 1, "\"m_nanarg\" FSCommand should be called for 1 time");
+ check_equals(m_booleanarg_call, 1, "\"m_booleanarg\" FSCommand should be called for 1 time");
+ check_equals(m_nullarg_call, 1, "\"m_nullarg\" FSCommand should be called for 1 time");
+ check_equals(m_undefinedarg_call, 1, "\"m_undefinedarg\" FSCommand should be called for 1 time");
+ check_equals(m_arrayarg_call, 1, "\"m_arrayarg\" FSCommand should be called for 1 time");
+ check_equals(m_objectarg_call, 1, "\"m_objectarg\" FSCommand should be called for 1 time");
+ check_equals(m_object_customstringarg_call, 1, "\"m_object_customstringarg\" FSCommand should be called for 1 time");
+
+ xcheck_totals(93);
}
setTimeout("verify_flash()",3000);
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 3b36f2d..509d5a6 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -26,6 +26,8 @@
# The generated test runner checks Gnash for:
# * Support of FSCommand call via MovieClip.getURL() (bug #46944)
# <https://savannah.gnu.org/bugs/?46944>
+# * Undefined FSCommand parameter passing via MovieClip.getURL() (bug #50393)
+# <https://savannah.gnu.org/bugs/?50393>
#
# Usage:
# ./hostcmd_testrunner.sh <builddir> <srcdir> <swfversion> <swf>
@@ -79,6 +81,7 @@ cat << EOF
LOGFILE=${top_builddir}/testoutlog.\$\$
PIPE2CONTAINER=${top_builddir}/tocontainer.\$\$
PIPE2PLAYER=${top_builddir}/toplayer.\$\$
+STARTTIMEOUT=10
READTIMEOUT=5
# Test counts
@@ -168,7 +171,7 @@ check_error \$? "Failed to open a named pipe: \$PIPE2PLAYER"
GNASHPID=\$!
# Wait until the SWF code start running, by loop-checking logfile
-STARTCOUNTDOWN=\$READTIMEOUT
+STARTCOUNTDOWN=\$STARTTIMEOUT
while [ \$STARTCOUNTDOWN -gt 0 ]
do
if grep "TRACE: STARTOFTEST" "\$LOGFILE" 2>&1 > /dev/null
@@ -182,6 +185,78 @@ done
[ \$STARTCOUNTDOWN -ne 0 ]
check_equals \$? 0 "Gnash-side ActionScript code should be successfully started"
+#
+# getURL-based FSCommand tests
+#
+
+# Read for no-name no-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string></string><string></string></arguments></invoke>' "Gnash should correctly pass getURL-based no-name FSCommand call with no parameter"
+
+# Read for no-name string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string></string><string>This is a string for empty call</string></arguments></invoke>' "Gnash should correctly pass getURL-based no-name FSCommand call with string parameter"
+
+# Read for no-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>noarg</string><string></string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with no parameter"
+
+# Read for string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>stringarg</string><string>This is a string</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with string parameter"
+
+# Read for full-of-symbols-string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+xcheck_equals "\$LINE" "<invoke name=\"fsCommand\" returntype=\"xml\"><arguments><string>weirdstringarg</string><string>!@#\\\$%^&*()_+-={}|[]:\";'<>?,./~\\\`</string></arguments></invoke>" "Gnash should correctly pass getURL-based FSCommand call with full-of-symbols string parameter"
+
+# Read for integer-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>integerarg</string><string>9876</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with integer parameter"
+
+# Read for floating-point-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>floatarg</string><string>9876.5432</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with floating point parameter"
+
+# Read for infinity-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>infinitearg</string><string>Infinity</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with infinity parameter"
+
+# Read for negative-infinity-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>neginfinitearg</string><string>-Infinity</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with negative infinity parameter"
+
+# Read for not-a-number-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nanarg</string><string>NaN</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with not-a-number parameter"
+
+# Read for boolean-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>booleanarg</string><string>true</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with boolean parameter"
+
+# Read for null-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with null parameter"
+
+# Read for undefined-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+
+# Read for array-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>arrayarg</string><string>The,quick,brown,fox,jumps,over,the,lazy,dog</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with array parameter"
+
+# Read for object-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>objectarg</string><string>[object Object]</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with object parameter"
+
+# Read for object-with-custom-string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with object parameter bearing custom toString()"
+
+#
+# MovieClip-based FSCommand tests
+#
+
# Read for no-name no-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string></string><string></string></arguments></invoke>' "Gnash should correctly pass MovieClip-based no-name FSCommand call with no parameter"
@@ -192,59 +267,59 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
# Read for no-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>noarg</string><string></string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with no parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_noarg</string><string></string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with no parameter"
# Read for string-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>stringarg</string><string>This is a string</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with string parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_stringarg</string><string>This is a string</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with string parameter"
# Read for full-of-symbols-string-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" "<invoke name=\"fsCommand\" returntype=\"xml\"><arguments><string>weirdstringarg</string><string>!@#\\\$%^&*()_+-={}|[]:\";'<>?,./~\\\`</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based FSCommand call with full-of-symbols string parameter"
+xcheck_equals "\$LINE" "<invoke name=\"fsCommand\" returntype=\"xml\"><arguments><string>m_weirdstringarg</string><string>!@#\\\$%^&*()_+-={}|[]:\";'<>?,./~\\\`</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based FSCommand call with full-of-symbols string parameter"
# Read for integer-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>integerarg</string><string>9876</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with integer parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_integerarg</string><string>9876</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with integer parameter"
# Read for floating-point-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>floatarg</string><string>9876.5432</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with floating point parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_floatarg</string><string>9876.5432</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with floating point parameter"
# Read for infinity-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>infinitearg</string><string>Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with infinity parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_infinitearg</string><string>Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with infinity parameter"
# Read for negative-infinity-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>neginfinitearg</string><string>-Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with negative infinity parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_neginfinitearg</string><string>-Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with negative infinity parameter"
# Read for not-a-number-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nanarg</string><string>NaN</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with not-a-number parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_nanarg</string><string>NaN</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with not-a-number parameter"
# Read for boolean-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>booleanarg</string><string>true</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with boolean parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_booleanarg</string><string>true</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with boolean parameter"
# Read for null-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with null parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with null parameter"
# Read for undefined-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
+xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
# Read for array-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>arrayarg</string><string>The,quick,brown,fox,jumps,over,the,lazy,dog</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with array parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_arrayarg</string><string>The,quick,brown,fox,jumps,over,the,lazy,dog</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with array parameter"
# Read for object-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>objectarg</string><string>[object Object]</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_objectarg</string><string>[object Object]</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter"
# Read for object-with-custom-string-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter bearing custom toString()"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter bearing custom toString()"
# Close pipes
exec 3<&-
@@ -255,7 +330,7 @@ kill \$GNASHPID
wait \$GNASHPID
# Check for total number of test run
-check_totals "17" "There should be 17 tests run"
+check_totals "33" "There should be 33 tests run"
# Remove temporary files
rm "\$LOGFILE"
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 1 +
libcore/asobj/MovieClip_as.cpp | 12 +-
libcore/vm/ASHandlers.cpp | 12 +-
testsuite/misc-ming.all/Makefile.am | 62 ++++-
testsuite/misc-ming.all/hostcmd-geturl.as | 51 ++++
.../misc-ming.all/hostcmd-geturl_testrunner.sh | 262 +++++++++++++++++++++
testsuite/misc-ming.all/hostcmd.as | 59 +++--
testsuite/misc-ming.all/hostcmd_htmltest.sh | 171 +++++++++++---
testsuite/misc-ming.all/hostcmd_testrunner.sh | 127 ++++++++--
9 files changed, 682 insertions(+), 75 deletions(-)
create mode 100644 testsuite/misc-ming.all/hostcmd-geturl.as
create mode 100644 testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh
hooks/post-receive
generated because a ref change was pushed to the repository containing
the project "Gnash".
The branch, master has been updated
via bed373ff164acbe8ac56ee340714ed00ce1c3aca (commit)
via 2807c76a97eeb1059a4ace49caa42ac604405795 (commit)
via 694de7113c1561a7616511f711de2ffbcdd153e9 (commit)
via 5dcfebdbda43c7ff73984dd384a25eceedf18944 (commit)
via 836df7f932f192d536fb56df77978f80c6c37530 (commit)
via 76ac22da4dd7c167b6b68083d87b4f5e79220dad (commit)
from 144e0827072b746b2bedebe39ca8a7e0fb43a455 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=bed373ff164acbe8ac56ee340714ed00ce1c3aca
commit bed373ff164acbe8ac56ee340714ed00ce1c3aca
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:14:29 2017 +0100
Add automated tests on unconventional target values in getURL().
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/.gitignore b/.gitignore
index 5ebc15b..ea49f31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -138,6 +138,7 @@ testsuite/misc-ming.all/*.swf
testsuite/misc-ming.all/extgetvariable_testrunner_v*
testsuite/misc-ming.all/hostcmd_testrunner_v*
testsuite/misc-ming.all/hostcmd_htmltest_v*.html
+testsuite/misc-ming.all/hostcmd-geturl_testrunner_v*
testsuite/misc-ming.all/XMLSocketTester
testsuite/misc-ming.all/sound/*.swf
testsuite/misc-mtasc.all/pp_*.as
diff --git a/testsuite/misc-ming.all/Makefile.am b/testsuite/misc-ming.all/Makefile.am
index 5ef927b..bea287b 100644
--- a/testsuite/misc-ming.all/Makefile.am
+++ b/testsuite/misc-ming.all/Makefile.am
@@ -35,7 +35,9 @@ DISTCLEANFILES = XMLSocketTester extgetvariable_testrunner_v5 \
hostcmd_testrunner_v6 hostcmd_testrunner_v7 \
hostcmd_testrunner_v8 hostcmd_htmltest_v5.html \
hostcmd_htmltest_v6.html hostcmd_htmltest_v7.html \
- hostcmd_htmltest_v8.html
+ hostcmd_htmltest_v8.html hostcmd-geturl_testrunner_v4 \
+ hostcmd-geturl_testrunner_v5 \ hostcmd-geturl_testrunner_v6 \
+ hostcmd-geturl_testrunner_v7 \ hostcmd-geturl_testrunner_v8
SUBDIRS = . loop loading displaylist_depths action_order register_class \
init_action
@@ -80,7 +82,8 @@ EXTRA_DIST = \
XMLSocketTester.sh \
extgetvariable_testrunner.sh \
hostcmd_testrunner.sh \
- hostcmd_htmltest.sh
+ hostcmd_htmltest.sh \
+ hostcmd-geturl_testrunner.sh
AM_CPPFLAGS = \
-I$(top_srcdir)/libbase \
@@ -246,6 +249,11 @@ check_SCRIPTS = \
hostcmd_htmltest_v6.html \
hostcmd_htmltest_v7.html \
hostcmd_htmltest_v8.html \
+ hostcmd-geturl_testrunner_v4 \
+ hostcmd-geturl_testrunner_v5 \
+ hostcmd-geturl_testrunner_v6 \
+ hostcmd-geturl_testrunner_v7 \
+ hostcmd-geturl_testrunner_v8 \
timeline_var_test-Runner \
place_object_testrunner \
place_object_test2runner \
@@ -1391,6 +1399,51 @@ hostcmd_htmltest_v7.html: hostcmd_htmltest.sh hostcmd_v7.swf
hostcmd_htmltest_v8.html: hostcmd_htmltest.sh hostcmd_v8.swf
sh $(srcdir)/hostcmd_htmltest.sh 8 hostcmd_v8.swf > $@
+hostcmd-geturl_v4.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -c -1 -r 1 -v 4 -DOUTPUT_VERSION=4 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v5.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -c -1 -r 1 -v 5 -DOUTPUT_VERSION=5 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v6.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -r 1 -v 6 -DOUTPUT_VERSION=6 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v7.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -r 1 -v 7 -DOUTPUT_VERSION=7 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_v8.swf: hostcmd-geturl.as
+ $(MAKESWF) $(MAKESWF_FLAGS) -r 1 -v 8 -DOUTPUT_VERSION=8 -o $@ \
+ $(srcdir)/hostcmd-geturl.as
+
+hostcmd-geturl_testrunner_v4: hostcmd-geturl_testrunner.sh hostcmd-geturl_v4.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 4 hostcmd-geturl_v4.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v5: hostcmd-geturl_testrunner.sh hostcmd-geturl_v5.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 5 hostcmd-geturl_v5.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v6: hostcmd-geturl_testrunner.sh hostcmd-geturl_v6.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 6 hostcmd-geturl_v6.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v7: hostcmd-geturl_testrunner.sh hostcmd-geturl_v7.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 7 hostcmd-geturl_v7.swf > $@
+ chmod 755 $@
+
+hostcmd-geturl_testrunner_v8: hostcmd-geturl_testrunner.sh hostcmd-geturl_v8.swf
+ sh $(srcdir)/hostcmd-geturl_testrunner.sh $(top_builddir) \
+ $(top_srcdir) 8 hostcmd-geturl_v8.swf > $@
+ chmod 755 $@
+
GradientFillTest.swf: GradientFillTest.as
$(MAKESWF) $(MAKESWF_FLAGS) -v 8 -r 1 -o $@ $(srcdir)/empty.as $(srcdir)/GradientFillTest.as
@@ -1662,6 +1715,11 @@ TEST_CASES = \
hostcmd_testrunner_v6 \
hostcmd_testrunner_v7 \
hostcmd_testrunner_v8 \
+ hostcmd-geturl_testrunner_v4 \
+ hostcmd-geturl_testrunner_v5 \
+ hostcmd-geturl_testrunner_v6 \
+ hostcmd-geturl_testrunner_v7 \
+ hostcmd-geturl_testrunner_v8 \
DrawingApiTestRunner \
TextSnapshotTest-Runner \
reverse_execute_PlaceObject2_test1runner \
diff --git a/testsuite/misc-ming.all/hostcmd-geturl.as b/testsuite/misc-ming.all/hostcmd-geturl.as
new file mode 100644
index 0000000..f8e1f54
--- /dev/null
+++ b/testsuite/misc-ming.all/hostcmd-geturl.as
@@ -0,0 +1,51 @@
+// hostcmd-geturl.as - getURL()/MovieClip.getURL() target tests
+//
+// Copyright (C) 2017 Free Software Foundation, Inc.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+//
+// Note:
+// This SWF file does not run any test by itself as this is a test on
+// plugin's host interface.
+//
+// Original author: Nutchanon Wetchasit <***@gmail.com>
+//
+
+// Once this Flash movie is run, it will issue `getURL()` call to host
+// container via a built-in `getURL(url,target)` function and
+// via `MovieClip.getURL(url,target)` with unconventional `target` values;
+// each issued call will be checked for correctness by the emulated
+// host container.
+//
+// In real browser environment, this test will not run in a useful manner
+// as the early `getURL()` call will redirect test page to other file
+// before the later tests could run.
+
+trace("STARTOFTEST");
+
+getURL("geturl-emptytarget.html", "");
+
+#if OUTPUT_VERSION >= 5
+getURL("geturl-notarget.html");
+getURL("geturl-undeftarget.html", undefined);
+getURL("geturl-nulltarget.html", null);
+
+this.getURL("mcgeturl-emptytarget.html", "");
+this.getURL("mcgeturl-notarget.html");
+this.getURL("mcgeturl-undeftarget.html", undefined);
+this.getURL("mcgeturl-nulltarget.html", null);
+#endif
+
+trace("ENDOFTEST");
diff --git a/testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh b/testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh
new file mode 100644
index 0000000..1b268a5
--- /dev/null
+++ b/testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh
@@ -0,0 +1,262 @@
+#!/bin/sh
+
+#
+# hostcmd-geturl_testrunner.sh - container-emulated getURL()/MovieClip.getURL()
+# target test runner generator
+#
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#
+# Original author: Nutchanon Wetchasit <***@gmail.com>
+#
+# The generated test runner checks Gnash for:
+# * Undefined and null target passing via getURL() and MovieClip.getURL()
+# (bug #50393)
+# <https://savannah.gnu.org/bugs/?50393>
+#
+# Usage:
+# ./hostcmd-geturl_testrunner.sh <builddir> <srcdir> <swfversion> <swf>
+#
+# Generated test runner's exit codes:
+# 0 if tester ran completely
+# non-zero if tester encountered an error
+#
+# Note:
+# The generated test file requires a filesystem that supports named pipes.
+#
+
+# Check for generation parameters
+while getopts "" name
+do
+ case $name in
+ ?)
+ echo "Usage: $0 <builddir> <srcdir> <swfversion> <swf>" >&2
+ exit 1;;
+ esac
+done
+shift $(($OPTIND - 1))
+if [ "$#" -ne 4 ]
+then
+ echo "Usage: $0 <builddir> <srcdir> <swfversion> <swf>" >&2
+ exit 1
+fi
+
+# Load generation parameters
+top_builddir=$1
+shift
+top_srcdir=$1
+shift
+swfversion=$1
+shift
+swf=$1
+
+# Generate the test runner
+echo "#!/bin/sh"
+echo
+
+echo "# Environment variables"
+env | grep '^GNASH' | while read reply
+do
+ echo "export \"${reply}\""
+done
+
+cat << EOF
+
+# Filenames and constants
+LOGFILE=${top_builddir}/testoutlog.\$\$
+PIPE2CONTAINER=${top_builddir}/tocontainer.\$\$
+PIPE2PLAYER=${top_builddir}/toplayer.\$\$
+STARTTIMEOUT=10
+READTIMEOUT=5
+
+# Test counts
+TESTED=0
+FAILED=0
+PASSED=0
+
+# check_equals(\$op1, \$op2, \$msg)
+# Equality checker and counter
+check_equals() {
+ if [ "\$1" = "\$2" ]
+ then
+ echo "PASSED: \$3"
+ PASSED=\`expr "\$PASSED" + 1\`
+ else
+ echo "FAILED: \$3 (\"\$1\" != \"\$2\")"
+ FAILED=\`expr "\$FAILED" + 1\`
+ fi
+ TESTED=\`expr "\$TESTED" + 1\`
+}
+
+# xcheck_equals(\$op1, \$op2, \$msg)
+# Equality checker and counter (for expected failure)
+xcheck_equals() {
+ if [ "\$1" = "\$2" ]
+ then
+ echo "XPASSED: \$3"
+ PASSED=\`expr "\$PASSED" + 1\`
+ else
+ echo "XFAILED: \$3 (\"\$1\" != \"\$2\")"
+ FAILED=\`expr "\$FAILED" + 1\`
+ fi
+ TESTED=\`expr "\$TESTED" + 1\`
+}
+
+# check_totals(\$op, \$msg)
+# Test count checker
+check_totals() {
+ check_equals "\$TESTED" "\$1" "\$2"
+}
+
+# check_error(\$bool, \$msg)
+# Assert \$bool is 0; if not, flag error in the test, and exit
+check_error() {
+ if [ "\$1" -ne 0 ]
+ then
+ echo "ERROR: \$2" >&2
+ exit 1
+ fi
+}
+
+# read_timeout(\$varname, \$timeout)
+# Read one line from standard input, with a specified timeout (in seconds)
+read_timeout() {
+ trap 'trap - USR1; return 142' USR1
+ (sleep "\$2" && kill -USR1 "\$\$" > /dev/null 2>&1) &
+ TIMEOUTPID=\$!
+ read "\$1"
+ READERROR=\$?
+ kill "\$TIMEOUTPID" > /dev/null 2>&1
+ trap - USR1
+ return \$READERROR
+}
+
+# Create required named pipes
+if [ \! -p "\$PIPE2CONTAINER" ]
+then
+ mkfifo "\$PIPE2CONTAINER"
+ check_error "\$?" "Failed to create a named pipe: \$PIPE2CONTAINER"
+fi
+if [ \! -p "\$PIPE2PLAYER" ]
+then
+ mkfifo "\$PIPE2PLAYER"
+ check_error "\$?" "Failed to create a named pipe: \$PIPE2PLAYER"
+fi
+
+# Open player-to-host pipe
+exec 3<> "\$PIPE2CONTAINER"
+check_error \$? "Failed to open a named pipe: \$PIPE2CONTAINER"
+
+# Open host-to-player pipe
+exec 4<> "\$PIPE2PLAYER"
+check_error \$? "Failed to open a named pipe: \$PIPE2PLAYER"
+
+# Start player
+"${top_builddir}/gui/gnash" -r 0 -vv -F 3:4 "${swf}" > "\$LOGFILE" 2>&1 &
+GNASHPID=\$!
+
+# Wait until the SWF code start running, by loop-checking logfile
+STARTCOUNTDOWN=\$STARTTIMEOUT
+while [ \$STARTCOUNTDOWN -gt 0 ]
+do
+ if grep "TRACE: STARTOFTEST" "\$LOGFILE" 2>&1 > /dev/null
+ then
+ break
+ fi
+ sleep 1
+ STARTCOUNTDOWN=\`expr \$STARTCOUNTDOWN - 1\`
+done
+
+[ \$STARTCOUNTDOWN -ne 0 ]
+check_equals \$? 0 "Gnash-side ActionScript code should be successfully started"
+
+#
+# Built-in getURL target tests
+#
+
+# Read for empty-target getURL statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-emptytarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with empty target"
+
+if [ $swfversion -ge 5 ]
+then
+ # Read for no-target getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-notarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with no target"
+
+ if [ $swfversion -ge 7 ]
+ then
+ # Read for undefined-target getURL statement (SWF7-above form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-undeftarget.html</string><string>GET</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with undefined target"
+ else
+ # Read for undefined-target getURL statement (SWF6-below form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-undeftarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with undefined target"
+ fi
+
+ # Read for null-target getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>geturl-nulltarget.html</string><string>GET</string><string>null</string></arguments></invoke>' "Gnash should correctly pass built-in getURL call with null target"
+
+ #
+ # MovieClip-based getURL() target tests
+ #
+
+ # Read for empty-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" "<invoke name=\"getURL\" returntype=\"xml\"><arguments><string>mcgeturl-emptytarget.html</string><string>GET</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based getURL call with empty target"
+
+ # Read for no-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>mcgeturl-notarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based getURL call with no target"
+
+ # Read for undefined-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="getURL" returntype="xml"><arguments><string>mcgeturl-undeftarget.html</string><string>GET</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based getURL call with undefined target"
+
+ # Read for null-target MovieClip-based getURL statement
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" "<invoke name=\"getURL\" returntype=\"xml\"><arguments><string>mcgeturl-nulltarget.html</string><string>GET</string><string>null</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based getURL call with null target"
+fi
+
+# Close pipes
+exec 3<&-
+exec 4<&-
+
+# Force Gnash to exit
+kill \$GNASHPID
+wait \$GNASHPID
+
+# Show player-side output
+exec 5< "\$LOGFILE"
+cat <&5
+exec 5<&-
+
+# Check for total number of test run
+if [ $swfversion -ge 5 ]
+then
+ check_totals "9" "There should be 9 tests run"
+else
+ check_totals "2" "There should be 2 tests run"
+fi
+
+# Remove temporary files
+rm "\$LOGFILE"
+rm "\$PIPE2CONTAINER"
+rm "\$PIPE2PLAYER"
+EOF
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=2807c76a97eeb1059a4ace49caa42ac604405795
commit 2807c76a97eeb1059a4ace49caa42ac604405795
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:14:22 2017 +0100
Make automated FSCommand invocation tests show player-side output.
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 01bc0c7..070a54f 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -344,6 +344,11 @@ exec 4<&-
kill \$GNASHPID
wait \$GNASHPID
+# Show player-side output
+exec 5< "\$LOGFILE"
+cat <&5
+exec 5<&-
+
# Check for total number of test run
check_totals "35" "There should be 35 tests run"
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=694de7113c1561a7616511f711de2ffbcdd153e9
commit 694de7113c1561a7616511f711de2ffbcdd153e9
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:50 2017 +0100
Add automated tests on function-type FSCommand parameter passing.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/testsuite/misc-ming.all/hostcmd.as b/testsuite/misc-ming.all/hostcmd.as
index 0786790..748124c 100644
--- a/testsuite/misc-ming.all/hostcmd.as
+++ b/testsuite/misc-ming.all/hostcmd.as
@@ -36,6 +36,7 @@
var arrayarg;
var objectarg;
var object_customstringarg;
+var functionarg;
trace("STARTOFTEST");
getURL("FSCommand:");
@@ -60,6 +61,10 @@ object_customstringarg.toString = function():String {
return "This is a custom Object.toString()";
};
getURL("FSCommand:object_customstringarg", object_customstringarg);
+functionarg = function() {
+ trace("This code should not run!");
+};
+getURL("FSCommand:functionarg", functionarg);
this.getURL("FSCommand:");
this.getURL("FSCommand:", "This is a string for empty call");
@@ -77,4 +82,5 @@ this.getURL("FSCommand:m_undefinedarg", undefined);
this.getURL("FSCommand:m_arrayarg", arrayarg);
this.getURL("FSCommand:m_objectarg", objectarg);
this.getURL("FSCommand:m_object_customstringarg", object_customstringarg);
+this.getURL("FSCommand:m_functionarg", functionarg);
trace("ENDOFTEST");
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index cdc5216..354b243 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -187,6 +187,7 @@ cat << EOF
var arrayarg_call = 0;
var objectarg_call = 0;
var object_customstringarg_call = 0;
+ var functionarg_call = 0;
var m_noarg_call = 0;
var m_stringarg_call = 0;
var m_weirdstringarg_call = 0;
@@ -201,6 +202,7 @@ cat << EOF
var m_arrayarg_call = 0;
var m_objectarg_call = 0;
var m_object_customstringarg_call = 0;
+ var m_functionarg_call = 0;
function player_DoFSCommand(cmd, arg) {
if("" == cmd) {
@@ -283,6 +285,10 @@ cat << EOF
object_customstringarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of getURL-based FSCommand call should be correctly passed");
+ } else if("functionarg" == cmd) {
+ functionarg_call++;
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with function parameter should pass string-type parameter");
+ check_equals(arg, "[type Function]", "String representation of function parameter of getURL-based FSCommand call should be correctly passed");
} else if("m_noarg" == cmd) {
m_noarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with no parameter should pass string-type parameter");
@@ -342,6 +348,10 @@ cat << EOF
m_object_customstringarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of MovieClip-based FSCommand call should be correctly passed");
+ } else if("m_functionarg" == cmd) {
+ m_functionarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with function parameter should pass string-type parameter");
+ check_equals(arg, "[type Function]", "String representation of function parameter of MovieClip-based FSCommand call should be correctly passed");
} else {
check_error("Unknown FSCommand issued: \"" + cmd + "\" parameter \"" + arg + "\"");
}
@@ -364,6 +374,7 @@ cat << EOF
check_equals(arrayarg_call, 1, "\"arrayarg\" FSCommand should be called for 1 time");
check_equals(objectarg_call, 1, "\"objectarg\" FSCommand should be called for 1 time");
check_equals(object_customstringarg_call, 1, "\"object_customstringarg\" FSCommand should be called for 1 time");
+ check_equals(m_functionarg_call, 1, "\"functionarg\" FSCommand should be called for 1 time");
check_equals(m_noarg_call, 1, "\"m_noarg\" FSCommand should be called for 1 time");
check_equals(m_stringarg_call, 1, "\"m_stringarg\" FSCommand should be called for 1 time");
@@ -379,8 +390,9 @@ cat << EOF
check_equals(m_arrayarg_call, 1, "\"m_arrayarg\" FSCommand should be called for 1 time");
check_equals(m_objectarg_call, 1, "\"m_objectarg\" FSCommand should be called for 1 time");
check_equals(m_object_customstringarg_call, 1, "\"m_object_customstringarg\" FSCommand should be called for 1 time");
+ check_equals(m_functionarg_call, 1, "\"m_functionarg\" FSCommand should be called for 1 time");
- xcheck_totals(93);
+ xcheck_totals(99);
}
setTimeout("verify_flash()",3000);
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 1946203..01bc0c7 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -260,6 +260,10 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
read_timeout LINE \$READTIMEOUT <&3
check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with object parameter bearing custom toString()"
+# Read for function-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>functionarg</string><string>[type Function]</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with function parameter"
+
#
# MovieClip-based FSCommand tests
#
@@ -328,6 +332,10 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
read_timeout LINE \$READTIMEOUT <&3
check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter bearing custom toString()"
+# Read for function-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_functionarg</string><string>[type Function]</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with function parameter"
+
# Close pipes
exec 3<&-
exec 4<&-
@@ -337,7 +345,7 @@ kill \$GNASHPID
wait \$GNASHPID
# Check for total number of test run
-check_totals "33" "There should be 33 tests run"
+check_totals "35" "There should be 35 tests run"
# Remove temporary files
rm "\$LOGFILE"
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=5dcfebdbda43c7ff73984dd384a25eceedf18944
commit 5dcfebdbda43c7ff73984dd384a25eceedf18944
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:44 2017 +0100
Do not treat getURL()'s undefined and null target parameter as empty string.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/libcore/vm/ASHandlers.cpp b/libcore/vm/ASHandlers.cpp
index 073bca5..396c97e 100644
--- a/libcore/vm/ASHandlers.cpp
+++ b/libcore/vm/ASHandlers.cpp
@@ -1,7 +1,7 @@
// ASHandlers.cpp: ActionScript handlers, for Gnash.
//
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-// Free Software Foundation, Inc
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
+// 2015, 2017 Free Software Foundation, Inc
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -3520,14 +3520,10 @@ commonGetURL(as_environment& env, as_value target,
sendVarsMethod = static_cast<MovieClip::VariablesMethod>(method & 3);
}
- std::string target_string;
- if (!target.is_undefined() && !target.is_null()) {
- target_string = target.to_string();
- }
-
VM& vm = getVM(env);
movie_root& m = vm.getRoot();
-
+ std::string target_string = target.to_string(vm.getSWFVersion());
+
// If the url starts with "FSCommand:", then this is
// a message for the host app.
StringNoCaseEqual noCaseCompare;
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index 0fffffd..cdc5216 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -262,11 +262,15 @@ cat << EOF
} else if("nullarg" == cmd) {
nullarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with null parameter should pass string-type parameter");
- xcheck_equals(arg, "null", "getURL-based FSCommand call should pass a correct string representation of null parameter");
+ check_equals(arg, "null", "getURL-based FSCommand call should pass a correct string representation of null parameter");
} else if("undefinedarg" == cmd) {
undefinedarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with undefined parameter should pass string-type parameter");
- xcheck_equals(arg, "undefined", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
+ if($swfversion >= 7) {
+ check_equals(arg, "undefined", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
+ } else {
+ check_equals(arg, "", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
+ }
} else if("arrayarg" == cmd) {
arrayarg_call++;
check_equals(typeof(arg), "string", "getURL-based FSCommand call with array parameter should pass string-type parameter");
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 6317e04..1946203 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -235,11 +235,18 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
# Read for null-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with null parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with null parameter"
-# Read for undefined-parameter FSCommand statement
-read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+if [ $swfversion -ge 7 ]
+then
+ # Read for undefined-parameter FSCommand statement (SWF7-above form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+else
+ # Read for undefined-parameter FSCommand statement (SWF6-below form)
+ read_timeout LINE \$READTIMEOUT <&3
+ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string></string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+fi
# Read for array-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=836df7f932f192d536fb56df77978f80c6c37530
commit 836df7f932f192d536fb56df77978f80c6c37530
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:37 2017 +0100
Treat undefined target parameter of MovieClip.getURL() like empty string.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/libcore/asobj/MovieClip_as.cpp b/libcore/asobj/MovieClip_as.cpp
index 8973066..ab7fc05 100644
--- a/libcore/asobj/MovieClip_as.cpp
+++ b/libcore/asobj/MovieClip_as.cpp
@@ -1092,7 +1092,7 @@ movieclip_getURL(const fn_call& fn)
as_object* movieclip = ensure<ValidThis>(fn);
std::string urlstr;
- std::string target;
+ as_value target;
as_value val;
if (fn.nargs > 2)
@@ -1123,19 +1123,23 @@ movieclip_getURL(const fn_call& fn)
case 3:
// This argument has already been handled.
case 2:
- target = fn.arg(1).to_string();
+ target = fn.arg(1);
case 1:
urlstr = fn.arg(0).to_string();
break;
}
movie_root& m = getRoot(fn);
+ std::string targetstr;
+ if (!target.is_undefined()) {
+ targetstr = target.to_string();
+ }
// If the URL uses "FSCommand:" scheme, it is a message for the player
// or host container.
StringNoCaseEqual noCaseCompare;
if (noCaseCompare(urlstr.substr(0, 10), "FSCommand:")) {
- m.handleFsCommand(urlstr.substr(10), target);
+ m.handleFsCommand(urlstr.substr(10), targetstr);
return as_value();
}
@@ -1149,7 +1153,7 @@ movieclip_getURL(const fn_call& fn)
vars = getURLEncodedVars(*movieclip);
}
- m.getURL(urlstr, target, vars, method);
+ m.getURL(urlstr, targetstr, vars, method);
return as_value();
}
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index 774e5b6..0fffffd 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -325,7 +325,7 @@ cat << EOF
} else if("m_undefinedarg" == cmd) {
m_undefinedarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with undefined parameter should pass string-type parameter");
- xcheck_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
+ check_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
} else if("m_arrayarg" == cmd) {
m_arrayarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with array parameter should pass string-type parameter");
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 509d5a6..6317e04 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -307,7 +307,7 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
# Read for undefined-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
# Read for array-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=76ac22da4dd7c167b6b68083d87b4f5e79220dad
commit 76ac22da4dd7c167b6b68083d87b4f5e79220dad
Author: Nutchanon Wetchasit <***@gmail.com>
Date: Tue Mar 7 12:13:29 2017 +0100
Add parameter type tests on getURL()-based FSCommand.
See bug #50393 <https://savannah.gnu.org/bugs/?50393>
diff --git a/testsuite/misc-ming.all/hostcmd.as b/testsuite/misc-ming.all/hostcmd.as
index 1e4689b..0786790 100644
--- a/testsuite/misc-ming.all/hostcmd.as
+++ b/testsuite/misc-ming.all/hostcmd.as
@@ -33,27 +33,48 @@
// in JavaScript (where "*" is the value of `name` attribute on `<object>`
// or `<embed>` tag which the SWF is playing).
+var arrayarg;
+var objectarg;
var object_customstringarg;
trace("STARTOFTEST");
-this.getURL("FSCommand:");
-this.getURL("FSCommand:", "This is a string for empty call");
-this.getURL("FSCommand:noarg");
-this.getURL("FSCommand:stringarg", "This is a string");
-this.getURL("FSCommand:weirdstringarg", "!@#$%^&*()_+-={}|[]\\:\";\'<>?,./~`");
-this.getURL("FSCommand:integerarg", 9876);
-this.getURL("FSCommand:floatarg", 9876.5432);
-this.getURL("FSCommand:infinitearg", Infinity);
-this.getURL("FSCommand:neginfinitearg", -Infinity);
-this.getURL("FSCommand:nanarg", NaN);
-this.getURL("FSCommand:booleanarg", true);
-this.getURL("FSCommand:nullarg", null);
-this.getURL("FSCommand:undefinedarg", undefined);
-this.getURL("FSCommand:arrayarg", new Array("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"));
-this.getURL("FSCommand:objectarg", new Object());
+getURL("FSCommand:");
+getURL("FSCommand:", "This is a string for empty call");
+getURL("FSCommand:noarg");
+getURL("FSCommand:stringarg", "This is a string");
+getURL("FSCommand:weirdstringarg", "!@#$%^&*()_+-={}|[]\\:\";\'<>?,./~`");
+getURL("FSCommand:integerarg", 9876);
+getURL("FSCommand:floatarg", 9876.5432);
+getURL("FSCommand:infinitearg", Infinity);
+getURL("FSCommand:neginfinitearg", -Infinity);
+getURL("FSCommand:nanarg", NaN);
+getURL("FSCommand:booleanarg", true);
+getURL("FSCommand:nullarg", null);
+getURL("FSCommand:undefinedarg",undefined);
+arrayarg = new Array("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog");
+getURL("FSCommand:arrayarg", arrayarg);
+objectarg = new Object();
+getURL("FSCommand:objectarg", objectarg);
object_customstringarg = new Object();
object_customstringarg.toString = function():String {
return "This is a custom Object.toString()";
};
-this.getURL("FSCommand:object_customstringarg", object_customstringarg);
+getURL("FSCommand:object_customstringarg", object_customstringarg);
+
+this.getURL("FSCommand:");
+this.getURL("FSCommand:", "This is a string for empty call");
+this.getURL("FSCommand:m_noarg");
+this.getURL("FSCommand:m_stringarg", "This is a string");
+this.getURL("FSCommand:m_weirdstringarg", "!@#$%^&*()_+-={}|[]\\:\";\'<>?,./~`");
+this.getURL("FSCommand:m_integerarg", 9876);
+this.getURL("FSCommand:m_floatarg", 9876.5432);
+this.getURL("FSCommand:m_infinitearg", Infinity);
+this.getURL("FSCommand:m_neginfinitearg", -Infinity);
+this.getURL("FSCommand:m_nanarg", NaN);
+this.getURL("FSCommand:m_booleanarg", true);
+this.getURL("FSCommand:m_nullarg", null);
+this.getURL("FSCommand:m_undefinedarg", undefined);
+this.getURL("FSCommand:m_arrayarg", arrayarg);
+this.getURL("FSCommand:m_objectarg", objectarg);
+this.getURL("FSCommand:m_object_customstringarg", object_customstringarg);
trace("ENDOFTEST");
diff --git a/testsuite/misc-ming.all/hostcmd_htmltest.sh b/testsuite/misc-ming.all/hostcmd_htmltest.sh
index 2e455a2..774e5b6 100644
--- a/testsuite/misc-ming.all/hostcmd_htmltest.sh
+++ b/testsuite/misc-ming.all/hostcmd_htmltest.sh
@@ -26,6 +26,8 @@
# The generated test runner checks Gnash (or proprietary player) for:
# * Support of FSCommand call via MovieClip.getURL() (bug #46944)
# <https://savannah.gnu.org/bugs/?46944>
+# * Undefined FSCommand parameter passing via MovieClip.getURL() (bug #50393)
+# <https://savannah.gnu.org/bugs/?50393>
#
# Usage:
# ./hostcmd_htmltest.sh <swfversion> <swf>
@@ -185,14 +187,34 @@ cat << EOF
var arrayarg_call = 0;
var objectarg_call = 0;
var object_customstringarg_call = 0;
+ var m_noarg_call = 0;
+ var m_stringarg_call = 0;
+ var m_weirdstringarg_call = 0;
+ var m_integerarg_call = 0;
+ var m_floatarg_call = 0;
+ var m_infinitearg_call = 0;
+ var m_neginfinitearg_call = 0;
+ var m_nanarg_call = 0;
+ var m_booleanarg_call = 0;
+ var m_nullarg_call = 0;
+ var m_undefinedarg_call = 0;
+ var m_arrayarg_call = 0;
+ var m_objectarg_call = 0;
+ var m_object_customstringarg_call = 0;
function player_DoFSCommand(cmd, arg) {
if("" == cmd) {
noname_call++;
if (noname_call == 1) {
+ check_equals(typeof(arg), "string", "getURL-based no-name FSCommand call with no parameter should pass string-type parameter");
+ check_equals(arg, "", "getURL-based no-name FSCommand call with no-parameter should pass an empty string parameter");
+ } else if(noname_call == 2) {
+ check_equals(typeof(arg), "string", "getURL-based no-name FSCommand call with string parameter should pass string-type parameter");
+ check_equals(arg, "This is a string for empty call", "getURL-based no-name FSCommand call with string parameter should pass a correct string parameter value");
+ } else if(noname_call == 3) {
check_equals(typeof(arg), "string", "MovieClip-based no-name FSCommand call with no parameter should pass string-type parameter");
check_equals(arg, "", "MovieClip-based no-name FSCommand call with no-parameter should pass an empty string parameter");
- } else if(noname_call == 2) {
+ } else if(noname_call == 4) {
check_equals(typeof(arg), "string", "MovieClip-based no-name FSCommand call with string parameter should pass string-type parameter");
check_equals(arg, "This is a string for empty call", "MovieClip-based no-name FSCommand call with string parameter should pass a correct string parameter value");
} else {
@@ -200,61 +222,120 @@ cat << EOF
}
} else if("noarg" == cmd) {
noarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with no parameter should pass string-type parameter");
- check_equals(arg, "", "MovieClip-based FSCommand call with no parameter should pass an empty string parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with no parameter should pass string-type parameter");
+ check_equals(arg, "", "getURL-based FSCommand call with no parameter should pass an empty string parameter value");
} else if("stringarg" == cmd) {
stringarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with string parameter should pass string-type parameter");
- check_equals(arg, "This is a string", "MovieClip-based FSCommand call with string parameter should pass a correct string parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with string parameter should pass string-type parameter");
+ check_equals(arg, "This is a string", "getURL-based FSCommand call with string parameter should pass a correct string parameter value");
} else if("weirdstringarg" == cmd) {
// Currently, this FSCommand won't run under libgnashplugin,
// due to its internal parameter parsing issue.
weirdstringarg_call++;
- xcheck_equals(typeof(arg),"string", "MovieClip-based FSCommand call with string parameter full of symbols should pass string-type parameter");
- xcheck_equals(arg,"!@#\$%^&*()_+-={}|[]\\\\:\";\'<>?,./~\`", "Full-of-symbols string parameter value of MovieClip-based FSCommand call should be passed correctly");
+ xcheck_equals(typeof(arg),"string", "getURL-based FSCommand call with string parameter full of symbols should pass string-type parameter");
+ xcheck_equals(arg,"!@#\$%^&*()_+-={}|[]\\\\:\";\'<>?,./~\`", "Full-of-symbols string parameter value of getURL-based FSCommand call should be passed correctly");
} else if("integerarg" == cmd) {
integerarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with integer parameter should pass string-type parameter");
- check_equals(arg, "9876", "MovieClip-based FSCommand call should pass a correct string representation of integer parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with integer parameter should pass string-type parameter");
+ check_equals(arg, "9876", "getURL-based FSCommand call should pass a correct string representation of integer parameter value");
} else if("floatarg" == cmd) {
floatarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with floating point parameter should pass string-type parameter");
- check_equals(arg, "9876.5432", "MovieClip-based FSCommand call should pass a correct string representation of floating point parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with floating point parameter should pass string-type parameter");
+ check_equals(arg, "9876.5432", "getURL-based FSCommand call should pass a correct string representation of floating point parameter value");
} else if("infinitearg" == cmd) {
infinitearg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with infinity parameter should pass string-type parameter");
- check_equals(arg, "Infinity", "MovieClip-based FSCommand call should pass a correct string representation of infinity parameter");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with infinity parameter should pass string-type parameter");
+ check_equals(arg, "Infinity", "getURL-based FSCommand call should pass a correct string representation of infinity parameter");
} else if("neginfinitearg" == cmd) {
neginfinitearg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with negative infinity parameter should pass string-type parameter");
- check_equals(arg, "-Infinity", "MovieClip-based FSCommand call should pass a correct string representation of negative infinity parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with negative infinity parameter should pass string-type parameter");
+ check_equals(arg, "-Infinity", "getURL-based FSCommand call should pass a correct string representation of negative infinity parameter value");
} else if("nanarg" == cmd) {
nanarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with not-a-number parameter should pass string-type parameter");
- check_equals(arg, "NaN", "MovieClip-based FSCommand call should pass a correct string representation of not-a-number parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with not-a-number parameter should pass string-type parameter");
+ check_equals(arg, "NaN", "getURL-based FSCommand call should pass a correct string representation of not-a-number parameter value");
} else if("booleanarg" == cmd) {
booleanarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with boolean parameter should pass string-type parameter");
- check_equals(arg, "true", "MovieClip-based FSCommand call should pass a correct string representation of boolean parameter value");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with boolean parameter should pass string-type parameter");
+ check_equals(arg, "true", "getURL-based FSCommand call should pass a correct string representation of boolean parameter value");
} else if("nullarg" == cmd) {
nullarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with null parameter should pass string-type parameter");
- check_equals(arg, "null", "MovieClip-based FSCommand call should pass a correct string representation of null parameter");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with null parameter should pass string-type parameter");
+ xcheck_equals(arg, "null", "getURL-based FSCommand call should pass a correct string representation of null parameter");
} else if("undefinedarg" == cmd) {
undefinedarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with undefined parameter should pass string-type parameter");
- xcheck_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with undefined parameter should pass string-type parameter");
+ xcheck_equals(arg, "undefined", "getURL-based FSCommand call should pass a correct string representation of undefined parameter");
} else if("arrayarg" == cmd) {
arrayarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with array parameter should pass string-type parameter");
- check_equals(arg, "The,quick,brown,fox,jumps,over,the,lazy,dog", "Array parameter value of MovieClip-based FSCommand call should be passed correctly as CSV string");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with array parameter should pass string-type parameter");
+ check_equals(arg, "The,quick,brown,fox,jumps,over,the,lazy,dog", "Array parameter value of getURL-based FSCommand call should be passed correctly as CSV string");
} else if("objectarg" == cmd) {
objectarg_call++;
- check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter should pass string-type parameter");
- check_equals(arg, "[object Object]", "String representation of Object parameter of MovieClip-based FSCommand call should be correctly passed");
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with object parameter should pass string-type parameter");
+ check_equals(arg, "[object Object]", "String representation of object parameter of getURL-based FSCommand call should be correctly passed");
} else if("object_customstringarg" == cmd) {
object_customstringarg_call++;
+ check_equals(typeof(arg), "string", "getURL-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
+ check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of getURL-based FSCommand call should be correctly passed");
+ } else if("m_noarg" == cmd) {
+ m_noarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with no parameter should pass string-type parameter");
+ check_equals(arg, "", "MovieClip-based FSCommand call with no parameter should pass an empty string parameter value");
+ } else if("m_stringarg" == cmd) {
+ m_stringarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with string parameter should pass string-type parameter");
+ check_equals(arg, "This is a string", "MovieClip-based FSCommand call with string parameter should pass a correct string parameter value");
+ } else if("m_weirdstringarg" == cmd) {
+ // Currently, this FSCommand won't run under libgnashplugin,
+ // due to its internal parameter parsing issue.
+
+ m_weirdstringarg_call++;
+ xcheck_equals(typeof(arg),"string", "MovieClip-based FSCommand call with string parameter full of symbols should pass string-type parameter");
+ xcheck_equals(arg,"!@#\$%^&*()_+-={}|[]\\\\:\";\'<>?,./~\`", "Full-of-symbols string parameter value of MovieClip-based FSCommand call should be passed correctly");
+ } else if("m_integerarg" == cmd) {
+ m_integerarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with integer parameter should pass string-type parameter");
+ check_equals(arg, "9876", "MovieClip-based FSCommand call should pass a correct string representation of integer parameter value");
+ } else if("m_floatarg" == cmd) {
+ m_floatarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with floating point parameter should pass string-type parameter");
+ check_equals(arg, "9876.5432", "MovieClip-based FSCommand call should pass a correct string representation of floating point parameter value");
+ } else if("m_infinitearg" == cmd) {
+ m_infinitearg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with infinity parameter should pass string-type parameter");
+ check_equals(arg, "Infinity", "MovieClip-based FSCommand call should pass a correct string representation of infinity parameter");
+ } else if("m_neginfinitearg" == cmd) {
+ m_neginfinitearg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with negative infinity parameter should pass string-type parameter");
+ check_equals(arg, "-Infinity", "MovieClip-based FSCommand call should pass a correct string representation of negative infinity parameter value");
+ } else if("m_nanarg" == cmd) {
+ m_nanarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with not-a-number parameter should pass string-type parameter");
+ check_equals(arg, "NaN", "MovieClip-based FSCommand call should pass a correct string representation of not-a-number parameter value");
+ } else if("m_booleanarg" == cmd) {
+ m_booleanarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with boolean parameter should pass string-type parameter");
+ check_equals(arg, "true", "MovieClip-based FSCommand call should pass a correct string representation of boolean parameter value");
+ } else if("m_nullarg" == cmd) {
+ m_nullarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with null parameter should pass string-type parameter");
+ check_equals(arg, "null", "MovieClip-based FSCommand call should pass a correct string representation of null parameter");
+ } else if("m_undefinedarg" == cmd) {
+ m_undefinedarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with undefined parameter should pass string-type parameter");
+ xcheck_equals(arg, "", "MovieClip-based FSCommand call should pass an empty string as a representation of undefined parameter");
+ } else if("m_arrayarg" == cmd) {
+ m_arrayarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with array parameter should pass string-type parameter");
+ check_equals(arg, "The,quick,brown,fox,jumps,over,the,lazy,dog", "Array parameter value of MovieClip-based FSCommand call should be passed correctly as CSV string");
+ } else if("m_objectarg" == cmd) {
+ m_objectarg_call++;
+ check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter should pass string-type parameter");
+ check_equals(arg, "[object Object]", "String representation of object parameter of MovieClip-based FSCommand call should be correctly passed");
+ } else if("m_object_customstringarg" == cmd) {
+ m_object_customstringarg_call++;
check_equals(typeof(arg), "string", "MovieClip-based FSCommand call with object parameter bearing custom toString() should pass string-type parameter");
check_equals(arg, "This is a custom Object.toString()", "Custom string representation of object parameter of MovieClip-based FSCommand call should be correctly passed");
} else {
@@ -263,7 +344,8 @@ cat << EOF
}
function verify_flash() {
- check_equals(noname_call, 2, "No-name FSCommand should be called for 2 times");
+ check_equals(noname_call, 4, "No-name FSCommand should be called for 4 times");
+
check_equals(noarg_call, 1, "\"noarg\" FSCommand should be called for 1 time");
check_equals(stringarg_call, 1, "\"stringarg\" FSCommand should be called for 1 time");
xcheck_equals(weirdstringarg_call, 1, "\"weirdstringarg\" FSCommand should be called for 1 time");
@@ -279,7 +361,22 @@ cat << EOF
check_equals(objectarg_call, 1, "\"objectarg\" FSCommand should be called for 1 time");
check_equals(object_customstringarg_call, 1, "\"object_customstringarg\" FSCommand should be called for 1 time");
- xcheck_totals(47);
+ check_equals(m_noarg_call, 1, "\"m_noarg\" FSCommand should be called for 1 time");
+ check_equals(m_stringarg_call, 1, "\"m_stringarg\" FSCommand should be called for 1 time");
+ xcheck_equals(m_weirdstringarg_call, 1, "\"m_weirdstringarg\" FSCommand should be called for 1 time");
+ check_equals(m_integerarg_call, 1, "\"m_integerarg\" FSCommand should be called for 1 time");
+ check_equals(m_floatarg_call, 1, "\"m_floatarg\" FSCommand should be called for 1 time");
+ check_equals(m_infinitearg_call, 1, "\"m_infinitearg\" FSCommand should be called for 1 time");
+ check_equals(m_neginfinitearg_call, 1, "\"m_neginfinitearg\" FSCommand should be called for 1 time");
+ check_equals(m_nanarg_call, 1, "\"m_nanarg\" FSCommand should be called for 1 time");
+ check_equals(m_booleanarg_call, 1, "\"m_booleanarg\" FSCommand should be called for 1 time");
+ check_equals(m_nullarg_call, 1, "\"m_nullarg\" FSCommand should be called for 1 time");
+ check_equals(m_undefinedarg_call, 1, "\"m_undefinedarg\" FSCommand should be called for 1 time");
+ check_equals(m_arrayarg_call, 1, "\"m_arrayarg\" FSCommand should be called for 1 time");
+ check_equals(m_objectarg_call, 1, "\"m_objectarg\" FSCommand should be called for 1 time");
+ check_equals(m_object_customstringarg_call, 1, "\"m_object_customstringarg\" FSCommand should be called for 1 time");
+
+ xcheck_totals(93);
}
setTimeout("verify_flash()",3000);
diff --git a/testsuite/misc-ming.all/hostcmd_testrunner.sh b/testsuite/misc-ming.all/hostcmd_testrunner.sh
index 3b36f2d..509d5a6 100644
--- a/testsuite/misc-ming.all/hostcmd_testrunner.sh
+++ b/testsuite/misc-ming.all/hostcmd_testrunner.sh
@@ -26,6 +26,8 @@
# The generated test runner checks Gnash for:
# * Support of FSCommand call via MovieClip.getURL() (bug #46944)
# <https://savannah.gnu.org/bugs/?46944>
+# * Undefined FSCommand parameter passing via MovieClip.getURL() (bug #50393)
+# <https://savannah.gnu.org/bugs/?50393>
#
# Usage:
# ./hostcmd_testrunner.sh <builddir> <srcdir> <swfversion> <swf>
@@ -79,6 +81,7 @@ cat << EOF
LOGFILE=${top_builddir}/testoutlog.\$\$
PIPE2CONTAINER=${top_builddir}/tocontainer.\$\$
PIPE2PLAYER=${top_builddir}/toplayer.\$\$
+STARTTIMEOUT=10
READTIMEOUT=5
# Test counts
@@ -168,7 +171,7 @@ check_error \$? "Failed to open a named pipe: \$PIPE2PLAYER"
GNASHPID=\$!
# Wait until the SWF code start running, by loop-checking logfile
-STARTCOUNTDOWN=\$READTIMEOUT
+STARTCOUNTDOWN=\$STARTTIMEOUT
while [ \$STARTCOUNTDOWN -gt 0 ]
do
if grep "TRACE: STARTOFTEST" "\$LOGFILE" 2>&1 > /dev/null
@@ -182,6 +185,78 @@ done
[ \$STARTCOUNTDOWN -ne 0 ]
check_equals \$? 0 "Gnash-side ActionScript code should be successfully started"
+#
+# getURL-based FSCommand tests
+#
+
+# Read for no-name no-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string></string><string></string></arguments></invoke>' "Gnash should correctly pass getURL-based no-name FSCommand call with no parameter"
+
+# Read for no-name string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string></string><string>This is a string for empty call</string></arguments></invoke>' "Gnash should correctly pass getURL-based no-name FSCommand call with string parameter"
+
+# Read for no-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>noarg</string><string></string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with no parameter"
+
+# Read for string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>stringarg</string><string>This is a string</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with string parameter"
+
+# Read for full-of-symbols-string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+xcheck_equals "\$LINE" "<invoke name=\"fsCommand\" returntype=\"xml\"><arguments><string>weirdstringarg</string><string>!@#\\\$%^&*()_+-={}|[]:\";'<>?,./~\\\`</string></arguments></invoke>" "Gnash should correctly pass getURL-based FSCommand call with full-of-symbols string parameter"
+
+# Read for integer-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>integerarg</string><string>9876</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with integer parameter"
+
+# Read for floating-point-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>floatarg</string><string>9876.5432</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with floating point parameter"
+
+# Read for infinity-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>infinitearg</string><string>Infinity</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with infinity parameter"
+
+# Read for negative-infinity-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>neginfinitearg</string><string>-Infinity</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with negative infinity parameter"
+
+# Read for not-a-number-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nanarg</string><string>NaN</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with not-a-number parameter"
+
+# Read for boolean-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>booleanarg</string><string>true</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with boolean parameter"
+
+# Read for null-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with null parameter"
+
+# Read for undefined-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string>undefined</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with undefined parameter"
+
+# Read for array-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>arrayarg</string><string>The,quick,brown,fox,jumps,over,the,lazy,dog</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with array parameter"
+
+# Read for object-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>objectarg</string><string>[object Object]</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with object parameter"
+
+# Read for object-with-custom-string-parameter FSCommand statement
+read_timeout LINE \$READTIMEOUT <&3
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass getURL-based FSCommand call with object parameter bearing custom toString()"
+
+#
+# MovieClip-based FSCommand tests
+#
+
# Read for no-name no-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string></string><string></string></arguments></invoke>' "Gnash should correctly pass MovieClip-based no-name FSCommand call with no parameter"
@@ -192,59 +267,59 @@ check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><str
# Read for no-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>noarg</string><string></string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with no parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_noarg</string><string></string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with no parameter"
# Read for string-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>stringarg</string><string>This is a string</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with string parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_stringarg</string><string>This is a string</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with string parameter"
# Read for full-of-symbols-string-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" "<invoke name=\"fsCommand\" returntype=\"xml\"><arguments><string>weirdstringarg</string><string>!@#\\\$%^&*()_+-={}|[]:\";'<>?,./~\\\`</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based FSCommand call with full-of-symbols string parameter"
+xcheck_equals "\$LINE" "<invoke name=\"fsCommand\" returntype=\"xml\"><arguments><string>m_weirdstringarg</string><string>!@#\\\$%^&*()_+-={}|[]:\";'<>?,./~\\\`</string></arguments></invoke>" "Gnash should correctly pass MovieClip-based FSCommand call with full-of-symbols string parameter"
# Read for integer-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>integerarg</string><string>9876</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with integer parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_integerarg</string><string>9876</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with integer parameter"
# Read for floating-point-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>floatarg</string><string>9876.5432</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with floating point parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_floatarg</string><string>9876.5432</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with floating point parameter"
# Read for infinity-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>infinitearg</string><string>Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with infinity parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_infinitearg</string><string>Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with infinity parameter"
# Read for negative-infinity-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>neginfinitearg</string><string>-Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with negative infinity parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_neginfinitearg</string><string>-Infinity</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with negative infinity parameter"
# Read for not-a-number-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nanarg</string><string>NaN</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with not-a-number parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_nanarg</string><string>NaN</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with not-a-number parameter"
# Read for boolean-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>booleanarg</string><string>true</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with boolean parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_booleanarg</string><string>true</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with boolean parameter"
# Read for null-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with null parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_nullarg</string><string>null</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with null parameter"
# Read for undefined-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
+xcheck_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_undefinedarg</string><string></string></arguments></invoke>' "Gnash should pass undefined parameter of MovieClip-based FSCommand call as empty string"
# Read for array-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>arrayarg</string><string>The,quick,brown,fox,jumps,over,the,lazy,dog</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with array parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_arrayarg</string><string>The,quick,brown,fox,jumps,over,the,lazy,dog</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with array parameter"
# Read for object-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>objectarg</string><string>[object Object]</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_objectarg</string><string>[object Object]</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter"
# Read for object-with-custom-string-parameter FSCommand statement
read_timeout LINE \$READTIMEOUT <&3
-check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter bearing custom toString()"
+check_equals "\$LINE" '<invoke name="fsCommand" returntype="xml"><arguments><string>m_object_customstringarg</string><string>This is a custom Object.toString()</string></arguments></invoke>' "Gnash should correctly pass MovieClip-based FSCommand call with object parameter bearing custom toString()"
# Close pipes
exec 3<&-
@@ -255,7 +330,7 @@ kill \$GNASHPID
wait \$GNASHPID
# Check for total number of test run
-check_totals "17" "There should be 17 tests run"
+check_totals "33" "There should be 33 tests run"
# Remove temporary files
rm "\$LOGFILE"
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 1 +
libcore/asobj/MovieClip_as.cpp | 12 +-
libcore/vm/ASHandlers.cpp | 12 +-
testsuite/misc-ming.all/Makefile.am | 62 ++++-
testsuite/misc-ming.all/hostcmd-geturl.as | 51 ++++
.../misc-ming.all/hostcmd-geturl_testrunner.sh | 262 +++++++++++++++++++++
testsuite/misc-ming.all/hostcmd.as | 59 +++--
testsuite/misc-ming.all/hostcmd_htmltest.sh | 171 +++++++++++---
testsuite/misc-ming.all/hostcmd_testrunner.sh | 127 ++++++++--
9 files changed, 682 insertions(+), 75 deletions(-)
create mode 100644 testsuite/misc-ming.all/hostcmd-geturl.as
create mode 100644 testsuite/misc-ming.all/hostcmd-geturl_testrunner.sh
hooks/post-receive
--
Gnash
Gnash