Renard-Curie

 view release on metacpan or  search on metacpan

t/Renard/Curie/App.t  view on Meta::CPAN

#!/usr/bin/env perl

use Test::Most tests => 5;
use Test::Trap;
use Test::Exception 0.43;

use lib 't/lib';
use CurieTestHelper;
use Renard::Block::Format::PDF::Devel::TestHelper;
use Renard::Block::Format::Cairo::Devel::TestHelper;

use Renard::Incunabula::Common::Setup;
use Renard::Curie::Container::App;
use Renard::Curie::App;
use File::Temp;
use URI::file;
use Test::MockObject;
use Test::MockModule;
use version 0.77 ();

subtest "Process arguments" => sub {
	subtest "Process arguments for PDF file" => sub {
		my $pdf_ref_path = try {
			Renard::Block::Format::PDF::Devel::TestHelper->pdf_reference_document_path;
		} catch {
			plan skip_all => "$_";
		};
		my $c = CurieTestHelper->get_app_container;
		my $app = $c->app;
		local @ARGV = ($pdf_ref_path);
		$app->process_arguments;
		like $c->main_window->window->get_title, qr/\Q$pdf_ref_path\E/, "Window title contains path to file";
		undef $app;
	};

	subtest "Process no arguments" => sub {
		my $app = CurieTestHelper->get_app_container->app;
		local @ARGV = ();
		lives_ok {
			$app->process_arguments;
		} 'Processes no arguments fine';
		undef $app;
	};

	subtest "Process arguments for non-existent file" => sub {
		my $non_existent_filename = File::Temp::tmpnam();
		local @ARGV = ($non_existent_filename);
		my $app = CurieTestHelper->get_app_container->app;
		throws_ok {
			$app->process_arguments;
		} 'Renard::Incunabula::Common::Error::IO::FileNotFound', "Throws exception when file not found";
		undef $app;
	};

	subtest "Process --help flag" => sub {
		my $app = CurieTestHelper->get_app_container->app;
		local @ARGV = qw(--help);
		trap { $app->process_arguments; };
		like( $trap->stdout, qr/--help/, 'Shows usage text' );
		is( $trap->exit, 0, 'Exits successfully after call' );
		undef $app;
	};

	subtest "Process --version flag" => sub {
		my $app = CurieTestHelper->get_app_container->app;
		local @ARGV = qw(--version);
		trap { $app->process_arguments; };
		like( $trap->stdout, qr/Project Renard Curie/, 'Prints full name of application' );
		is( $trap->exit, 0, 'Exits successfully after call' );
		undef $app;
	};

	subtest "Process --short-version flag" => sub {
		my $app = CurieTestHelper->get_app_container->app;
		local @ARGV = qw(--short-version);
		trap { $app->process_arguments; };
		chomp( my $version_or_dev = $trap->stdout );
		note "Got version: $version_or_dev";
		if( $version_or_dev =~ qr/^dev$/ ) {
			pass( 'Prints out dev as version' );
		} else {
			lives_ok {
				version->parse($version_or_dev);
			} "version parses";
		}
		is( $trap->exit, 0, 'Exits successfully after call' );
		undef $app;
	};
};

subtest "Run app and destroy" => sub {
	plan tests => 2;
	my $c = CurieTestHelper->get_app_container;
	my $app = $c->app;

	Glib::Timeout->add(100, sub {
		cmp_ok( Gtk3::main_level, '>', 0, 'Main loop is running');
		$c->main_window->window->destroy;
	});

	$app->main;

	is( Gtk3::main_level, 0, 'Main loop is no longer running');

	undef $app;
};

subtest "Open document twice" => sub {
	my $c = CurieTestHelper->get_app_container;
	my $app = $c->app;
	my $cairo_doc_a = Renard::Block::Format::Cairo::Devel::TestHelper->create_cairo_document;
	my $cairo_doc_b = Renard::Block::Format::Cairo::Devel::TestHelper->create_cairo_document;

	$c->view_manager->current_document($cairo_doc_a);
	cmp_deeply $c->_test_current_view->document, $cairo_doc_a, 'First document loaded';

	$c->view_manager->current_document($cairo_doc_b);
	cmp_deeply $c->_test_current_view->document, $cairo_doc_b, 'Second document loaded';

	undef $app;
};

subtest "Drag and drop of file" => sub {
	my $pdf_ref_path = try {
		Renard::Block::Format::PDF::Devel::TestHelper->pdf_reference_document_path;
	} catch {
		plan skip_all => "$_";
	};

	my $pdf_ref_uri = URI::file->new($pdf_ref_path);
	my $c = CurieTestHelper->get_app_container;

	my @tests = (
		{
			name => 'text/uri-list',



( run in 0.884 second using v1.01-cache-2.11-cpan-d80b1682f3f )