Ancient

 view release on metacpan or  search on metacpan

t/8013-file-hooks.t  view on Meta::CPAN

# ============================================

subtest 'hook persists across multiple operations' => sub {
    file::clear_hooks('read');

    my $call_count = 0;
    file::register_read_hook(sub {
        my ($path, $data) = @_;
        $call_count++;
        return $data;
    });

    my $testfile = "$tempdir/persist_test.txt";
    file::spew($testfile, "data");

    file::slurp($testfile);
    file::slurp($testfile);
    file::slurp($testfile);

    is($call_count, 3, 'hook called for each read');

    file::clear_hooks('read');
};

# ============================================
# Encoding-style hook example
# ============================================

subtest 'encoding hook example' => sub {
    file::clear_hooks('read');
    file::clear_hooks('write');

    # Simulate base64-like encoding (just reverse for simplicity)
    file::register_write_hook(sub {
        my ($path, $data) = @_;
        return scalar(reverse($data));
    });

    file::register_read_hook(sub {
        my ($path, $data) = @_;
        return scalar(reverse($data));
    });

    my $testfile = "$tempdir/encoding_test.txt";
    my $original = "Hello, World!";

    file::spew($testfile, $original);

    # File on disk should be reversed
    file::clear_hooks('read');
    my $on_disk = file::slurp($testfile);
    is($on_disk, '!dlroW ,olleH', 'data encoded on disk');

    # Re-register read hook
    file::register_read_hook(sub {
        my ($path, $data) = @_;
        return scalar(reverse($data));
    });

    # Reading should decode
    my $decoded = file::slurp($testfile);
    is($decoded, $original, 'data decoded on read');

    file::clear_hooks('read');
    file::clear_hooks('write');
};

done_testing();



( run in 4.180 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )