IntelliJ Platform SDK DevGuide

Edit page

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 copyFileToProject() and copyDirectoryToProject() methods in the CodeInsightTestFixture class.

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 CodeInsightTestFixture.configureByFile() or 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.

Special Markup

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> and </selection> specify the start and end of the text range to be selected.
  • <block> and </block> specify the start and end points of the column selection.
Last modified: 14 April 2020