[
	{
		"type": "parse",
		"input": "ul > li:nth-of-type(2n+1):not(:last-child) a",
		"expected": {
			"type": "complex",
			"combinator": " ",
			"left": {
				"type": "complex",
				"combinator": ">",
				"left": {
					"name": "ul",
					"type": "type",
					"content": "ul",
					"pos": [
						0,
						2
					]
				},
				"right": {
					"type": "compound",
					"list": [
						{
							"name": "li",
							"type": "type",
							"content": "li",
							"pos": [
								5,
								7
							]
						},
						{
							"name": "nth-of-type",
							"argument": "2n+1",
							"type": "pseudo-class",
							"content": ":nth-of-type(2n+1)",
							"pos": [
								7,
								25
							]
						},
						{
							"name": "not",
							"argument": ":last-child",
							"type": "pseudo-class",
							"content": ":not(:last-child)",
							"pos": [
								25,
								42
							],
							"subtree": {
								"name": "last-child",
								"type": "pseudo-class",
								"content": ":last-child",
								"pos": [
									0,
									11
								]
							}
						}
					]
				}
			},
			"right": {
				"name": "a",
				"type": "type",
				"content": "a",
				"pos": [
					43,
					44
				]
			}
		}
	},
	{
		"type": "tokenize",
		"input": ".container:not(:first-child) > .row:last-child > .col-3",
		"expected": [
			{
				"name": "container",
				"type": "class",
				"content": ".container",
				"pos": [
					0,
					10
				]
			},
			{
				"name": "not",
				"argument": ":first-child",
				"type": "pseudo-class",
				"content": ":not(:first-child)",
				"pos": [
					10,
					28
				]
			},
			{
				"type": "combinator",
				"content": ">",
				"pos": [
					28,
					31
				]
			},
			{
				"name": "row",
				"type": "class",
				"content": ".row",
				"pos": [
					31,
					35
				]
			},
			{
				"name": "last-child",
				"type": "pseudo-class",
				"content": ":last-child",
				"pos": [
					35,
					46
				]
			},
			{
				"type": "combinator",
				"content": ">",
				"pos": [
					46,
					49
				]
			},
			{
				"name": "col-3",
				"type": "class",
				"content": ".col-3",
				"pos": [
					49,
					55
				]
			}
		]
	},
	{
		"type": "specificity",
		"input": "nav ul li:nth-child(even) a:not([href^=\"#\"])",
		"expected": [
			0,
			2,
			4
		]
	},
	{
		"type": "stringify",
		"input": "h1:first-of-type + p:last-of-type",
		"expected": "h1:first-of-type+p:last-of-type"
	},
	{
		"type": "specificity",
		"input": "button:only-of-type:enabled:active:hover",
		"expected": [
			0,
			4,
			1
		]
	},
	{
		"type": "tokenize",
		"input": "input[type=\"radio\"][value=\"female\"] + label",
		"expected": [
			{
				"name": "input",
				"type": "type",
				"content": "input",
				"pos": [
					0,
					5
				]
			},
			{
				"name": "type",
				"operator": "=",
				"value": "\"radio\"",
				"type": "attribute",
				"content": "[type=\"radio\"]",
				"pos": [
					5,
					19
				]
			},
			{
				"name": "value",
				"operator": "=",
				"value": "\"female\"",
				"type": "attribute",
				"content": "[value=\"female\"]",
				"pos": [
					19,
					35
				]
			},
			{
				"type": "combinator",
				"content": "+",
				"pos": [
					35,
					38
				]
			},
			{
				"name": "label",
				"type": "type",
				"content": "label",
				"pos": [
					38,
					43
				]
			}
		]
	},
	{
		"type": "stringify",
		"input": "a[href$=\".pdf\"][target=\"_blank\"][rel=\"noopener\"]",
		"expected": "a[href$=\".pdf\"][target=\"_blank\"][rel=\"noopener\"]"
	},
	{
		"type": "parse",
		"input": ".box:not(:first-child):not(:last-child) p:first-child",
		"expected": {
			"type": "complex",
			"combinator": " ",
			"left": {
				"type": "compound",
				"list": [
					{
						"name": "box",
						"type": "class",
						"content": ".box",
						"pos": [
							0,
							4
						]
					},
					{
						"name": "not",
						"argument": ":first-child",
						"type": "pseudo-class",
						"content": ":not(:first-child)",
						"pos": [
							4,
							22
						],
						"subtree": {
							"name": "first-child",
							"type": "pseudo-class",
							"content": ":first-child",
							"pos": [
								0,
								12
							]
						}
					},
					{
						"name": "not",
						"argument": ":last-child",
						"type": "pseudo-class",
						"content": ":not(:last-child)",
						"pos": [
							22,
							39
						],
						"subtree": {
							"name": "last-child",
							"type": "pseudo-class",
							"content": ":last-child",
							"pos": [
								0,
								11
							]
						}
					}
				]
			},
			"right": {
				"type": "compound",
				"list": [
					{
						"name": "p",
						"type": "type",
						"content": "p",
						"pos": [
							40,
							41
						]
					},
					{
						"name": "first-child",
						"type": "pseudo-class",
						"content": ":first-child",
						"pos": [
							41,
							53
						]
					}
				]
			}
		}
	},
	{
		"type": "specificity",
		"input": "div:empty:before",
		"expected": [
			0,
			2,
			1
		]
	},
	{
		"type": "stringify",
		"input": "ul > li:first-of-type, ul > li:last-of-type",
		"expected": "ul>li:first-of-type,ul>li:last-of-type"
	},
	{
		"type": "tokenize",
		"input": ":root:lang(en) h1",
		"expected": [
			{
				"name": "root",
				"type": "pseudo-class",
				"content": ":root",
				"pos": [
					0,
					5
				]
			},
			{
				"name": "lang",
				"argument": "en",
				"type": "pseudo-class",
				"content": ":lang(en)",
				"pos": [
					5,
					14
				]
			},
			{
				"type": "combinator",
				"content": " ",
				"pos": [
					14,
					15
				]
			},
			{
				"name": "h1",
				"type": "type",
				"content": "h1",
				"pos": [
					15,
					17
				]
			}
		]
	},
	{
		"type": "specificity",
		"input": "table tr:not(:first-child):hover td:nth-child(2n+1)",
		"expected": [
			0,
			3,
			3
		]
	},
	{
		"type": "parse",
		"input": "form:target input[type=\"submit\"]",
		"expected": {
			"type": "complex",
			"combinator": " ",
			"left": {
				"type": "compound",
				"list": [
					{
						"name": "form",
						"type": "type",
						"content": "form",
						"pos": [
							0,
							4
						]
					},
					{
						"name": "target",
						"type": "pseudo-class",
						"content": ":target",
						"pos": [
							4,
							11
						]
					}
				]
			},
			"right": {
				"type": "compound",
				"list": [
					{
						"name": "input",
						"type": "type",
						"content": "input",
						"pos": [
							12,
							17
						]
					},
					{
						"name": "type",
						"operator": "=",
						"value": "\"submit\"",
						"type": "attribute",
						"content": "[type=\"submit\"]",
						"pos": [
							17,
							32
						]
					}
				]
			}
		}
	},
	{
		"type": "specificity",
		"input": "a[href^=\"https://\"]:not([href*=\"example.com\"])",
		"expected": [
			0,
			2,
			1
		]
	},
	{
		"type": "stringify",
		"input": ".container:has(.row:has(.col-4))",
		"expected": ".container:has(.row:has(.col-4))"
	},
	{
		"type": "tokenize",
		"input": "ul:not(:empty) > li:last-child a",
		"expected": [
			{
				"name": "ul",
				"type": "type",
				"content": "ul",
				"pos": [
					0,
					2
				]
			},
			{
				"name": "not",
				"argument": ":empty",
				"type": "pseudo-class",
				"content": ":not(:empty)",
				"pos": [
					2,
					14
				]
			},
			{
				"type": "combinator",
				"content": ">",
				"pos": [
					14,
					17
				]
			},
			{
				"name": "li",
				"type": "type",
				"content": "li",
				"pos": [
					17,
					19
				]
			},
			{
				"name": "last-child",
				"type": "pseudo-class",
				"content": ":last-child",
				"pos": [
					19,
					30
				]
			},
			{
				"type": "combinator",
				"content": " ",
				"pos": [
					30,
					31
				]
			},
			{
				"name": "a",
				"type": "type",
				"content": "a",
				"pos": [
					31,
					32
				]
			}
		]
	},
	{
		"type": "parse",
		"input": "div:nth-child(odd):not(.highlight) p:first-letter",
		"expected": {
			"type": "complex",
			"combinator": " ",
			"left": {
				"type": "compound",
				"list": [
					{
						"name": "div",
						"type": "type",
						"content": "div",
						"pos": [
							0,
							3
						]
					},
					{
						"name": "nth-child",
						"argument": "odd",
						"type": "pseudo-class",
						"content": ":nth-child(odd)",
						"pos": [
							3,
							18
						]
					},
					{
						"name": "not",
						"argument": ".highlight",
						"type": "pseudo-class",
						"content": ":not(.highlight)",
						"pos": [
							18,
							34
						],
						"subtree": {
							"name": "highlight",
							"type": "class",
							"content": ".highlight",
							"pos": [
								0,
								10
							]
						}
					}
				]
			},
			"right": {
				"type": "compound",
				"list": [
					{
						"name": "p",
						"type": "type",
						"content": "p",
						"pos": [
							35,
							36
						]
					},
					{
						"name": "first-letter",
						"type": "pseudo-class",
						"content": ":first-letter",
						"pos": [
							36,
							49
						]
					}
				]
			}
		}
	},
	{
		"type": "specificity",
		"input": "input[type=\"email\"][required]:invalid:empty",
		"expected": [
			0,
			4,
			1
		]
	},
	{
		"type": "stringify",
		"input": "button:disabled:empty:before",
		"expected": "button:disabled:empty:before"
	},
	{
		"type": "tokenize",
		"input": "a:not([href]):not([tabindex])",
		"expected": [
			{
				"name": "a",
				"type": "type",
				"content": "a",
				"pos": [
					0,
					1
				]
			},
			{
				"name": "not",
				"argument": "[href]",
				"type": "pseudo-class",
				"content": ":not([href])",
				"pos": [
					1,
					13
				]
			},
			{
				"name": "not",
				"argument": "[tabindex]",
				"type": "pseudo-class",
				"content": ":not([tabindex])",
				"pos": [
					13,
					29
				]
			}
		]
	},
	{
		"type": "tokenize",
		"input": "[a=\"\"][b=\"\"]",
		"expected": [
			{
				"name": "a",
				"operator": "=",
				"value": "\"\"",
				"type": "attribute",
				"content": "[a=\"\"]",
				"pos": [
					0,
					6
				]
			},
			{
				"name": "b",
				"operator": "=",
				"value": "\"\"",
				"type": "attribute",
				"content": "[b=\"\"]",
				"pos": [
					6,
					12
				]
			}
		]
	},
	{
		"type": "specificity",
		"input": "input[type=\"checkbox\"][checked]:indeterminate + label",
		"expected": [
			0,
			3,
			2
		]
	},
	{
		"type": "parse",
		"input": "nav ul li:first-child a, nav ul li:last-child a",
		"expected": {
			"type": "list",
			"list": [
				{
					"type": "complex",
					"combinator": " ",
					"left": {
						"type": "complex",
						"combinator": " ",
						"left": {
							"type": "complex",
							"combinator": " ",
							"left": {
								"name": "nav",
								"type": "type",
								"content": "nav",
								"pos": [
									0,
									3
								]
							},
							"right": {
								"name": "ul",
								"type": "type",
								"content": "ul",
								"pos": [
									4,
									6
								]
							}
						},
						"right": {
							"type": "compound",
							"list": [
								{
									"name": "li",
									"type": "type",
									"content": "li",
									"pos": [
										7,
										9
									]
								},
								{
									"name": "first-child",
									"type": "pseudo-class",
									"content": ":first-child",
									"pos": [
										9,
										21
									]
								}
							]
						}
					},
					"right": {
						"name": "a",
						"type": "type",
						"content": "a",
						"pos": [
							22,
							23
						]
					}
				},
				{
					"type": "complex",
					"combinator": " ",
					"left": {
						"type": "complex",
						"combinator": " ",
						"left": {
							"type": "complex",
							"combinator": " ",
							"left": {
								"name": "nav",
								"type": "type",
								"content": "nav",
								"pos": [
									25,
									28
								]
							},
							"right": {
								"name": "ul",
								"type": "type",
								"content": "ul",
								"pos": [
									29,
									31
								]
							}
						},
						"right": {
							"type": "compound",
							"list": [
								{
									"name": "li",
									"type": "type",
									"content": "li",
									"pos": [
										32,
										34
									]
								},
								{
									"name": "last-child",
									"type": "pseudo-class",
									"content": ":last-child",
									"pos": [
										34,
										45
									]
								}
							]
						}
					},
					"right": {
						"name": "a",
						"type": "type",
						"content": "a",
						"pos": [
							46,
							47
						]
					}
				}
			]
		}
	},
	{
		"type": "specificity",
		"input": ":not(section):not(header):not(footer) > h1",
		"expected": [
			0,
			0,
			4
		]
	},
	{
		"type": "stringify",
		"input": ".row:has(.col-3):not(:has(.col-4)) > .col-3",
		"expected": ".row:has(.col-3):not(:has(.col-4))>.col-3"
	},
	{
		"type": "tokenize",
		"input": "form > div:only-of-type > label:only-of-type > input",
		"expected": [
			{
				"name": "form",
				"type": "type",
				"content": "form",
				"pos": [
					0,
					4
				]
			},
			{
				"type": "combinator",
				"content": ">",
				"pos": [
					4,
					7
				]
			},
			{
				"name": "div",
				"type": "type",
				"content": "div",
				"pos": [
					7,
					10
				]
			},
			{
				"name": "only-of-type",
				"type": "pseudo-class",
				"content": ":only-of-type",
				"pos": [
					10,
					23
				]
			},
			{
				"type": "combinator",
				"content": ">",
				"pos": [
					23,
					26
				]
			},
			{
				"name": "label",
				"type": "type",
				"content": "label",
				"pos": [
					26,
					31
				]
			},
			{
				"name": "only-of-type",
				"type": "pseudo-class",
				"content": ":only-of-type",
				"pos": [
					31,
					44
				]
			},
			{
				"type": "combinator",
				"content": ">",
				"pos": [
					44,
					47
				]
			},
			{
				"name": "input",
				"type": "type",
				"content": "input",
				"pos": [
					47,
					52
				]
			}
		]
	},
	{
		"type": "parse",
		"input": "table td:first-of-type + td:last-of-type",
		"expected": {
			"type": "complex",
			"combinator": "+",
			"left": {
				"type": "complex",
				"combinator": " ",
				"left": {
					"name": "table",
					"type": "type",
					"content": "table",
					"pos": [
						0,
						5
					]
				},
				"right": {
					"type": "compound",
					"list": [
						{
							"name": "td",
							"type": "type",
							"content": "td",
							"pos": [
								6,
								8
							]
						},
						{
							"name": "first-of-type",
							"type": "pseudo-class",
							"content": ":first-of-type",
							"pos": [
								8,
								22
							]
						}
					]
				}
			},
			"right": {
				"type": "compound",
				"list": [
					{
						"name": "td",
						"type": "type",
						"content": "td",
						"pos": [
							25,
							27
						]
					},
					{
						"name": "last-of-type",
						"type": "pseudo-class",
						"content": ":last-of-type",
						"pos": [
							27,
							40
						]
					}
				]
			}
		}
	},
	{
		"type": "specificity",
		"input": ":root:where(:hover, :focus) a",
		"expected": [
			0,
			1,
			1
		]
	},
	{
		"type": "stringify",
		"input": "input[type=\"radio\"]:checked ~ label:after",
		"expected": "input[type=\"radio\"]:checked~label:after"
	},
	{
		"type": "parse",
		"input": ":where()",
		"expected": {
			"name": "where",
			"argument": "",
			"type": "pseudo-class",
			"content": ":where()",
			"pos": [
				0,
				8
			]
		}
	},
	{
		"type": "tokenize",
		"input": ".container:has(~ .image)",
		"expected": [
			{
				"name": "container",
				"type": "class",
				"content": ".container",
				"pos": [
					0,
					10
				]
			},
			{
				"name": "has",
				"argument": "~ .image",
				"type": "pseudo-class",
				"content": ":has(~ .image)",
				"pos": [
					10,
					24
				]
			}
		]
	},
	{
		"type": "parse",
		"input": ".container:has(~ .image)",
		"expected": {
			"type": "compound",
			"list": [
				{
					"name": "container",
					"type": "class",
					"content": ".container",
					"pos": [
						0,
						10
					]
				},
				{
					"name": "has",
					"argument": "~ .image",
					"type": "pseudo-class",
					"content": ":has(~ .image)",
					"pos": [
						10,
						24
					],
					"subtree": {
						"type": "relative",
						"combinator": "~",
						"right": {
							"name": "image",
							"type": "class",
							"content": ".image",
							"pos": [
								2,
								8
							]
						}
					}
				}
			]
		}
	},
	{
		"type": "stringify",
		"input": ".container:has(~ .image)",
		"expected": ".container:has(~ .image)"
	},
	{
		"type": "specificity",
		"input": ".container:has(~ .image)",
		"expected": [
			0,
			2,
			0
		]
	}
]