---
name: "TAP::Parser::Result::Test"
section: "3perl"
platform: "linux"
package: "perl"
version: "5.44.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/TAP::Parser::Result::Test/3perl"
---

# TAP::Parser::Result::Test(3perl)

Test result token.

## NAME

TAP::Parser::Result::Test - Test result token.

## VERSION

Version 3.52

## DESCRIPTION

This is a subclass of TAP::Parser::Result.  A token of this class will be returned if a test line is encountered.

```
 1..1
 ok 1 - woo hooo!
```

## OVERRIDDEN METHODS

This class is the workhorse of the TAP::Parser system.  Most TAP lines will be test lines and if `"$result->is_test"`, then you have a bunch of methods at your disposal.

### Instance Methods

*"ok"*

```
  my $ok = $result->ok;
```

Returns the literal text of the `"ok"` or `"not ok"` status.

*"number"*

```
  my $test_number = $result->number;
```

Returns the number of the test, even if the original TAP output did not supply that number.

*"description"*

```
  my $description = $result->description;
```

Returns the description of the test, if any.  This is the portion after the test number but before the directive.

*"directive"*

```
  my $directive = $result->directive;
```

Returns either `"TODO"` or `"SKIP"` if either directive was present for a test line.

*"explanation"*

```
  my $explanation = $result->explanation;
```

If a test had either a `"TODO"` or `"SKIP"` directive, this method will return the accompanying explanation, if present.

```
  not ok 17 - 'Pigs can fly' # TODO not enough acid
```

For the above line, the explanation is *not enough acid*.

*"is\_ok"*

```
  if ( $result->is_ok ) { ... }
```

Returns a boolean value indicating whether or not the test passed.  Remember that for TODO tests, the test always passes.

If the test is unplanned, this method will always return false.  See `"is_unplanned"`.

*"is\_actual\_ok"*

```
  if ( $result->is_actual_ok ) { ... }
```

Returns a boolean value indicating whether or not the test passed, regardless of its TODO status.

*"actual\_passed"*

Deprecated.  Please use `"is_actual_ok"` instead.

*"todo\_passed"*

```
  if ( $test->todo_passed ) {
     # test unexpectedly succeeded
  }
```

If this is a TODO test and an 'ok' line, this method returns true. Otherwise, it will always return false (regardless of passing status on non-todo tests).

This is used to track which tests unexpectedly succeeded.

*"todo\_failed"*

```
  # deprecated in favor of 'todo_passed'.  This method was horribly misnamed.
```

This was a badly misnamed method.  It indicates which TODO tests unexpectedly succeeded.  Will now issue a warning and call `"todo_passed"`.

*"has\_skip"*

```
  if ( $result->has_skip ) { ... }
```

Returns a boolean value indicating whether or not this test has a SKIP directive.

*"has\_todo"*

```
  if ( $result->has_todo ) { ... }
```

Returns a boolean value indicating whether or not this test has a TODO directive.

*"as\_string"*

```
  print $result->as_string;
```

This method prints the test as a string.  It will probably be similar, but not necessarily identical, to the original test line.  Directives are capitalized, some whitespace may be trimmed and a test number will be added if it was not present in the original line.  If you need the original text of the test line, use the `"raw"` method.

*"is\_unplanned"*

```
  if ( $test->is_unplanned ) { ... }
  $test->is_unplanned(1);
```

If a test number is greater than the number of planned tests, this method will return true.  Unplanned tests will *always* return false for `"is_ok"`, regardless of whether or not the test `"has_todo"`.

Note that if tests have a trailing plan, it is not possible to set this property for unplanned tests as we do not know it's unplanned until the plan is reached:

```
  print <<'END';
  ok 1
  ok 2
  1..1
  END
```
