Skip to content

Commit

Permalink
add js test and ci job
Browse files Browse the repository at this point in the history
  • Loading branch information
rosstroha committed Feb 16, 2024
1 parent bf64d32 commit a40f26b
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
11 changes: 11 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,14 @@ jobs:
javac -J-Xmx32m -version
mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
mvn test -B
test-js:
name: Test JS
needs: build
if: |
!cancelled() && !failure()
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v4
with:
node-version: 20
- run: node src/test/javascript/salvation.test.js
4 changes: 2 additions & 2 deletions src/main/java/com/shapesecurity/salvation2/Salvation2.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ public static String getErrorsForSerializedCSP(String policyText) {
}

@JSBody(params = {}, script =
"(exports || window).getErrorsForSerializedCSPList = (policyText) => {\n" +
"(window || globalThis).getErrorsForSerializedCSPList = (policyText) => {\n" +
"return javaMethods.get('com.shapesecurity.salvation2.Salvation2.getErrorsForSerializedCSPList(Ljava/lang/String;)Ljava/lang/String;').invoke(policyText)\n" +
"}")
static native void initParseList();

@JSBody(params = {}, script =
"(exports || window).getErrorsForSerializedCSP = (policyText) => {\n" +
"(window || globalThis).getErrorsForSerializedCSP = (policyText) => {\n" +
"return javaMethods.get('com.shapesecurity.salvation2.Salvation2.getErrorsForSerializedCSP(Ljava/lang/String;)Ljava/lang/String;').invoke(policyText)\n" +
"}")
static native void initParseSingle();
Expand Down
39 changes: 39 additions & 0 deletions src/test/javascript/salvation.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const test = require('node:test');
const assert = require('node:assert');
const salvation = require('../../../target/javascript/salvation-v3.0.1.min.js');

test('salvation initialization', () => {
assert.notStrictEqual(salvation.main, undefined);
try {
salvation.main();
assert.notStrictEqual(getErrorsForSerializedCSP, undefined);
assert.notStrictEqual(getErrorsForSerializedCSPList, undefined);
} catch (e) {
assert.fail('main function should not throw an exception', e.message);
}
});

test('.getErrorsForSerializedCSP() gives no errors for a valid CSP', () => {
salvation.main();
const result = getErrorsForSerializedCSP('default-src \'none\';');
assert.strictEqual(result.length, 0, 'No errors should be found');
});

test('.getErrorsForSerializedCSP() provides feedback', () => {
salvation.main();
const result = getErrorsForSerializedCSP('hello world');
assert.strictEqual(result, 'Warning at directive 0: Unrecognized directive hello');
});

test('.getErrorsForSerializedCSPList() gives no errors for a valid CSP', () => {
salvation.main();
const result = getErrorsForSerializedCSPList('default-src \'none\',plugin-types image/png application/pdf; sandbox,style-src https: \'self\'');
assert.strictEqual(result, '');
});

test('.getErrorsForSerializedCSPList() provides feedback', () => {
salvation.main();
const result = getErrorsForSerializedCSPList('hello,foobar,script-src \'self\'; style-src \'self\'');
assert.strictEqual(result, 'Warning at directive 0: Unrecognized directive hello\n'
+ 'Warning at directive 0: Unrecognized directive foobar');
});

0 comments on commit a40f26b

Please sign in to comment.