Skip to content

awncorp/test-ability

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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