Home

Awesome

ColorSchemeUnit

A testing framework for Sublime Text color schemes.

Continuous Integration codecov Package Control

ColorSchemeUnit

Setup

Install ColorSchemeUnit via Package Control.

Commands

CommandDescription
ColorSchemeUnit: Test SuiteRun test suite of the current file.
ColorSchemeUnit: Test FileRun tests for the current file.
ColorSchemeUnit: Show StylesShow styles at the current cursor position.
ColorSchemeUnit: Generate AssertionsGenerates assertions at the current cursor position.

Key Bindings

KeyDescription
f4Jump to Next Failure
shift+f4Jump to Previous Failure

Settings

SettingDescriptionTypeDefault
color_scheme_unit.coverageEnable coverage report.booleanfalse
color_scheme_unit.debugEnable debug messages.booleanfalse

Menu → Preferences → Settings

"color_scheme_unit.debug": true,
"color_scheme_unit.coverage": true,

Usage

Tests are similar to Sublime Text syntax tests. Here is an

// COLOR SCHEME TEST "MonokaiFree.sublime-color-scheme" "C"

#include <windows.h>
// ^^^^^ fg=#f92672 fs=
//       ^^^^^^^^^^^ fg=#e6db74 fs=

typedef int myint;
// ^^^^ fg=#66d9ef fs=italic
//      ^^^ fg=#66d9ef fs=italic
//          ^^^^^ fg=#a6e22e fs=
//               ^ fg=#f8f8f2 fs=

Tests

File names

Test must begin color_scheme_test e.g. color_scheme_test.css, color_scheme_test.php, color_scheme_test.rb.

The recommended package layout:

.
├── Monokai.sublime-color-scheme
└── tests/
  ├── color_scheme_test.css
  ├── color_scheme_test.php
  ├── color_scheme_test.rb
  └── ...

Headers

The first line must start:

<begin-comment> COLOR SCHEME TEST "<color-scheme>" "<syntax>"
ParameterDescription
<begin-comment>Any syntax comment e.g. //, <!--, /**, #, --
<color-scheme>Name or resource path to color scheme.
<syntax>Name or resource path to syntax.

Examples:

// COLOR SCHEME TEST "MonokaiFree.sublime-color-scheme" "Ruby"
// COLOR SCHEME TEST "Packages/MonokaiFree/MonokaiFree.sublime-color-scheme" "Ruby"

Conditional syntaxes

If a syntax may not exist, e.g. testing third party syntax support, use the SKIP IF NOT keywords and if the the syntax doesn't exist the test will be skipped instead of failing.

// COLOR SCHEME TEST "Monokai.sublime-color-scheme" SKIP IF NOT "Vue"

Whitespace

Test files must use spaces.

Assertions

Each assertion in the color scheme test file must first start the comment token, and then a ^ (caret) token. ^ this will assert against the scope on the most recent non-test line. It will test it at the same column as the ^. Consecutive ^'s will test each column. What to assert is specified after the caret.

AssertionExample
Foreground colorfg=#f8f8f2
Background colorbg=#272822
Font style (space delimited list)fs=italic, fs=italic bold
Sublime Text build version (only >= constraint is supported)build>=3127
def somefunc(param1='', param2=0):
# ^ fg=#66d9ef
# ^ bg=#272822
# ^ fs=italic
# ^ fg=#66d9ef bg=#272822
# ^ fg=#66d9ef bg=#272822 fs=italic bold
# ^ fg=#66d9ef bg=#272822 fs=italic build>=3127

For more usage examples, the MonokaiFree color scheme has an extensive test suite.

Python example

# COLOR SCHEME TEST "MonokaiFree.sublime-color-scheme" "Python"

import os
# ^ fg=#f8f8f2 bg=#272822 fs=
#  ^^^ fg=#f92672 fs=
#      ^^ fg=#f8f8f2

def f_name(arg1='', arg2=0):
# ^ fg=#66d9ef fs=italic
#   ^^^^^^ fg=#a6e22e fs=
#          ^ fg=#fd971f fs=italic
#              ^ fg=#f92672 fs=
#               ^^ fg=#e6db74 fs=
#                 ^ fg=#f8f8f2 fs=
#                   ^ fg=#fd971f fs=italic
#                       ^ fg=#f92672 fs=
#                        ^ fg=#ae81ff fs=
    if arg1 > arg2: # interesting
    #   ^ fg=#f92672 fs=
    #           ^ fg=#f92672 fs=
        print 'Gre\'ater'
        # ^ fg=#f92672 fs=
        #     ^^^^ fg=#e6db74 fs=
        #         ^^ fg=#ae81ff fs=
        #           ^^^^^ fg=#e6db74 fs=

HTML example

<!-- COLOR SCHEME TEST "MonokaiFree.sublime-color-scheme" "HTML" -->
<!DOCTYPE html>
<!-- ^^^^ fg=#f92672 fs= -->
<!--      ^^^^^ fg=#f8f8f2 fs= -->
<html>
    <head>

        <meta charset="utf-8">
<!--    ^ fg=#f8f8f2 fs= -->
        <!--^ fg=#f92672 fs= -->
        <!--  ^ fg=#a6e22e fs= -->
        <!--         ^ fg=#f8f8f2 fs= -->
        <!--           ^ fg=#e6db74 fs= -->
        <!--                 ^ fg=#f8f8f2 fs= -->
    </head>
    <body>
        <p class="title" id='title'>Title</p>
    <!-- ^ fg=#f92672 fs= -->
        <!-- ^ fg=#a6e22e fs= -->
        <!--    ^ fg=#f8f8f2 fs= -->
        <!--     ^^^^^^^ fg=#e6db74 fs= -->
        <!--             ^^ fg=#a6e22e fs= -->
        <!--               ^ fg=#f8f8f2 fs= -->
        <!--                ^^^^^^^ fg=#e6db74 fs= -->
        <!--                       ^ fg=#f8f8f2 fs= -->
        <!--                               ^ fg=#f92672 fs= -->
        <!--                                ^ fg=#f8f8f2 fs= -->

    </body>
<!--  ^ fg=#f92672 fs= -->
</html>
<!-- ^ fg=#f92672 fs= -->

PHP example

<?php // COLOR SCHEME TEST "MonokaiFree.sublime-color-scheme" "PHP"

use \Psr\Http\Message\ServerRequestInterface as Request;
//^ fg=#f92672 fs=
//  ^^^^^^^^^^^^^^^^^^ fg=#f8f8f2 fs=
//                    ^^^^^^^^^^^^^^^^^^^^^^ fg=#66d9ef fs=italic
//                                           ^^ fg=#f92672 fs=
//                                              ^^^^^^^ fg=#a6e22e fs=
//                                                     ^ fg=#f8f8f2 fs=
use \Psr\Http\Message\ResponseInterface as Response;
//^ fg=#f92672 fs=
//  ^^^^^^^^^^^^^^^^^^ fg=#f8f8f2 fs=
//                    ^^^^^^^^^^^^^^^^^ fg=#66d9ef fs=italic
//                                      ^^ fg=#f92672 fs=
//                                         ^^^^^^^^ fg=#a6e22e fs=
//                                                 ^ fg=#f8f8f2 fs=

require 'vendor/autoload.php';
// ^^^^ fg=#f92672 fs=
//      ^^^^^^^^^^^^^^^^^^^^^ fg=#e6db74 fs=
//                           ^ fg=#f8f8f2 fs=

CI

To run tests in CI see UnitTesting documentation.

Changelog

See CHANGELOG.md.

License

Released under the GPL-3.0-or-later License.