Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/awncorp/test-ability

Property-Based Testing for Perl 5
https://github.com/awncorp/test-ability

automation perl perl5 property-based-testing testing

Last synced: about 2 months ago
JSON representation

Property-Based Testing for Perl 5

Awesome Lists containing this project

README

        

NAME

Test::Ability

ABSTRACT

Property-Based Testing for Perl 5

SYNOPSIS

package main;

use Test::Ability;

my $t = Test::Ability->new;

DESCRIPTION

This package provides methods for generating values and test-cases,
providing a framework for performing property-based testing.

INTEGRATES

This package integrates behaviors from:

Data::Object::Role::Buildable

Data::Object::Role::Stashable

LIBRARIES

This package uses type constraints from:

Types::Standard

SCENARIOS

This package supports the following scenarios:

stash

# given: synopsis

$t->stash(direction => sub {
my ($self) = @_;

{
move => ('forward', 'reverse')[rand(1)],
time => time
}
});

The package provides a stash object for default and user-defined value
generators. You can easily extend the default generators by adding your
own. Once defined, custom generators can be specified in the gen-spec
(generator specification) arrayref provided to the test method (and
others).

ATTRIBUTES

This package has the following attributes:

arguments

arguments(ArrayRef)

This attribute is read-only, accepts (ArrayRef) values, and is
optional.

invocant

invocant(Object)

This attribute is read-only, accepts (Object) values, and is optional.

METHODS

This package implements the following methods:

array

array(Maybe[Int] $min, Maybe[Int] $max) : ArrayRef

The array method returns a random array reference.

array example #1

# given: synopsis

$t->array;

array_object

array_object(Maybe[Int] $min, Maybe[Int] $max) : Object

The array_object method returns a random array object.

array_object example #1

# given: synopsis

$t->array_object;

choose

choose(ArrayRef[ArrayRef] $args) : Any

The choose method returns a random value from the set of specified
generators.

choose example #1

# given: synopsis

$t->choose([['datetime'], ['words', [2,3]]]);

code

code(Maybe[Int] $min, Maybe[Int] $max) : CodeRef

The code method returns a random code reference.

code example #1

# given: synopsis

$t->code;

code_object

code_object(Maybe[Int] $min, Maybe[Int] $max) : Object

The code_object method returns a random code object.

code_object example #1

# given: synopsis

$t->code_object;

date

date(Maybe[Str] $min, Maybe[Str] $max) : Str

The date method returns a random date.

date example #1

# given: synopsis

$t->date;

datetime

datetime(Maybe[Str] $min, Maybe[Str] $max) : Str

The datetime method returns a random date and time.

datetime example #1

# given: synopsis

$t->datetime;

hash

hash(Maybe[Int] $min, Maybe[Int] $max) : HashRef

The hash method returns a random hash reference.

hash example #1

# given: synopsis

$t->hash;

hash_object

hash_object(Maybe[Int] $min, Maybe[Int] $max) : Object

The hash_object method returns a random hash object.

hash_object example #1

# given: synopsis

$t->hash_object;

maybe

maybe(ArrayRef[ArrayRef] $args) : Any

The maybe method returns a random choice using the choose method, or
the undefined value.

maybe example #1

# given: synopsis

$t->maybe([['date'], ['time']]);

number

number(Maybe[Int] $min, Maybe[Int] $max) : Int

The number method returns a random number.

number example #1

# given: synopsis

$t->number;

number_object

number_object(Maybe[Int] $min, Maybe[Int] $max) : Object

The number_object method returns a random number object.

number_object example #1

# given: synopsis

$t->number_object;

object

object() : Object

The object method returns a random object.

object example #1

# given: synopsis

$t->object;

regexp

regexp(Maybe[Str] $exp) : RegexpRef

The regexp method returns a random regexp.

regexp example #1

# given: synopsis

$t->regexp;

regexp_object

regexp_object(Maybe[Str] $exp) : Object

The regexp_object method returns a random regexp object.

regexp_object example #1

# given: synopsis

$t->regexp_object;

scalar

scalar(Maybe[Int] $min, Maybe[Int] $max) : Ref

The scalar method returns a random scalar reference.

scalar example #1

# given: synopsis

$t->scalar;

scalar_object

scalar_object(Maybe[Int] $min, Maybe[Int] $max) : Object

The scalar_object method returns a random scalar object.

scalar_object example #1

# given: synopsis

$t->scalar_object;

string

string(Maybe[Int] $min, Maybe[Int] $max) : Str

The string method returns a random string.

string example #1

# given: synopsis

$t->string;

string_object

string_object(Maybe[Int] $min, Maybe[Int] $max) : Object

The string_object method returns a random string object.

string_object example #1

# given: synopsis

$t->string_object;

test

test(Str $name, Int $cycles, ArrayRef[ArrayRef] $spec, CodeRef $callback) : Undef

The test method generates subtests using "subtest" in Test::More,
optionally generating and passing random values to each iteration as
well as a Data::Object::Try object for easy execution of callbacks and
interception of exceptions. This callback expected should have the
signature ($tryable, @arguments) where @arguments gets assigned the
generated values in the order specified. The callback must return the
$tryable object, which is called for you automatically, executing the
subtest logic you've implemented.

test example #1

# given: synopsis

# use Test::More;

sub is_an_adult {
my ($age) = @_;

$age >= 18;
}

$t->test('is_an_adult', 100, [['number', [10, 30]]], sub {
my ($tryable, $age) = @_;

$tryable->call(sub {
if ($age >= 18) {
ok is_an_adult($age),
"age is $age, is an adult";
}
else {
ok !is_an_adult($age),
"age is $age, is not an adult";
}
});

$tryable
});

time

time(Maybe[Str] $min, Maybe[Str] $max) : Str

The time method returns a random time.

time example #1

# given: synopsis

$t->time;

undef

undef() : Undef

The undef method returns the undefined value.

undef example #1

# given: synopsis

$t->undef;

undef_object

undef_object() : Object

The undef_object method returns the undefined value as an object.

undef_object example #1

# given: synopsis

$t->undef_object;

word

word() : Str

The word method returns a random word.

word example #1

# given: synopsis

$t->word;

words

words(Maybe[Int] $min, Maybe[Int] $max) : Str

The words method returns random words.

words example #1

# given: synopsis

$t->words;

AUTHOR

Al Newkirk, [email protected]

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under
the terms of the The Apache License, Version 2.0, as elucidated in the
"license file"
.

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues