#!/usr/bin/perl
# Compile testing for JSAN::Librarian
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use Test::More tests => 15;
use URI ();
use Config::Tiny ();
use File::Remove 'remove';
use JSAN::Librarian ();
use JavaScript::Librarian ();
use File::Spec::Functions ':ALL';
# Set paths
my $lib_path = catdir( 't', 'data' );
my $default_index = catfile( 't', 'data', 'openjsan.deps' );
# Build the example copnfig to compare things to
my $expected = Config::Tiny->new;
$expected->{'Foo.js'} = {};
$expected->{'Bar.js'} = { 'Foo.js' => 1 };
$expected->{'Foo/Bar.js'} = { 'Foo.js' => 1, 'Bar.js' => 1 };
#####################################################################
# JSAN::Librarian Tests
# Check paths and remove as needed
ok( -d $lib_path, 'Lib directory exists' );
remove($default_index) if -e $default_index;
END {
remove($default_index) if -e $default_index;
}
# Build first to check the scanning logic
my $new = JSAN::Librarian->new( $lib_path );
isa_ok( $new, 'JSAN::Librarian' );
my $config = $new->build_index( $lib_path );
isa_ok( $config, 'Config::Tiny' );
is_deeply(
$config,
$expected,
'->build_index returns Config::Tiny that matches expected',
);
# Check that make_index writes as expected
ok( $new->make_index( $lib_path ), '->make_index returns true' );
ok( -e $default_index, '->make_index created index file' );
$config = Config::Tiny->read( $default_index );
isa_ok( $config, 'Config::Tiny' );
is_deeply( $config, $expected,
'->make_index returns Config::Tiny that matches expected' );
#####################################################################
# JSAN::Librarian::Library Tests
# Create the Library
my $library = JSAN::Librarian::Library->new( $config );
isa_ok( $library, 'JSAN::Librarian::Library' );
ok( $library->load, 'Library loads ok' );
# Fetch a Book
my $book = $library->item('Foo.js');
isa_ok( $book, 'JSAN::Librarian::Book' );
#####################################################################
# Full test of JavaScript::Librarian
my $uri = URI->new( '/jsan' );
my $librarian = JavaScript::Librarian->new(
base => $uri,
library => $library,
);
isa_ok( $librarian, 'JavaScript::Librarian' );
# Generate script tags for something
ok( $librarian->add( 'Foo/Bar.js' ), '->add(Foo/Bar.js) returned true' );
my $script = $librarian->html;
ok( defined $script, '->html returns defined' );
is( $script . "\n", <<'END_HTML', '->html returns expected' );
END_HTML