Skip to content

Instantly share code, notes, and snippets.

@jguice
Last active October 24, 2015 02:05
Show Gist options
  • Save jguice/a75d656cf546a0a4bc25 to your computer and use it in GitHub Desktop.
Save jguice/a75d656cf546a0a4bc25 to your computer and use it in GitHub Desktop.
Sublime Text 3 RubyTest custom tmLanguage file (allows coloring of more rspec 3 output)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<!-- TODO put most specific matchers first -->
<!-- TODO reorg, cleanup, and comment entries (e.g. which ones are for rspec 3, etc.) -->
<dict>
<key>bundleUUID</key>
<string>72174d10-bb12-11e0-962b-112233445566</string>
<key>name</key>
<string>TestConsole</string>
<key>patterns</key>
<array>
<dict>
<key>comment</key>
<string>pending method</string>
<key>match</key>
<string>.+\(PENDING: .+</string>
<key>name</key>
<string>test.pending</string>
</dict>
<dict>
<key>comment</key>
<string>test fail detail</string>
<key>match</key>
<string>(rspec .+:\d+)</string>
<key>name</key>
<string>test.fail</string>
</dict>
<dict>
<key>comment</key>
<string>comment</string>
<key>match</key>
<string>\s*#\s+.+</string>
<key>name</key>
<string>test.comment</string>
</dict>
<dict>
<key>comment</key>
<string>test fail message</string>
<key>match</key>
<string>.+\(FAILED.+</string>
<key>name</key>
<string>test.fail</string>
</dict>
<dict>
<key>comment</key>
<string>test fail message</string>
<key>match</key>
<string>\s+Failure/Error: .+</string>
<key>name</key>
<string>test.fail</string>
</dict>
<dict>
<key>comment</key>
<string>test fail message</string>
<key>match</key>
<string>\s{5,}expected .+</string>
<key>name</key>
<string>test.fail</string>
</dict>
<!-- diff -->
<!-- TODO add scopes for diff elements instead of reusing others -->
<dict>
<key>comment</key>
<string>diff header</string>
<key>match</key>
<string>\s+Diff:</string>
<key>name</key>
<string>test.fail</string>
</dict>
<dict>
<key>comment</key>
<string>diff info</string>
<key>match</key>
<string>\s+@@.+</string>
<key>name</key>
<string>test.method</string>
</dict>
<dict>
<key>comment</key>
<string>diff removed</string>
<key>match</key>
<string>\s+-.+</string>
<key>name</key>
<string>diff.removed</string>
</dict>
<dict>
<key>comment</key>
<string>diff added</string>
<key>match</key>
<string>\s+\+.+</string>
<key>name</key>
<string>test.pass</string>
</dict>
<dict>
<key>comment</key>
<string>it message</string>
<key>match</key>
<string>\s{4}[^#].+</string>
<key>name</key>
<string>test.pass</string>
</dict>
<dict>
<key>comment</key>
<string>it message</string>
<key>match</key>
<string>\s{2}#.+</string>
<key>name</key>
<string>test.method</string>
</dict>
<dict>
<key>comment</key>
<string>pending class#method</string>
<key>match</key>
<string>\s{2}[a-zA-Z]+#[a-z]+ .*</string>
<key>name</key>
<string>test.pending</string>
</dict>
<!-- think this actually looks nice as white -->
<!-- <dict>
<key>comment</key>
<string>pending message</string>
<key>match</key>
<string>Pending:</string>
<key>name</key>
<string>test.pending</string>
</dict> -->
<dict>
<key>comment</key>
<string>deprecation warning</string>
<key>match</key>
<string>Deprecation Warnings:</string>
<key>name</key>
<string>test.deprecation</string>
</dict>
<dict>
<key>comment</key>
<string>test pass</string>
<key>match</key>
<string>(^|\s|)\d+ (deprecation warnings* total)</string>
<key>name</key>
<string>test.deprecation</string>
</dict>
<dict>
<key>comment</key>
<string>test pass</string>
<key>match</key>
<string>(^|\s|)\d+ (tests|assertions|examples?|passed)</string>
<key>name</key>
<string>test.pass</string>
</dict>
<dict>
<key>comment</key>
<string>test error</string>
<key>match</key>
<string>E, .+</string>
<key>name</key>
<string>test.error</string>
</dict>
<dict>
<key>comment</key>
<string>test error</string>
<key>match</key>
<string>(\d+ errors)|(\d+\) Error:|Failing \w*:|cucumber(\s\S*)|\d+ failed)</string>
<key>name</key>
<string>test.error</string>
</dict>
<dict>
<key>comment</key>
<string>test fail</string>
<key>match</key>
<string>(\d+ failures?)|(\d+\) Failure:)</string>
<key>name</key>
<string>test.fail</string>
</dict>
<dict>
<key>comment</key>
<string>test fail</string>
<key>match</key>
<string>\s{2}\d\) .+</string>
<key>name</key>
<string>foreground</string>
</dict>
<dict>
<key>skipped</key>
<string>test cucumber skipped</string>
<key>match</key>
<string>\d+ skipped</string>
<key>name</key>
<string>test.skipped</string>
</dict>
<dict>
<key>pending</key>
<string>test cucumber pending in summary</string>
<key>match</key>
<string>(\d+ pending|\d+ undefined)</string>
<key>name</key>
<string>test.pending</string>
</dict>
<!-- Matches the Scenario: description line comment and the comment portion of the failing scenarios block of text -->
<dict>
<key>comment</key>
<string>test cucumber comment</string>
<key>match</key>
<string>\s#\s{1}.+</string>
<key>name</key>
<string>test.comment</string>
</dict>
<!-- Cuke PASS -->
<dict>
<key>comment</key>
<string>test cucumber comment</string>
<key>match</key>
<string>(\s{4}Given.+|\s{4}When.+|\s{4}Then.+|\s{4}And.+|\s{4}But.+)(#\s\S+$)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>test.pass</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>test.comment</string>
</dict>
</dict>
</dict>
<!-- End Cuke PASS -->
<!-- Print code or other non passing/failing/pending stuff in step -->
<dict>
<key>comment</key>
<string>test cucumber comment</string>
<key>match</key>
<string>(^\s{6}.+)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>test.skipped</string>
</dict>
</dict>
</dict>
<!-- End Print code in step -->
<!-- Cuke Pending -->
<dict>
<key>begin</key>
<string>.*(#\s\S+?\s)(#PEND)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>test.pending</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>test.comment</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>test.hidden_comment</string>
</dict>
</dict>
<key>end</key>
<string>(^\s+$)</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>^\s{6}.*</string>
<key>name</key>
<string>test.pending</string>
</dict>
<dict>
<key>match</key>
<string>(\s{4}Given.+|\s{4}When.+|\s{4}Then.+|\s{4}And.+|\s{4}But.+)(#.+)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>test.skipped</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>test.comment</string>
</dict>
</dict>
</dict>
</array>
</dict>
<!-- End Cuke Pending -->
<!-- Cuke Error -->
<dict>
<key>begin</key>
<string>.*(#\s\S+?\s)(#ERROR)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>test.error</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>test.comment</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>test.hidden_comment</string>
</dict>
</dict>
<key>end</key>
<string>(^\s{2}Scenario:)|(^Failing Scenarios:)</string>
<key>endCaptures</key>
<dict>
<!-- using the 2nd key allows us to only target the Failing Scenarios: text at the bottom -->
<key>2</key>
<dict>
<key>name</key>
<string>test.error</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>^\s{6}.*</string>
<key>name</key>
<string>test.error</string>
</dict>
<dict>
<key>match</key>
<string>(\s{4}Given.+|\s{4}When.+|\s{4}Then.+|\s{4}And.+|\s{4}But.+)(#.+)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>test.skipped</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>test.comment</string>
</dict>
</dict>
</dict>
</array>
</dict>
<!-- End Cuke Error -->
<!-- Cuke Undefined section (at bottom) -->
<dict>
<key>begin</key>
<string>^You can implement step definitions.+</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>test.pending</string>
</dict>
</dict>
<key>end</key>
<string>(^\t)</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>.*</string>
<key>name</key>
<string>test.pending</string>
</dict>
</array>
</dict>
<!-- End Undefined -->
<dict>
<key>comment</key>
<string>dots painting</string>
<key>begin</key>
<string>Started</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\.+|passed</string>
<key>name</key>
<string>test.pass</string>
</dict>
<dict>
<key>match</key>
<string>E+</string>
<key>name</key>
<string>test.error</string>
</dict>
<dict>
<key>match</key>
<string>F+</string>
<key>name</key>
<string>test.fail</string>
</dict>
</array>
<key>end</key>
<string>Finished</string>
</dict>
<dict>
<key>comment</key>
<string>color syntax response</string>
<key>match</key>
<string>Syntax OK</string>
<key>name</key>
<string>test.pass</string>
</dict>
</array>
<key>scopeName</key>
<string>tests.ruby</string>
<key>uuid</key>
<string>72174d10-bb12-11e0-962b-112233445566</string>
</dict>
</plist>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment