File: 060-threads.t

package info (click to toggle)
libmouse-perl 2.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,156 kB
  • sloc: perl: 14,569; ansic: 218; makefile: 8
file content (73 lines) | stat: -rw-r--r-- 1,336 bytes parent folder | download | duplicates (4)
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
#!perl

use strict;
use warnings;
use constant HAS_THREADS => eval{ require threads && require threads::shared };
use Test::More;

use if !HAS_THREADS, 'Test::More',
    (skip_all => "This is a test for threads ($@)");
use if $Test::More::VERSION >= 2.00, 'Test::More',
    (skip_all => "Test::Builder2 has bugs about threads");

{
    package MyTraits;
    use Mouse::Role;

    package MyClass;
    use Mouse;

    has foo => (
        is => 'rw',
        isa => 'Foo',
    );
    has bar => (
        is => 'rw',

        lazy    => 1,
        default => sub { 42 },
    );

    package Foo;
    use Mouse;

    has value => (
        is => 'rw',
        isa => 'Int',

        traits => [qw(MyTraits)],
    );
}
pass;

my $o = MyClass->new(foo => Foo->new(value => 42));
threads->create(sub{
    my $x = MyClass->new(foo => Foo->new(value => 1));
    is $x->foo->value, 1;

    $x->foo(Foo->new(value => 2));

    is $x->foo->value, 2;

    MyClass->meta->make_immutable();

    $x = MyClass->new(foo => Foo->new(value => 10));
    is $x->foo->value, 10;

    $x->foo(Foo->new(value => 20));

    is $x->foo->value, 20;

    is $x->bar, 42, 'callback for default';
})->join();

is $o->foo->value, 42;

$o = MyClass->new(foo => Foo->new(value => 43));
is $o->foo->value, 43;

ok !$o->meta->is_immutable;

pass "done";

done_testing;