#!/bin/sh
# Upstream targets the browser: load the module in Node and convert a colour
# from sRGB to sRGB, which has to come back unchanged.
set -eu

work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT

cat > "$work/check.mjs" <<'JS'
import fs from "node:fs"

const dir = "/usr/share/javascript/pdfjs-qcms"
const qcms = await import(dir + "/qcms.js")
const {QCMS} = await import(dir + "/qcms_utils.js")

const wasm = fs.readFileSync(dir + "/qcms_bg.wasm")
let mod
try {
  mod = await qcms.default({module_or_path: wasm})
} catch {
  mod = await qcms.default(wasm)
}

QCMS._memory = mod.memory
QCMS._destBuffer = new Uint8Array(3)
QCMS._destOffset = 0
QCMS._destLength = 3

// A 588 byte sRGB profile generated by lcms2.
const icc = Buffer.from("AAACTGxjbXMEQAAAbW50clJHQiBYWVogB+oACgAXAA8ACQAPYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAAA2Y3BydAAAAUAAAABMd3RwdAAAAYwAAAAUY2hhZAAAAaAAAAAsclhZWgAAAcwAAAAUYlhZWgAAAeAAAAAUZ1hZWgAAAfQAAAAUclRSQwAAAggAAAAgZ1RSQwAAAggAAAAgYlRSQwAAAggAAAAgY2hybQAAAigAAAAkbWx1YwAAAAAAAAABAAAADGVuVVMAAAAaAAAAHABzAFIARwBCACAAYgB1AGkAbAB0AC0AaQBuAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAADAAAAAcAE4AbwAgAGMAbwBwAHkAcgBpAGcAaAB0ACwAIAB1AHMAZQAgAGYAcgBlAGUAbAB5WFlaIAAAAAAAAPbWAAEAAAAA0y1zZjMyAAAAAAABDEIAAAXe///zJQAAB5MAAP2Q///7of///aIAAAPcAADAblhZWiAAAAAAAABvoAAAOPUAAAOQWFlaIAAAAAAAACSfAAAPhAAAtsNYWVogAAAAAAAAYpcAALeHAAAY2XBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbY2hybQAAAAAAAwAAAACj1wAAVHsAAEzNAACZmgAAJmYAAA9c", "base64")
const transformer = qcms.qcms_transformer_from_memory(
  icc, qcms.DataType.RGB8, qcms.Intent.Perceptual)
if (!transformer)
  throw new Error("could not build a transformer from the sRGB profile")

qcms.qcms_convert_array(transformer, new Uint8Array([255, 0, 0]))
const out = Array.from(QCMS._destBuffer)
if (out[0] < 250 || out[1] > 5 || out[2] > 5)
  throw new Error(`sRGB to sRGB is not the identity: ${out}`)
console.log("converted a colour through an sRGB profile")
JS

node "$work/check.mjs"
