<!DOCTYPE html>
<title>Ensure encoding labels match the Encoding standard</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../external/wpt/encoding/resources/encodings.js"></script>
<script>

// The list of encoding labels is not web-exposed. This test makes
// use of the "internals" API for testing and therefore can not be
// upstreamed to web-platform-tests.

let supported_labels = internals.supportedTextEncodingLabels().sort();

// Specified labels from: https://encoding.spec.whatwg.org/

let specified_labels = [];
encodings_table.forEach(section => {
  section.encodings.forEach(encoding => {
    encoding.labels.forEach(label => specified_labels.push(label));
  });
});

supported_labels = new Set(supported_labels.map(s => s.toLowerCase()));
specified_labels = new Set(specified_labels.map(s => s.toLowerCase()));
const union = new Set([...supported_labels, ...specified_labels]);

for (const label of union) {
  test(t => {
    assert_true(supported_labels.has(label),
                `${label} should be supported since it is specified`);
    assert_true(specified_labels.has(label),
                `${label} should only be supported if it is specified`);
  }, `Supported label: ${label}`);
}

</script>
