(travis) Make sure everything works even when we are SAD
[dbsrgits/DBIx-Class.git] / xt / extra / internals / optional_deps.t
index 9cef633..e933911 100644 (file)
@@ -12,20 +12,45 @@ no warnings qw/once/;
 use Test::More;
 use Test::Exception;
 
+BEGIN {
+  plan skip_all => 'This test breaking module loading interferes with PERL_UNICODE on perls prior to 5.12'
+    if exists $ENV{PERL_UNICODE} and "$]" < 5.012;
+}
+
 # load before we break require()
 use Scalar::Util();
 use MRO::Compat();
 use Carp 'confess';
 use List::Util 'shuffle';
-
-ok ( (! grep { $_ =~ m|DBIx/Class| } @$inc_before ), 'Nothing DBIC related was loaded before inc-test')
-  unless $ENV{PERL5OPT}; # a defined PERL5OPT may inject extra deps crashing this test
-
-is_deeply (
-  [ sort @$inc_after],
-  [ sort (@$inc_before, qw( DBIx/Class/Optional/Dependencies.pm if.pm )) ],
-  'Nothing loaded other than DBIx::Class::OptDeps',
-) unless $ENV{RELEASE_TESTING};
+use Config;
+
+SKIP: {
+  skip 'Lean load pattern testing makes no sense with TempExtlib', 1
+    if grep { $_ =~ /TempExtlib/ } @INC;
+
+  skip 'Lean load pattern testing unsafe with $ENV{PERL5OPT}', 1
+    if $ENV{PERL5OPT};
+
+  skip 'Lean load pattern testing unsafe with sitecustomize.pl', 1
+    if grep { $_ =~ m| \/ sitecustomize\.pl $ |x } keys %INC;
+
+  skip 'Lean load pattern testing useless with $ENV{RELEASE_TESTING}', 1
+    if $ENV{RELEASE_TESTING};
+
+  skip 'Lean load pattern testing useless under cperl', 1
+    if $Config{usecperl};
+
+  is_deeply
+    $inc_before,
+    [],
+    'Nothing was loaded before inc-test'
+  ;
+  is_deeply
+    $inc_after,
+    [ 'DBIx/Class/Optional/Dependencies.pm' ],
+    'Nothing was loaded other than DBIx::Class::OptDeps'
+  ;
+}
 
 # check the project-local groups for sanity
 lives_ok {
@@ -59,7 +84,7 @@ is_deeply (
       DBIx::Class::Optional::Dependencies->modreq_missing_for ($_),
       qr/
         \A
-        " SQL::Translator \~ \>\= [\d\.]+ "
+        SQL::Translator \~ [\d\.]+
         \z
       /x,
       'expected modreq missing string contents',
@@ -69,7 +94,7 @@ is_deeply (
       DBIx::Class::Optional::Dependencies->req_missing_for ($_),
       qr/
         \A
-        " SQL::Translator \~ \>\= [\d\.]+ "
+        SQL::Translator \~ [\d\.]+
         \Q (see DBIx::Class::Optional::Dependencies documentation for details)\E
         \z
       /x,
@@ -131,13 +156,13 @@ is_deeply (
 
 # regular
   is_deeply(
-    DBIx::Class::Optional::Dependencies->modreq_list_for('test_rdbms_pg'),
+    DBIx::Class::Optional::Dependencies->modreq_list_for([shuffle qw( test_rdbms_pg binary_data )]),
     { 'DBD::Pg' => '2.009002' },
     'optional dependencies list for testing Postgres without envvar',
   );
 
   is_deeply(
-    DBIx::Class::Optional::Dependencies->req_list_for('test_rdbms_pg'),
+    DBIx::Class::Optional::Dependencies->req_list_for([shuffle qw( test_rdbms_pg binary_data )]),
     undef,
     'optional dependencies list for testing Postgres without envvar',
   );
@@ -162,37 +187,39 @@ is_deeply (
   );
 
   is(
-    DBIx::Class::Optional::Dependencies->req_missing_for([qw( rdbms_pg test_rdbms_pg )]),
-    '"DBD::Pg~>=2.009002" as well as the following group(s) of environment variables: DBICTEST_PG_DSN/..._USER/..._PASS',
+    DBIx::Class::Optional::Dependencies->req_missing_for([shuffle qw( rdbms_pg test_rdbms_pg binary_data )]),
+    'DBD::Pg~2.009002 as well as the following group(s) of environment variables: DBICTEST_PG_DSN/..._USER/..._PASS',
     'optional dependencies for testing Postgres without envvar'
   );
 
   is(
-    DBIx::Class::Optional::Dependencies->req_missing_for([shuffle qw( test_rdbms_mysql test_rdbms_pg )]),
-    'DBD::mysql "DBD::Pg~>=2.009002" as well as the following group(s) of environment variables: DBICTEST_MYSQL_DSN/..._USER/..._PASS and DBICTEST_PG_DSN/..._USER/..._PASS',
+    DBIx::Class::Optional::Dependencies->req_missing_for([shuffle qw( test_rdbms_mysql test_rdbms_pg binary_data)]),
+    'DBD::mysql DBD::Pg~2.009002 as well as the following group(s) of environment variables: DBICTEST_MYSQL_DSN/..._USER/..._PASS and DBICTEST_PG_DSN/..._USER/..._PASS',
     'optional dependencies for testing Postgres+MySQL without envvars'
   );
 
   $ENV{DBICTEST_PG_DSN} = 'boo';
   is_deeply (
-    DBIx::Class::Optional::Dependencies->modreq_list_for([shuffle qw( rdbms_pg test_rdbms_pg )]),
+    DBIx::Class::Optional::Dependencies->modreq_list_for([shuffle qw( rdbms_pg test_rdbms_pg binary_data)]),
     { 'DBD::Pg' => '2.009002' },
     'optional module dependencies list for testing Postgres matches with envvar',
   );
 
   is(
-    DBIx::Class::Optional::Dependencies->req_missing_for([shuffle qw( rdbms_pg test_rdbms_pg )]),
-    '"DBD::Pg~>=2.009002"',
+    DBIx::Class::Optional::Dependencies->req_missing_for([shuffle qw( rdbms_pg test_rdbms_pg binary_data )]),
+    'DBD::Pg~2.009002',
     'optional dependencies error text for testing Postgres matches with evvar',
   );
 
 # ICDT augmentation
-  my $mysql_icdt = [shuffle qw( test_rdbms_mysql icdt )];
+  my %expected_icdt_base = ( DateTime => '0.55', 'DateTime::TimeZone::OlsonDB' => 0 );
+
+  my $mysql_icdt = [shuffle qw( test_rdbms_mysql ic_dt )];
 
   is_deeply(
     DBIx::Class::Optional::Dependencies->modreq_list_for($mysql_icdt),
     {
-      'DateTime' => '0.55',
+      %expected_icdt_base,
       'DBD::mysql' => 0,
       'DateTime::Format::MySQL' => 0,
     },
@@ -201,31 +228,29 @@ is_deeply (
 
   is_deeply(
     DBIx::Class::Optional::Dependencies->req_list_for($mysql_icdt),
-    {
-      'DateTime' => '0.55',
-    },
+    \%expected_icdt_base,
     'optional dependencies list for testing ICDT MySQL without envvar',
   );
 
   is(
     DBIx::Class::Optional::Dependencies->req_missing_for($mysql_icdt),
-    '"DateTime~>=0.55" DateTime::Format::MySQL DBD::mysql as well as the following group(s) of environment variables: DBICTEST_MYSQL_DSN/..._USER/..._PASS',
+    "DateTime~0.55 DateTime::Format::MySQL DateTime::TimeZone::OlsonDB DBD::mysql as well as the following group(s) of environment variables: DBICTEST_MYSQL_DSN/..._USER/..._PASS",
     'missing optional dependencies for testing ICDT MySQL without envvars'
   );
 
 # test multi-level include with a variable and mandatory part converging on same included dep
   local $ENV{DBICTEST_MSACCESS_ODBC_DSN};
   local $ENV{DBICTEST_MSSQL_ODBC_DSN} = 'foo';
-  my $msaccess_mssql_icdt = [ shuffle qw( test_rdbms_msaccess_odbc test_rdbms_mssql_odbc icdt ) ];
+  my $msaccess_mssql_icdt = [ shuffle qw( test_rdbms_msaccess_odbc test_rdbms_mssql_odbc ic_dt ) ];
   is_deeply(
     DBIx::Class::Optional::Dependencies->req_missing_for($msaccess_mssql_icdt),
-    'Data::GUID "DateTime~>=0.55" "DateTime::Format::Strptime~>=1.2" DBD::ODBC as well as the following group(s) of environment variables: DBICTEST_MSACCESS_ODBC_DSN/..._USER/..._PASS',
+    'Data::GUID DateTime~0.55 DateTime::Format::Strptime~1.2 DateTime::TimeZone::OlsonDB DBD::ODBC as well as the following group(s) of environment variables: DBICTEST_MSACCESS_ODBC_DSN/..._USER/..._PASS',
     'Correct req_missing_for on multi-level converging include',
   );
 
   is_deeply(
     DBIx::Class::Optional::Dependencies->modreq_missing_for($msaccess_mssql_icdt),
-    'Data::GUID "DateTime~>=0.55" "DateTime::Format::Strptime~>=1.2" DBD::ODBC',
+    'Data::GUID DateTime~0.55 DateTime::Format::Strptime~1.2 DateTime::TimeZone::OlsonDB DBD::ODBC',
     'Correct modreq_missing_for on multi-level converging include',
   );
 
@@ -233,8 +258,8 @@ is_deeply (
     DBIx::Class::Optional::Dependencies->req_list_for($msaccess_mssql_icdt),
     {
       'DBD::ODBC' => 0,
-      'DateTime' => '0.55',
       'DateTime::Format::Strptime' => '1.2',
+      %expected_icdt_base,
     },
     'Correct req_list_for on multi-level converging include',
   );
@@ -244,8 +269,8 @@ is_deeply (
     {
       'DBD::ODBC' => 0,
       'Data::GUID' => 0,
-      'DateTime' => '0.55',
       'DateTime::Format::Strptime' => '1.2',
+      %expected_icdt_base,
     },
     'Correct modreq_list_for on multi-level converging include',
   );