<!doctype html>
<meta charset="utf-8">
<title>StylePropertyMap iterable tests</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#the-stylepropertymap">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<body>
<script>
'use strict';

test(t => {
  const styleMap = createDeclaredStyleMap(t, '');
  assert_array_equals([...styleMap.entries()], []);
}, 'Iterating over an empty StylePropertyMap gives a zero-length array');

test(t => {
  const styleMap = createDeclaredStyleMap(t, '--A: A; width: 10px; --C: C; transition-duration: 1s, 2s; color: red; --B: B;');
  assert_array_equals([...styleMap.keys()],
    ['--A', 'width', '--C', 'transition-duration', 'color', '--B']);
}, 'StylePropertyMap iterates properties in correct order');

test(t => {
  const styleMap = createDeclaredStyleMap(t, 'width: 10px; height: 5px');
  const keys = [...styleMap.keys()], values = [...styleMap.values()];

  assert_array_equals(keys, ['width', 'height']);
  assert_style_value_array_equals(values[0], [CSS.px(10)]);
  assert_style_value_array_equals(values[1], [CSS.px(5)]);
}, 'StylePropertyMap iterator returns CSS properties with the correct CSSStyleValue');

test(t => {
  const styleMap = createDeclaredStyleMap(t, 'transition-duration: 1s, 2s');
  const keys = [...styleMap.keys()], values = [...styleMap.values()];

  assert_array_equals(keys, ['transition-duration']);
  assert_style_value_array_equals(values[0], [CSS.s(1), CSS.s(2)]);
}, 'StylePropertyMap iterator returns list-valued properties with the correct CSSStyleValue');

test(t => {
  const styleMap = createDeclaredStyleMap(t, '--A: A; --B: B; --C: C');
  const keys = [...styleMap.keys()], values = [...styleMap.values()];

  assert_array_equals(keys, ['--A', '--B', '--C']);
  assert_style_value_array_equals(values[0], [new CSSUnparsedValue(['A'])]);
  assert_style_value_array_equals(values[1], [new CSSUnparsedValue(['B'])]);
  assert_style_value_array_equals(values[2], [new CSSUnparsedValue(['C'])]);
}, 'StylePropertyMap iterator returns custom properties with the correct CSSStyleValue');

</script>
