Move is_valid_class_name into XS
[gitmo/Mouse.git] / t / 001_mouse / 060-threads.t
CommitLineData
f259aaad 1#!perl
2use strict;
3use warnings;
4use constant HAS_THREADS => eval{ require threads };
5
6use Test::More HAS_THREADS ? (tests => 6) : (skip_all => "This is a test for threads ($@)");
7
8{
9 package MyClass;
10 use Mouse;
11
12 has foo => (
13 is => 'rw',
aff73a9e 14 isa => 'Foo',
15 );
16
17 package Foo;
18 use Mouse;
19
20 has value => (
21 is => 'rw',
f259aaad 22 );
23}
24
aff73a9e 25my $o = MyClass->new(foo => Foo->new(value => 42));
f259aaad 26threads->create(sub{
aff73a9e 27 my $x = MyClass->new(foo => Foo->new(value => 1));
28 is $x->foo->value, 1;
f259aaad 29
aff73a9e 30 $x->foo(Foo->new(value => 2));
f259aaad 31
aff73a9e 32 is $x->foo->value, 2;
f259aaad 33
34 MyClass->meta->make_immutable();
35
aff73a9e 36 $x = MyClass->new(foo => Foo->new(value => 10));
37 is $x->foo->value, 10;
f259aaad 38
aff73a9e 39 $x->foo(Foo->new(value => 20));
f259aaad 40
aff73a9e 41 is $x->foo->value, 20;
f259aaad 42})->join();
43
aff73a9e 44is $o->foo->value, 42;
f259aaad 45ok !$o->meta->is_immutable;
46