aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2021-12-08 21:28:04 +1100
committerYuchen Pei <hi@ypei.me>2021-12-08 21:28:04 +1100
commit363292644c504033b35b1dfff1342c35f17d66f4 (patch)
tree6b6f1109ea83d615d40d3387f0e37fe045a4d6d8
parent17a7b73d5446ad7e0f1eab4caba3b4b93c447275 (diff)
Added a script that checks a url for compliance in the command line.
Also added copyright and license header to the headless test script.
-rw-r--r--README28
-rw-r--r--compliance.js66
-rw-r--r--test.js27
3 files changed, 117 insertions, 4 deletions
diff --git a/README b/README
index f67f5fc..14a2d83 100644
--- a/README
+++ b/README
@@ -37,9 +37,12 @@ is loaded as a "temporary add-on" from about:debugging.
Otherwise (if included in the xpi, see BUILD above) it can be launched from the
UI by clicking the [Automated self test...] button.
-To launch the test in command line, ensure the extension has been
-built with automated test suite. Then install selenium-webdriver and
-geckodriver, and ensure the latter is in $PATH:
+
+HEADLESS TESTS:
+
+To launch the test suite from the command line, ensure the extension
+has been built with automated test suite. Then install
+selenium-webdriver and geckodriver, and ensure the latter is in $PATH:
$ npm install selenium-webdriver
$ npm install geckodriver
@@ -56,6 +59,25 @@ Optionally you can also test with a chosen seed
$ node ./test.js 12345
+HEADLESS COMPLIANCE CHECK:
+
+To check whether a webpage is LibreJS-compliant from the command line, ensure that the extension has NOT been built with automated test suite. Then install selenium-webdriver and geckodriver, and ensure the latter is in $PATH:
+
+ $ npm install selenium-webdriver
+ $ npm install geckodriver
+ $ export PATH=$PATH:./node_modules/.bin
+
+Now you can check a webpage for compliance with
+
+ $ node ./compliance.js <url>
+
+It will open the url in a headless browser, save a screenshot, and output the compliance check result.
+
+For example, to check the compliance of the FSF homepage, do
+
+ $ node ./compliance.js https://fsf.org
+
+
CONTACT:
Development mailing list: bug-librejs@gnu.org
diff --git a/compliance.js b/compliance.js
new file mode 100644
index 0000000..40041db
--- /dev/null
+++ b/compliance.js
@@ -0,0 +1,66 @@
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2021 Yuchen Pei
+ *
+ * This file is part of GNU LibreJS.
+ *
+ * GNU LibreJS 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.
+ *
+ * GNU LibreJS 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 GNU LibreJS. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * A node script that opens the supplied url and outputs librejs
+ * compliance.
+ *
+ * Usage: node ./compliance.js <url>
+ *
+ * It opens the url, saves a screenshot, and outputs text from the
+ * LibreJS display panel about the webpage compliance.
+ */
+
+var fs = require('fs');
+
+(function libreJSCompliance() {
+ const webdriver = require('selenium-webdriver');
+ const firefox = require('selenium-webdriver/firefox');
+ new webdriver.Builder().forBrowser('firefox')
+ .setFirefoxOptions(new firefox.Options()
+ // Uncomment this line to test using icecat
+// .setBinary("/usr/bin/icecat")
+ .headless())
+ .build()
+ .then(driver =>
+ driver.installAddon("./librejs.xpi", /*isTemporary=*/true)
+ .then(driver.get("about:debugging#/runtime/this-firefox"))
+ .then(_ => driver.findElements(webdriver.By.css('.fieldpair dd')))
+ .then(es => es[2].getText())
+ .then(uuid =>
+ driver.get(process.argv[2])
+ // Wait for the webpage to load
+ .then(_ => driver.sleep(5000))
+ .then(_ => driver.takeScreenshot())
+ .then(s => fs.writeFile(
+ "/tmp/screen.png", Buffer.from(s, 'base64'), "binary",
+ err => err ? console.log(err) : console.log("Screenshot saved to /tmp/screen.png")))
+ .then(_ => driver.executeScript("window.open('');"))
+ .then(_ => driver.getAllWindowHandles())
+ .then(handles => driver.switchTo().window(handles[1]))
+ .then(_ => driver.get('moz-extension://'
+ + uuid
+ + '/html/display_panel/content/display-panel.html#fromTab=1'))
+ .then(_ => driver.findElement(webdriver.By.css('div#info')))
+ .then(e => e.getText())
+ .then(console.log))
+ .then(_ => driver.quit()));
+})();
diff --git a/test.js b/test.js
index 9735176..d87353b 100644
--- a/test.js
+++ b/test.js
@@ -1,4 +1,29 @@
-/* A node script that runs tests in a headless browser. */
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2021 Yuchen Pei
+ *
+ * This file is part of GNU LibreJS.
+ *
+ * GNU LibreJS 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.
+ *
+ * GNU LibreJS 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 GNU LibreJS. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * A node script that runs tests in a headless browser.
+ * Usage:
+ * node ./test.js [seed-number]
+ */
(function libreJSTest() {
const webdriver = require('selenium-webdriver');