Test Project and Testdata Directories
The test fixture creates a test project environment. Unless you customize the project creation, the test project will have one module with one source root called
src. The files for the test project exist either in a temporary directory or in an in-memory file system, depending on which implementation of
TempDirTestFixture is used.
LightPlatformCodeInsightFixtureTestCase (renamed to
BasePlatformTestCase in 2019.2) uses an in-memory implementation; if you set up the test environment by calling
IdeaTestFixtureFactory.createCodeInsightFixture(), you can specify the implementation to use.
In your plugin, you normally store the test data for your tests (such as files on which plugin features will be executed and expected output files) in the
testdata directory. This is just a directory under the content root of your plugin, but not under a source root. Files in
testdata usually are not valid source code and must not be compiled.
To specify the location of
testdata, you must override the
getTestDataPath() method. The default implementation assumes running as part of the IntelliJ Platform source tree and is not appropriate for third-party plugins.
To copy files or directories from your
testdata directory to the test project directory, you can use the
copyDirectoryToProject() methods in the
Most operations in plugin tests require a file open in the in-memory editor, in which highlighting, completion and other operations will be performed. The in-memory editor instance is returned by
CodeInsightTestFixture.getEditor(). To copy a file from the
testdata directory to the test project directory and immediately open it in the editor, you can use the
configureByFiles() methods. The latter copies multiple files to the test project directory and opens the first of them in the in-memory editor.
Alternatively, you can use one of the other methods which take parameters annotated with
@TestDataFile. These methods copy the specified files from the
testdata directory to the test project directory, open the first of the specified files in the in-memory editor, and then perform the requested operation such as highlighting or code completion.
When a file is opened in the in-memory editor, special markup in the file content can be used to specify the caret position or selection.
You can use one of the following markers:
<caret>specifies the position where the caret should be placed.
</selection>specify the start and end of the text range to be selected.
</block>specify the start and end points of the column selection.