Code Monkey home page Code Monkey logo

css-parsing-tests's Introduction

CSS parsing tests

This repository contains implementation-independent test for CSS parsers, based on the 2013 draft of the CSS Syntax Level 3 specification.

The upstream repository for these tests is at https://github.com/SimonSapin/css-parsing-tests

Projects using this

CSS parsers using these tests:

Importing

The recommended way to use these tests in an implementation is to import them with git-subtree.

To import the first time to a ./css-parsing-tests sub-directory, run this from the top-level of a git repository:

git subtree add -P css-parsing-tests https://github.com/SimonSapin/css-parsing-tests.git master

Later, to merge changes made in the upstream repository, run:

git subtree pull -P css-parsing-tests https://github.com/SimonSapin/css-parsing-tests.git master

Test files

CSS Syntax specification describes a number of "functions". Each .json file in this repository corresponds to such a function. The files are encoded as UTF-8 and each contain a JSON array with an even number of items, where each pair of items is one function input associated with the expected result.

component_value_list.json

Tests Parse a list of component values. The Unicode input is represented by a JSON string, the output as an array of component values as described below.

component_value_list.json

Tests Parse a component value. The Unicode input is represented by a JSON string, the output as a component value.

declaration_list.json

Tests Parse a list of declarations. The Unicode input is represented by a JSON string, the output as an array of declarations and at-rules.

one_declaration.json

Tests Parse a declaration. The Unicode input is represented by a JSON string, the output as a declaration.

one_rule.json

Tests Parse a rule. The Unicode input is represented by a JSON string, the output as a qualified rule or at-rule.

rule_list.json

Tests Parse a list of rules. The Unicode input is represented by a JSON string, the output as a list of qualified rules or at-rules.

stylesheet.json

Tests Parse a stylesheet. The Unicode input is represented by a JSON string, the output as a list of qualified rules or at-rules.

stylesheet_bytes.json

Tests Parse a stylesheet together with The input byte stream. The input is represented as a JSON object containing:

  • A required css_bytes, the input byte string, represented as a JSON string where code points U+0000 to U+00FF represent bytes of the same value.
  • An optional protocol_encoding, a protocol encoding label as a JSON string, or null.
  • An optional environment_encoding, an environment encoding label as a JSON string, or null.
  • An optional comment that is ignored.

The output is represented a list of qualified rules or at-rules.

color3.json

Tests the <color> syntax defined in CSS Color Level 3. The Unicode input is represented by a JSON string, the output as one of:

  • null if the input is not a valid color in CSS syntax
  • The string "currentColor" for the currentColor keyword
  • An array of length 4 for every other values: four (floating point) numbers for the Red, Green, Blue and Alpha channel. Each value is between 0 and 1.
color3_hsl.json

Same as color3.json. This file is generated by the make_color3_hsl.py Python script.

color3_keywords.json

Same as color3.json, except that the values for the Red, Green and Blue channel are between 0 and 255. This file is generated by the make_color3_keywords.py Python script.

An+B.json

Tests the An+B syntax defined in CSS Syntax Level 3. This differs from the nth grammar rule in Selectors Level 3 only in that - charecters and digits can be escaped in some cases. The Unicode input is represented by a JSON string, the output as null for invalid syntax, or an array of two integers [A, B].

Result representation

AST nodes (the results of parsing) are represented in JSON as follow. This representation was chosen to be compact (and thus less annoying to write by hand) while staying unambiguous. For example, the difference between @import and \@import is not lost: they are represented as ["at-keyword", "import"] and ["ident", "@import"], respectively.

Rules and declarations

At-rule

An array of length 4: the string "at-rule", the name (value of the at-keyword) as a string, the prelude as a nested array of component values, and the optional block as a nested array of component value, or null.

Qualified rule

An array of length 3: the string "qualified rule", the prelude as a nested array of component values, and the block as a nested array of component value.

Declaration

An array of length 4: the string "declaration", the name as a string, the value as a nested array of component values, and a the important flag as a boolean.

Component values

<ident>

Array of length 2: the string "ident", and the value as a string.

<at-keyword>

Array of length 2: the string "at-keyword", and the value as a string.

<hash>

Array of length 3: the string "hash", the value as a string, and the type as the string "id" or "unrestricted".

<string>

Array of length 2: the string "string", and the value as a string.

<bad-string>

Array of length 1: the string "bad-string".

<url>

Array of length 2: the string "url", and the value as a string.

<bad-url>

Array of length 1: the string "bad-url".

<delim>

The value as a one-character string.

<number>

Array of length 4: the string "number", the representation as a string, the value as a number, and the type as the string "integer" or "number".

<percentage>

Array of length 4: the string "percentage", the representation as a string, the value as a number, and the type as the string "integer" or "number".

<dimension>

Array of length 4: the string "dimension", the representation as a string, the value as a number, the type as the string "integer" or "number", and the unit as a string.

<unicode-range>

Array of length 3: the string "unicode-range", followed by the start and end integers as two numbers.

<include-match>

The string "~=".

<dash-match>

The string "|=".

<prefix-match>

The string "^=".

<suffix-match>

The string "$=".

<substring-match>

The string "*=".

<column>

The string "||".

<whitespace>

The string " " (a single space.)

<CDO>

The string "<!--".

<CDC>

The string "-->".

<colon>

The string ":".

<semicolon>

The string ";".

<comma>

The string ",".

{} block

An array of length N+1: the string "{}" followed by the N component values of the block’s content.

[] block

An array of length N+1: the string "[]" followed by the N component values of the block’s content.

() block

An array of length N+1: the string "()" followed by the N component values of the block’s content.

Function

An array of length N+2: the string "function" and the name of the function as a string followed by the N component values of the function’s arguments.

<bad-string>

The array of two strings ["error", "bad-string"].

<bad-url>

The array of two strings ["error", "bad-url"].

Unmatched <}>

The array of two strings ["error", "}"].

Unmatched <]>

The array of two strings ["error", "]"].

Unmatched <)>

The array of two strings ["error", ")"].

css-parsing-tests's People

Contributors

ezequiel avatar simonsapin avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.