<!doctype html>
<title>DOMParser encoding test</title>
<meta charset="windows-1252"> <!-- intentional to make sure the results are UTF-8 anyway -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
"use strict";

function assertEncoding(doc) {
  assert_equals(doc.charset, "UTF-8", "document.charset");
  assert_equals(doc.characterSet, "UTF-8", "document.characterSet");
  assert_equals(doc.inputEncoding, "UTF-8", "document.characterSet");
}

setup(() => {
  assert_equals(document.characterSet, "windows-1252", "the meta charset must be in effect, making the main document windows-1252");
});

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString("", "text/html");

  assertEncoding(doc);
}, "HTML: empty");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString("", "text/xml");

  assertEncoding(doc);
}, "XML: empty");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString(`<meta charset="latin2">`, "text/html");

  assertEncoding(doc);
}, "HTML: meta charset");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString(`<?xml version="1.0" encoding="latin2"?><x/>`, "text/xml");

  assertEncoding(doc);
}, "XML: XML declaration");
</script>
