hls-test-utils-1.0.0.0: Utilities used in the tests of Haskell Language Server
Safe HaskellNone
LanguageHaskell2010

Test.Hls

Synopsis

Documentation

withResource #

Arguments

:: IO a

initialize the resource

-> (a -> IO ())

free the resource

-> (IO a -> TestTree)

IO a is an action which returns the acquired resource. Despite it being an IO action, the resource it returns will be acquired only once and shared across all the tests in the tree.

-> TestTree 

Acquire the resource to run this test (sub)tree and release it afterwards

askOption :: IsOption v => (v -> TestTree) -> TestTree #

Customize the test tree based on the run-time options

localOption :: IsOption v => v -> TestTree -> TestTree #

Locally set the option value for the given test subtree

adjustOption :: IsOption v => (v -> v) -> TestTree -> TestTree #

Locally adjust the option value for the given test subtree

defaultMain :: TestTree -> IO () #

Parse the command line arguments and run the tests.

When the tests finish, this function calls exitWith with the exit code that indicates whether any tests have failed. Most external systems (stack, cabal, travis-ci, jenkins etc.) rely on the exit code to detect whether the tests pass. If you want to do something else after defaultMain returns, you need to catch the exception and then re-throw it. Example:

import Test.Tasty
import Test.Tasty.HUnit
import System.Exit
import Control.Exception

test = testCase "Test 1" (2 @?= 3)

main = defaultMain test
  `catch` (\e -> do
    if e == ExitSuccess
      then putStrLn "Yea"
      else putStrLn "Nay"
    throwIO e)

defaultIngredients :: [Ingredient] #

List of the default ingredients. This is what defaultMain uses.

At the moment it consists of listingTests and consoleTestReporter.

defaultMainWithIngredients :: [Ingredient] -> TestTree -> IO () #

Parse the command line arguments and run the tests using the provided ingredient list.

When the tests finish, this function calls exitWith with the exit code that indicates whether any tests have failed. See defaultMain for details.

includingOptions :: [OptionDescription] -> Ingredient #

This ingredient doesn't do anything apart from registering additional options.

The option values can be accessed using askOption.

after #

Arguments

:: DependencyType

whether to run the tests even if some of the dependencies fail

-> String

the pattern

-> TestTree

the subtree that depends on other tests

-> TestTree

the subtree annotated with dependency information

The after combinator declares dependencies between tests.

If a TestTree is wrapped in after, the tests in this tree will not run until certain other tests («dependencies») have finished. These dependencies are specified using an AWK pattern (see the «Patterns» section in the README).

Moreover, if the DependencyType argument is set to AllSucceed and at least one dependency has failed, this test tree will not run at all.

Tasty does not check that the pattern matches any tests (let alone the correct set of tests), so it is on you to supply the right pattern.

Examples

Expand

The following test will be executed only after all tests that contain Foo anywhere in their path finish.

after AllFinish "Foo" $
   testCase "A test that depends on Foo.Bar" $ ...

Note, however, that our test also happens to contain Foo as part of its name, so it also matches the pattern and becomes a dependency of itself. This will result in a DependencyLoop exception. To avoid this, either change the test name so that it doesn't mention Foo or make the pattern more specific.

You can use AWK patterns, for instance, to specify the full path to the dependency.

after AllFinish "$0 == \"Tests.Foo.Bar\"" $
   testCase "A test that depends on Foo.Bar" $ ...

Or only specify the dependency's own name, ignoring the group names:

after AllFinish "$NF == \"Bar\"" $
   testCase "A test that depends on Foo.Bar" $ ...

Since: tasty-1.2

after_ #

Arguments

:: DependencyType

whether to run the tests even if some of the dependencies fail

-> Expr

the pattern

-> TestTree

the subtree that depends on other tests

-> TestTree

the subtree annotated with dependency information

Like after, but accepts the pattern as a syntax tree instead of a string. Useful for generating a test tree programmatically.

Examples

Expand

Only match on the test's own name, ignoring the group names:

after_ AllFinish (EQ (Field NF) (StringLit "Bar")) $
   testCase "A test that depends on Foo.Bar" $ ...

Since: tasty-1.2

testGroup :: TestName -> [TestTree] -> TestTree #

Create a named group of test cases or other groups

type TestName = String #

The name of a test or a group of tests

data DependencyType #

These are the two ways in which one test may depend on the others.

This is the same distinction as the hard vs soft dependencies in TestNG.

Since: tasty-1.2

Constructors

AllSucceed

The current test tree will be executed after its dependencies finish, and only if all of the dependencies succeed.

AllFinish

The current test tree will be executed after its dependencies finish, regardless of whether they succeed or not.

Instances

Instances details
Eq DependencyType 
Instance details

Defined in Test.Tasty.Core

Show DependencyType 
Instance details

Defined in Test.Tasty.Core

data TestTree #

The main data structure defining a test suite.

It consists of individual test cases and properties, organized in named groups which form a tree-like hierarchy.

There is no generic way to create a test case. Instead, every test provider (tasty-hunit, tasty-smallcheck etc.) provides a function to turn a test case into a TestTree.

Groups can be created using testGroup.

mkTimeout #

Arguments

:: Integer

microseconds

-> Timeout 

A shortcut for creating Timeout values

pattern NoTimeout :: Timeout #

defaultTestRunner :: TestTree -> IO () Source #

Run defaultMainWithRerun, limiting each single test case running at most 10 minutes

def :: Default a => a #

The default value for this type.

runSessionWithServer' Source #

Arguments

:: [PluginDescriptor IdeState]

plugins to load on the server

-> Config

lsp config for the server

-> SessionConfig

config for the test session

-> ClientCapabilities 
-> FilePath 
-> Session a 
-> IO a 

Host a server, and run a test session on it Note: cwd will be shifted into root in Session a

data PluginDescriptor ideState #

data IdeState #

A Shake database plus persistent store. Can be thought of as storing mappings from (FilePath, k) to RuleResult k.