File: 45_references.t

package info (click to toggle)
libdbm-deep-perl 2.0008-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 884 kB
  • sloc: perl: 7,383; sql: 36
file content (75 lines) | stat: -rw-r--r-- 1,778 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
74
75
use strict;
use warnings FATAL => 'all';

use Test::More;
use Test::Exception;
use t::common qw( new_dbm );

use_ok( 'DBM::Deep' );

my $dbm_factory = new_dbm(
    locking => 1,
    autoflush => 1,
    num_txns  => 16,
);
while ( my $dbm_maker = $dbm_factory->() ) {
    my $db1 = $dbm_maker->();
    next unless $db1->supports( 'transactions' );
    my $db2 = $dbm_maker->();

    $db1->{foo} = 5;
    $db1->{bar} = $db1->{foo};

    is( $db1->{foo}, 5, "Foo is still 5" );
    is( $db1->{bar}, 5, "Bar is now 5" );

    $db1->{foo} = 6;

    is( $db1->{foo}, 6, "Foo is now 6" );
    is( $db1->{bar}, 5, "Bar is still 5" );

    $db1->{foo} = [ 1 .. 3 ];
    $db1->{bar} = $db1->{foo};

    is( $db1->{foo}[1], 2, "Foo[1] is still 2" );
    is( $db1->{bar}[1], 2, "Bar[1] is now 2" );

    $db1->{foo}[3] = 42;

    is( $db1->{foo}[3], 42, "Foo[3] is now 42" );
    is( $db1->{bar}[3], 42, "Bar[3] is also 42" );

    delete $db1->{foo};
    is( $db1->{bar}[3], 42, "After delete Foo, Bar[3] is still 42" );

    $db1->{foo} = $db1->{bar};
    $db2->begin_work;

        delete $db2->{bar};
        delete $db2->{foo};

        is( $db2->{bar}, undef, "It's deleted in the transaction" );
        is( $db1->{bar}[3], 42, "... but not in the main" );

    $db2->rollback;

    # Why hasn't this failed!? Is it because stuff isn't getting deleted as
    # expected? I need a test that walks the sectors
    is( $db1->{bar}[3], 42, "After delete Foo, Bar[3] is still 42" );
    is( $db2->{bar}[3], 42, "After delete Foo, Bar[3] is still 42" );

    delete $db1->{foo};

    is( $db1->{bar}[3], 42, "After delete Foo, Bar[3] is still 42" );
}

done_testing;

__END__
$db2->begin_work;

  delete $db2->{bar};

$db2->commit;

ok( !exists $db1->{bar}, "After commit, bar is gone" );