Add test for util.byteToChar() and fix error msg.

Review URL: https://codereview.chromium.org/1838543002
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index f7b2d7f..0f50daf 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -446,13 +446,17 @@
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
-  int iSize = params.size();
-  if (iSize == 0)
+  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+  if (params.size() < 1) {
+    sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
     return FALSE;
-  int nByte = params[0].ToInt();
-  unsigned char cByte = (unsigned char)nByte;
-  CFX_WideString csValue;
-  csValue.Format(L"%c", cByte);
-  vRet = csValue.c_str();
+  }
+  int arg = params[0].ToInt();
+  if (arg < 0 || arg > 255) {
+    sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
+    return FALSE;
+  }
+  CFX_WideString wStr(static_cast<FX_WCHAR>(arg));
+  vRet = wStr.c_str();
   return TRUE;
 }
diff --git a/testing/resources/javascript/util_bytetochar.in b/testing/resources/javascript/util_bytetochar.in
new file mode 100644
index 0000000..a9adfbc
--- /dev/null
+++ b/testing/resources/javascript/util_bytetochar.in
@@ -0,0 +1,76 @@
+{{header}}
+{{object 1 0}} <<
+  /Type /Catalog
+  /Pages 2 0 R
+  /OpenAction 10 0 R
+>>
+endobj
+{{object 2 0}} <<
+  /Type /Pages
+  /Count 1
+  /Kids [
+    3 0 R
+  ]
+>>
+endobj
+% Page number 0.
+{{object 3 0}} <<
+  /Type /Page
+  /Parent 2 0 R
+  /Resources <<
+    /Font <</F1 15 0 R>>
+  >>
+  /Contents [21 0 R]
+  /MediaBox [0 0 612 792]
+>>
+% OpenAction action
+{{object 10 0}} <<
+  /Type /Action
+  /S /JavaScript
+  /JS 11 0 R
+>>
+endobj
+% JS program to exexute
+{{object 11 0}} <<
+>>
+stream
+function TestOneInput(x) {
+  try {
+    var s = util.byteToChar(x);
+    if (s.length) {
+      s = s.charCodeAt(0);
+    }
+    app.alert(x + " => " + s);
+  }
+  catch (e) {
+    app.alert(x + ": Caught error: " + e);
+  }
+}
+TestOneInput(0);
+TestOneInput(65);
+TestOneInput(127);
+TestOneInput(128);
+TestOneInput(255);
+TestOneInput(256);
+TestOneInput(40000000);
+TestOneInput(-1);
+try {
+  util.byteToChar();
+}
+catch (e) {
+  app.alert("Caught expected error: " + e);
+}
+try {
+  util.byteToChar({x:39});
+}
+catch (e) {
+  app.alert("Caught expected error: " + e);
+}
+endstream
+endobj
+{{xref}}
+trailer <<
+  /Root 1 0 R
+>>
+{{startxref}}
+%%EOF
diff --git a/testing/resources/javascript/util_bytetochar_expected.txt b/testing/resources/javascript/util_bytetochar_expected.txt
new file mode 100644
index 0000000..df15ee7
--- /dev/null
+++ b/testing/resources/javascript/util_bytetochar_expected.txt
@@ -0,0 +1,9 @@
+Alert: 0 => 
+Alert: 65 => 65
+Alert: 127 => 127
+Alert: 128 => 128
+Alert: 255 => 255
+Alert: 256: Caught error: util.byteToChar: Incorrect parameter value.
+Alert: 40000000: Caught error: util.byteToChar: Incorrect parameter value.
+Alert: -1: Caught error: util.byteToChar: Incorrect parameter value.
+Alert: Caught expected error: util.byteToChar: Incorrect number of parameters passed to function.