<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Selectors: The negation pseudo-class</title>
<link rel="help" href="https://drafts.csswg.org/selectors-3/#negation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
<script>
  test_valid_selector('button:not([disabled])');
  test_valid_selector('*:not(foo)',
      ['*:not(foo)', ':not(foo)']);
  test_valid_selector(':not(:link):not(:visited)');
  test_valid_selector('*|*:not(*)', ':not(*)');
  test_valid_selector(':not(:hover)');
  test_valid_selector(':not(*|*)', ':not(*)');
  test_valid_selector('foo:not(bar)');
  test_valid_selector(':not(:not(foo))');
  test_valid_selector(':not(.a .b)');
  test_valid_selector(':not(.a + .b)');
  test_valid_selector(':not(.a .b ~ c)');
  test_valid_selector(':not(span.a, div.b)');
  test_valid_selector(':not(.a .b ~ c, .d .e)');
  test_valid_selector(':not(:host)');
  test_valid_selector(':not(:host(.a))');
  test_valid_selector(':host(:not(.a))');
  test_valid_selector(':not(:host(:not(.a)))');
  test_valid_selector(':not([disabled][selected])', ':not([disabled][selected])');
  test_valid_selector(':not([disabled],[selected])', ':not([disabled], [selected])');

  test_invalid_selector(':not()');
  test_invalid_selector(':not(:not())');
  test_invalid_selector(':not(::before)');
  test_invalid_selector(':not(:unknownpseudo)');
  test_invalid_selector(':not(.a, :unknownpseudo)');
  test_invalid_selector(':not(:unknownpseudo, .a)');
  test_invalid_selector(':host(:not(.a .b))');
</script>
