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 test project files exist either in a temporary directory or in an in-memory file system, depending on which implementation of
TempDirTestFixture is used.
BasePlatformTestCase (renamed from
LightPlatformCodeInsightFixtureTestCase 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 usually 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 your plugin's content root, 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 from
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 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 selected text range.
</block>specify the column selection's start and end points.