The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/local/bin/perl

use lib qw(./t);
use warnings;
use strict;
use Test_Framework;

# Test some options associated with classes:
#   --	save.
#   --	accept_refs.
#   --	instance_variable and class variable names.
#   --	creating new objects from instances.

use Class::Generate qw(&class);

use vars qw($o);

Test {
    class Not_Saved => [ mem => "\$" ], -options => { save => 0 };
    ! -e "Saved.pm";
};
Test {	# Assumes current directory is writeable.
    class Saved => [ mem => "\$" ], -options => { save => 1 };
    -e "Saved.pm";
};
unlink "Saved.pm" if -e "Saved.pm";

Test {
    class No_Refs => {
	mem_a => '@',
	mem_h => '%'
    }, -options => { accept_refs => 0 };
    1;
};
$o = new No_Refs;
Test_Failure { $o->mem_a([]) };
Test_Failure { $o->mem_h({}) };

Test {
    class Names_Changed => {
	mem => "\$",
	'&f' => 'return $this->mem;',
	'&g' => { class_method => 1, body => 'return $c;' }
    }, -options => { instance_var => 'this', class_var => 'c' };
    $o = new Names_Changed mem => 1;
    $o->f == 1 && Names_Changed->g eq 'Names_Changed';
};

Test {
    class From_Instances => { mem => "\$" }, -options => { nfi => 1 };
    $o = new From_Instances mem => 1;
    ($o->new(mem => 2))->mem == 2;
};

Report_Results;