A common task when writing plugin tests is testing various kinds of highlighting (inspections, annotators, parser error highlighting etc.) The IntelliJ Platform provides a dedicated utility and markup format for this task.
To test the highlighting for the file currently loaded into the in-memory editor, you invoke the checkHighlighting()
method. The parameters to the method specify which severities should be taken into account when comparing the results with the expected results: errors are always taken into account, whereas warnings, weak warnings and infos are optional. Alternatively, you can use the testHighlighting()
method, which loads a testdata
file into the in-memory editor and highlights it as a single operation.
If you need to test inspections (rather than generic highlighting provided by a highlighting lexer or annotator), you need to enable inspections that you're testing. This is done by calling CodeInsightTestFixture.enableInspections()
in the setup method of your test or directly in a test method, before the call to checkHighlighting()
.
The expected results of the highlighting are specified directly in the source file. The platform supports an extensive XML-like markup language for this. In its simplest form, the markup looks like this:
<warning descr="expected error message">code to be highlighted</warning>
Or, as a more specific example:
public int <warning descr="The compareTo() method does not reference 'foo' which is referenced from equals(); inconsistency may result">compareTo</warning>(Simple other) {
return 0;
}
The tag name specifies the severity of the expected highlighting. The following severities are supported:
<error>
<warning>
<weak_warning>
<info>
<inject>
(for an injected fragment)<symbolName>
(for a marker that highlights an identifier according to its type)- any custom severity can be referenced by its name
The tag can also have the following optional attributes:
descr
- expected message associated with the highlighter (if not specified, any text will match; if the message contains a quotation mark, it can be escaped by putting two backslash characters before it)foregroundColor
,backgroundColor
,effectColor
expected colors for the highlightingeffectType
expected effect type for the highlighting (seeEffectType
enum for possible values)fontType
expected font style for the highlighting (0 - normal, 1 - bold, 2 - italic, 3 - bold italic)