diff --git a/.github/workflows/node-tests.yml b/.github/workflows/node-tests.yml new file mode 100644 index 0000000..550b338 --- /dev/null +++ b/.github/workflows/node-tests.yml @@ -0,0 +1,56 @@ +--- +name: json-to-go tests + +on: # yamllint disable-line rule:truthy + workflow_call: + workflow_dispatch: + push: + branches: + - "master" + - "main" + pull_request: + +jobs: + run-tests: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x, 14.x, 16.x, 18.x, 20.x, 22.x] + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Run tests + run: | + node json-to-go.test.js + + - name: Run json-to-go using stdin + shell: bash + run: | + set -eEuo pipefail + got=$(node json-to-go.js < tests/double-nested-objects.json) + exp=$(cat tests/double-nested-objects.go) + echo "got: '${got}'" + [[ "${got}" == "${exp}" ]] + + - name: Run json-to-go with -big using stdin + shell: bash + run: | + set -eEuo pipefail + got=$(node json-to-go.js -big < tests/double-nested-objects.json) + exp=$(cat tests/double-nested-objects.go) + echo "got: '${got}'" + [[ "${got}" == "${exp}" ]] + + - name: Run json-to-go with a file + shell: bash + run: | + set -eEuo pipefail + got=$(node json-to-go.js tests/double-nested-objects.json) + exp=$(cat tests/double-nested-objects.go) + echo "got: '${got}'" + [[ "${got}" == "${exp}" ]] diff --git a/json-to-go.test.js b/json-to-go.test.js index df46018..6665af8 100644 --- a/json-to-go.test.js +++ b/json-to-go.test.js @@ -141,12 +141,14 @@ function test(includeExampleData) { const got = jsonToGo(testCase.input, null, null, includeExampleData); if (got.error) { console.assert(!got.error, `format('${testCase.input}'): ${got.error}`); + process.exitCode = 16 } else { const exp = includeExampleData ? testCase.expectedWithExample : testCase.expected - console.assert( - got.go === exp, + const success = got.go === exp + console.assert(success, `format('${testCase.input}'): \n\tgot: ${quote(got.go)}\n\twant: ${quote(exp)}` ); + if(!success) process.exitCode = 17 } } console.log(includeExampleData ? "done testing samples with data" : "done testing samples without data") @@ -169,14 +171,17 @@ function testFiles() { const got = jsonToGo(jsonData); if (got.error) { console.assert(!got.error, `format('${jsonData}'): ${got.error}`); + process.exitCode = 18 } else { - console.assert( - got.go === expectedGoData, + const success = got.go === expectedGoData + console.assert(success, `format('${jsonData}'): \n\tgot: ${quote(got.go)}\n\twant: ${quote(expectedGoData)}` ); + if(!success) process.exitCode = 19 } } catch (err) { console.error(err); + process.exitCode = 20 } } console.log("done testing files")