#!perl # Test suite for Readonly::XS. use strict; use warnings; package Readonly; use Test::More tests => 10; use vars qw/$x $y/; # Find the module (2 tests) BEGIN { eval 'use Readonly::XS'; $@ =~ s/ at .*// if $@; is substr($@,0,71) => "Readonly::XS is not a standalone module. You should not use it directly", 'Unauthorized use'; $Readonly::XS::MAGIC_COOKIE = "Do NOT use or require Readonly::XS unless you're me."; delete $INC{'Readonly/XS.pm'}; eval 'use Readonly::XS'; is $@ => '', 'Authorized use'; } # Functions loaded? (2 tests) ok defined &is_sv_readonly, 'is_sv_readonly loaded'; ok defined &make_sv_readonly, 'make_sv_readonly loaded'; # is_sv_readonly (4 tests) ok is_sv_readonly("hello"), 'constant string is readonly'; ok is_sv_readonly(7), 'constant number is readonly'; *x = \42; ok is_sv_readonly($x), 'constant typeglob thingy is readonly'; $y = 'r/w'; ok !is_sv_readonly($y), 'inconstant variable is not readonly'; # make_sv_readonly (2 tests) make_sv_readonly($y); ok is_sv_readonly($y), 'status changed to readonly'; eval {$y = 75}; $@ =~ s/ at .*// if $@; is $@ => "Modification of a read-only value attempted\n", 'verify readonly-ness';