File: 99-misc.t

package info (click to toggle)
libclass-dbi-perl 0.96-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 388 kB
  • ctags: 229
  • sloc: perl: 1,933; makefile: 43
file content (144 lines) | stat: -rw-r--r-- 3,831 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
use strict;
use Test::More;
use File::Temp qw/tempdir/;

#----------------------------------------------------------------------
# Test various errors / warnings / deprecations etc
#----------------------------------------------------------------------

BEGIN {
	eval "use DBD::SQLite";
	plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 27);
}

use File::Temp qw/tempfile/;
my (undef, $DB) = tempfile();
my @DSN = ("dbi:SQLite:dbname=$DB", '', '', { AutoCommit => 1 });

END { unlink $DB if -e $DB }

package Holiday;

use base 'Class::DBI';

sub wibble { shift->croak("Croak dies") }

{
	my $warning;
	local $SIG{__WARN__} = sub {
		$warning = $_[0];
	};
	no warnings 'once';
	local *UNIVERSAL::wonka = sub { };
	Holiday->columns(TEMP => 'wonka');
	::like $warning, qr/wonka.*clashes/, "Column clash warning for inherited";
	undef $warning;

	Holiday->columns(Primary => 'new');
	::like $warning, qr/new.*clashes/, "Column clash warning with CDBI";
	undef $warning;

	Holiday->add_constructor('by_train');
	Holiday::Camp->add_constructor('by_train');
	::is $warning, undef, "subclassed constructor";
}

{
	local $SIG{__WARN__} = sub {
		::like $_[0], qr/deprecated/, "create trigger deprecated";
	};
	Holiday->add_trigger('create' => sub { 1 });
	Holiday->add_trigger('delete' => sub { 1 });
}

{
	local $SIG{__WARN__} = sub {
		::like $_[0], qr/deprecated/, "croak() deprecated";
	};

	eval { Holiday->croak("Croak dies") };
	::like $@, qr/Croak dies/, "Croak dies";

	eval { Holiday->wibble };
	::like $@, qr/Croak dies/, "Croak dies";
}

{
	eval { Holiday->add_constraint };
	::like $@, qr/needs a name/, "Constraint with no name";
	eval { Holiday->add_constraint('check_mate') };
	::like $@, qr/needs a valid column/, "Constraint needs a column";
	eval { Holiday->add_constraint('check_mate', 'jamtart') };
	::like $@, qr/needs a valid column/, "No such column";
	eval { Holiday->add_constraint('check_mate', 'new') };
	::like $@, qr/needs a code ref/, "Need a coderef";
	eval { Holiday->add_constraint('check_mate', 'new', {}) };
	::like $@, qr/not a code ref/, "Not a coderef";

	eval { Holiday->has_a('new') };
	::like $@, qr/associated class/, "has_a needs a class";

	eval { Holiday->add_constructor() };
	::like $@, qr/name/, "add_constructor needs a method name";

	eval {
		Holiday->add_trigger(on_setting => sub { 1 });
	};
	::like $@, qr/no longer exists/, "No on_setting trigger";

	{
		local $SIG{__WARN__} = sub {
			::like $_[0], qr/new.*clashes/, "Column clash warning";
		};
	}
}

package main;

{
	package Holiday::Camp;
	use base 'Holiday';

	__PACKAGE__->table("holiday");
	__PACKAGE__->add_trigger(before_create => sub { 
		my $self = shift;
		$self->_croak("Problem with $self\n");
	});

	package main;
	eval { Holiday::Camp->create({}) };
	like $@, qr/Problem with Holiday/, '$self stringifies with no PK values';
}

eval { my $foo = Holiday->retrieve({ id => 1 }) };
like $@, qr/retrieve a reference/, "Can't retrieve a reference";

eval { my $foo = Holiday->create(id => 10) };
like $@, qr/a hashref/, "Can't create without hashref";

{
	my $foo = bless {}, 'Holiday';
	local $SIG{__WARN__} = sub { die $_[0] };
	eval { $foo->has_a(date => 'Date::Simple') };
	like $@, qr/object method/, "has_a is class-level";
}

eval { Holiday->update; };
like $@, qr/class method/, "Can't call update as class method";

is(Holiday->table, 'holiday', "Default table name");

Holiday->_flesh('Blanket');

eval { Holiday->ordered_search() };
like $@, qr/order_by/, "ordered_search no longer works";

eval { Holiday->create({ yonkey => 84 }) };
like $@, qr/not a column/, "Can't create with nonsense column";

eval { Film->_require_class('Class::DBI::__::Nonsense') };
like $@, qr/Can't locate/, "Can't require nonsense class";

eval { Holiday->search_DeleteMe };
like $@, qr/locate.*DeleteMe/, $@;