The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package UnoTest;

use strict;
use warnings;
use Exporter; *import = \&Exporter::import;

our @EXPORT = qw(get_file get_cu get_service_manager);

use OpenOffice::UNO;
use Cwd;

our $SMGR_URL = "uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager";

sub get_cu {
    my ($pu) = @_;

    # can't make initialization with path work on Win32
    if ($^O eq 'MSWin32' || $ENV{URE_BOOTSTRAP}) {
        return $pu->createInitialComponentContext();
    } else {
        return $pu->createInitialComponentContext(get_file('perluno'));
    }
}

sub get_file {
    my ($file) = @_;
    my ($dir) = getcwd();

    if ($^O eq 'MSWin32') {
        # getcwd returns forward slashes, which is OK in this case
        return 'file:///' . $dir . '/' . $file;
    } else {
        return 'file://'  . $dir . '/' . $file;
    }
}

sub get_service_manager {
    my $pu = new OpenOffice::UNO();

    my $cu = get_cu($pu);
    my $sm = $cu->getServiceManager();

    my $resolver = $sm->createInstanceWithContext
                       ("com.sun.star.bridge.UnoUrlResolver", $cu);

    my $smgr = $resolver->resolve($SMGR_URL);

    return ($pu, $smgr);
}

1;