xref: /openbsd-src/gnu/usr.bin/perl/t/uni/tie.t (revision b8851fcc53cbe24fd20b090f26dd149e353f6174)
143003dfeSmillert#!perl -w
243003dfeSmillert
343003dfeSmillertBEGIN {
4*b8851fccSafresh1    chdir 't' if -d 't';
5b39c5158Smillert    require './test.pl';
643003dfeSmillert}
743003dfeSmillert
8898184e3Ssthenplan (tests => 10);
943003dfeSmillertuse strict;
1043003dfeSmillert
1143003dfeSmillert{
1243003dfeSmillert    package UTF8Toggle;
1343003dfeSmillert
1443003dfeSmillert    sub TIESCALAR {
1543003dfeSmillert	my $class = shift;
1643003dfeSmillert	my $value = shift;
1743003dfeSmillert	my $state = shift||0;
1843003dfeSmillert	return bless [$value, $state], $class;
1943003dfeSmillert    }
2043003dfeSmillert
2143003dfeSmillert    sub FETCH {
2243003dfeSmillert	my $self = shift;
2343003dfeSmillert	$self->[1] = ! $self->[1];
2443003dfeSmillert	if ($self->[1]) {
2543003dfeSmillert	    utf8::downgrade($self->[0]);
2643003dfeSmillert	} else {
2743003dfeSmillert	    utf8::upgrade($self->[0]);
2843003dfeSmillert	}
2943003dfeSmillert	$self->[0];
3043003dfeSmillert    }
3143003dfeSmillert}
3243003dfeSmillert
3343003dfeSmillertforeach my $t ("ASCII", "B\366se") {
3443003dfeSmillert    my $length = length $t;
3543003dfeSmillert
3643003dfeSmillert    my $u;
3743003dfeSmillert    tie $u, 'UTF8Toggle',  $t;
3843003dfeSmillert    is (length $u, $length, "length of '$t'");
3943003dfeSmillert    is (length $u, $length, "length of '$t'");
4043003dfeSmillert    is (length $u, $length, "length of '$t'");
4143003dfeSmillert    is (length $u, $length, "length of '$t'");
4243003dfeSmillert}
4343003dfeSmillert
4443003dfeSmillert{
45898184e3Ssthen    use utf8;
46898184e3Ssthen    use open qw( :utf8 :std );
47898184e3Ssthen    package Tìè::UTF8 {
48898184e3Ssthen        sub TIESCALAR {
49898184e3Ssthen            return bless {}, shift;
50898184e3Ssthen        }
51898184e3Ssthen    }
52898184e3Ssthen
53898184e3Ssthen    my $t;
54898184e3Ssthen    tie $t, 'Tìè::UTF8';
55898184e3Ssthen    is ref(tied($t)), 'Tìè::UTF8', "Tie'ing to a UTF8 package works.";
56898184e3Ssthen}
57898184e3Ssthen{
58b39c5158Smillert    local $::TODO = "Need more tests!";
5943003dfeSmillert    fail();
6043003dfeSmillert}
61