summaryrefslogtreecommitdiffstats
path: root/testing/mochitest/tests/SimpleTest/MozillaLogger.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mochitest/tests/SimpleTest/MozillaLogger.js')
-rw-r--r--testing/mochitest/tests/SimpleTest/MozillaLogger.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/testing/mochitest/tests/SimpleTest/MozillaLogger.js b/testing/mochitest/tests/SimpleTest/MozillaLogger.js
new file mode 100644
index 0000000000..07d50572b0
--- /dev/null
+++ b/testing/mochitest/tests/SimpleTest/MozillaLogger.js
@@ -0,0 +1,103 @@
+/**
+ * MozillaLogger, a base class logger that just logs to stdout.
+ */
+
+"use strict";
+
+function formatLogMessage(msg) {
+ return msg.info.join(" ") + "\n";
+}
+
+function importMJS(mjs) {
+ if (typeof ChromeUtils === "object") {
+ return ChromeUtils.importESModule(mjs);
+ }
+ /* globals SpecialPowers */
+ return SpecialPowers.ChromeUtils.importESModule(mjs);
+}
+
+// When running in release builds, we get a fake Components object in
+// web contexts, so we need to check that the Components object is sane,
+// too, not just that it exists.
+let haveComponents =
+ typeof Components === "object" &&
+ typeof Components.Constructor === "function";
+
+let CC = (haveComponents
+ ? Components
+ : SpecialPowers.wrap(SpecialPowers.Components)
+).Constructor;
+
+let ConverterOutputStream = CC(
+ "@mozilla.org/intl/converter-output-stream;1",
+ "nsIConverterOutputStream",
+ "init"
+);
+
+class MozillaLogger {
+ get logCallback() {
+ return msg => {
+ this.log(formatLogMessage(msg));
+ };
+ }
+
+ log(msg) {
+ dump(msg);
+ }
+
+ close() {}
+}
+
+/**
+ * MozillaFileLogger, a log listener that can write to a local file.
+ * intended to be run from chrome space
+ */
+
+/** Init the file logger with the absolute path to the file.
+ It will create and append if the file already exists **/
+class MozillaFileLogger extends MozillaLogger {
+ constructor(aPath) {
+ super();
+
+ const { FileUtils } = importMJS("resource://gre/modules/FileUtils.sys.mjs");
+
+ this._file = FileUtils.File(aPath);
+ this._foStream = FileUtils.openFileOutputStream(
+ this._file,
+ FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_APPEND
+ );
+
+ this._converter = ConverterOutputStream(this._foStream, "UTF-8");
+ }
+
+ get logCallback() {
+ return msg => {
+ if (this._converter) {
+ var data = formatLogMessage(msg);
+ this.log(data);
+
+ if (data.includes("SimpleTest FINISH")) {
+ this.close();
+ }
+ }
+ };
+ }
+
+ log(msg) {
+ if (this._converter) {
+ this._converter.writeString(msg);
+ }
+ }
+
+ close() {
+ this._converter.flush();
+ this._converter.close();
+
+ this._foStream = null;
+ this._converter = null;
+ this._file = null;
+ }
+}
+
+this.MozillaLogger = MozillaLogger;
+this.MozillaFileLogger = MozillaFileLogger;