<!DOCTYPE html>
<html class="reftest-wait">
<title>Test styleMap functions</title>
<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/">
<link rel="match" href="parse-input-arguments-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<script src="./resources/utils.js"></script>
<body>
<style>
  #target {
    width: 100px;
    height: 100px;
    background: paint(style-map);
  }
</style>
<div id="target"></div>
<script>
    try {
      CSS.registerProperty({
        name: '--prop',
        syntax: '<length>+',
        initialValue: '10px 10px 10px 10px',
        inherits: false
      });

      const worklet = `
        registerPaint('style-map', class {
          static get inputProperties() { return ['--prop']; }
          paint(ctx, geom, styleMap) {
            let serialize = (v) => '[' + v.constructor.name + ' ' + v.toString() + ']';
            let expected = '[CSSUnitValue 10px]';
            let isExpected = x => serialize(x) === expected;

            let pass = true;

            pass &= styleMap.has('--prop');
            pass &= isExpected(styleMap.get('--prop'));
            pass &= styleMap.getAll('--prop').length == 4;
            pass &= styleMap.getAll('--prop').every(isExpected);
            pass &= Array.from(styleMap).filter(e => e[0] == '--prop')[0][1].length == 4;
            pass &= Array.from(styleMap).filter(e => e[0] == '--prop')[0][1].every(isExpected);

            ctx.fillStyle = pass ? 'green' : 'red';
            ctx.fillRect(0, 0, geom.width, geom.height);
          }
        });`

        importWorkletAndTerminateTestAfterAsyncPaint(CSS.paintWorklet, worklet);
    } catch(e) {
      document.body.textContent = e;
      takeScreenshot();
    }
</script>
</body>
</html>
