]> granicus.if.org Git - postgis/commitdiff
Create regression tests for pgsql2shp (#2390)
authorSandro Santilli <strk@keybit.net>
Thu, 10 Oct 2013 08:29:22 +0000 (08:29 +0000)
committerSandro Santilli <strk@keybit.net>
Thu, 10 Oct 2013 08:29:22 +0000 (08:29 +0000)
NOTE: only implemented in run_test.pl (not in run_test.sh)

git-svn-id: http://svn.osgeo.org/postgis/trunk@12025 b70326c6-7e19-0410-871a-916f4a2858ee

17 files changed:
NEWS
regress/Makefile.in
regress/dumper/literalsrid-post.sql [new file with mode: 0644]
regress/dumper/literalsrid-pre.sql [new file with mode: 0644]
regress/dumper/literalsrid.dmp [new file with mode: 0644]
regress/dumper/literalsrid_expected.dbf [new file with mode: 0644]
regress/dumper/literalsrid_expected.prj [new file with mode: 0644]
regress/dumper/literalsrid_expected.shp [new file with mode: 0644]
regress/dumper/literalsrid_expected.shx [new file with mode: 0644]
regress/dumper/realtable-post.sql [new file with mode: 0644]
regress/dumper/realtable-pre.sql [new file with mode: 0644]
regress/dumper/realtable.dmp [new file with mode: 0644]
regress/dumper/realtable_expected.dbf [new file with mode: 0644]
regress/dumper/realtable_expected.prj [new file with mode: 0644]
regress/dumper/realtable_expected.shp [new file with mode: 0644]
regress/dumper/realtable_expected.shx [new file with mode: 0644]
regress/run_test.pl

diff --git a/NEWS b/NEWS
index 394f8295f2a791efc48cc7639a3a952b2b2a9b64..7c7771abb3c357aad58a97db4fff495dff84dc0b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,7 @@ PostGIS 2.2.0
     variable GDAL_DATA
   - #2361, Added spatial_index column to raster_columns view
   - #2397, read encoding info automatically in loader
+  - #2390, Testsuite for pgsql2shp
 
  * Bug Fixes *
 
index d975a518fc1d1c8f32faeee0d841e26311389303..df62eb23e0f1550bde884101539041efbd077485 100644 (file)
@@ -67,6 +67,8 @@ TESTS = \
        loader/ReprojectPtsGeog \
        loader/Latin1 \
        loader/Latin1-implicit \
+  dumper/literalsrid \
+  dumper/realtable \
        binary \
        regress \
        regress_index \
diff --git a/regress/dumper/literalsrid-post.sql b/regress/dumper/literalsrid-post.sql
new file mode 100644 (file)
index 0000000..9afb10c
--- /dev/null
@@ -0,0 +1 @@
+delete from spatial_ref_sys where srid = 1;
diff --git a/regress/dumper/literalsrid-pre.sql b/regress/dumper/literalsrid-pre.sql
new file mode 100644 (file)
index 0000000..d0f6cec
--- /dev/null
@@ -0,0 +1 @@
+insert into spatial_ref_sys(srid,srtext) values (1,'fake["srs"],text');
diff --git a/regress/dumper/literalsrid.dmp b/regress/dumper/literalsrid.dmp
new file mode 100644 (file)
index 0000000..e70ec51
--- /dev/null
@@ -0,0 +1 @@
+SELECT 1 as id, 'SRID=4326;POINT(0 0)'::geometry as g;
diff --git a/regress/dumper/literalsrid_expected.dbf b/regress/dumper/literalsrid_expected.dbf
new file mode 100644 (file)
index 0000000..df11d72
Binary files /dev/null and b/regress/dumper/literalsrid_expected.dbf differ
diff --git a/regress/dumper/literalsrid_expected.prj b/regress/dumper/literalsrid_expected.prj
new file mode 100644 (file)
index 0000000..ab83d5d
--- /dev/null
@@ -0,0 +1 @@
+fake["srs"],text
\ No newline at end of file
diff --git a/regress/dumper/literalsrid_expected.shp b/regress/dumper/literalsrid_expected.shp
new file mode 100644 (file)
index 0000000..0112cd7
Binary files /dev/null and b/regress/dumper/literalsrid_expected.shp differ
diff --git a/regress/dumper/literalsrid_expected.shx b/regress/dumper/literalsrid_expected.shx
new file mode 100644 (file)
index 0000000..cc0b42a
Binary files /dev/null and b/regress/dumper/literalsrid_expected.shx differ
diff --git a/regress/dumper/realtable-post.sql b/regress/dumper/realtable-post.sql
new file mode 100644 (file)
index 0000000..17deeda
--- /dev/null
@@ -0,0 +1,2 @@
+drop table c;
+delete from spatial_ref_sys where srid = 1;
diff --git a/regress/dumper/realtable-pre.sql b/regress/dumper/realtable-pre.sql
new file mode 100644 (file)
index 0000000..a6d1dca
--- /dev/null
@@ -0,0 +1,3 @@
+insert into spatial_ref_sys(srid,srtext) values (1,'fake["srs"],text');
+create table c (i int, g geometry);
+insert into c values (1,'SRID=1;POINT(0 0)');
diff --git a/regress/dumper/realtable.dmp b/regress/dumper/realtable.dmp
new file mode 100644 (file)
index 0000000..f2ad6c7
--- /dev/null
@@ -0,0 +1 @@
+c
diff --git a/regress/dumper/realtable_expected.dbf b/regress/dumper/realtable_expected.dbf
new file mode 100644 (file)
index 0000000..0d2ac50
Binary files /dev/null and b/regress/dumper/realtable_expected.dbf differ
diff --git a/regress/dumper/realtable_expected.prj b/regress/dumper/realtable_expected.prj
new file mode 100644 (file)
index 0000000..ab83d5d
--- /dev/null
@@ -0,0 +1 @@
+fake["srs"],text
\ No newline at end of file
diff --git a/regress/dumper/realtable_expected.shp b/regress/dumper/realtable_expected.shp
new file mode 100644 (file)
index 0000000..0112cd7
Binary files /dev/null and b/regress/dumper/realtable_expected.shp differ
diff --git a/regress/dumper/realtable_expected.shx b/regress/dumper/realtable_expected.shx
new file mode 100644 (file)
index 0000000..cc0b42a
Binary files /dev/null and b/regress/dumper/realtable_expected.shx differ
index 6b1a970cf8769cd187c6c9edeee54d5c0d23e64d..23652045880f454ff9a7394dbba7ca1fa01cb316 100755 (executable)
@@ -287,9 +287,13 @@ foreach $TEST (@ARGV)
                my $rv = run_simple_test("${TEST}.sql", "${TEST}_expected");
                pass() if $rv;
        }
+       elsif ( -r "${TEST}.dmp" )
+       {
+               pass() if run_dumper_test();
+       }
        else
        {
-               print " skipped (can't read ${TEST}.sql)\n";
+               print " skipped (can't read any ${TEST}.{sql,dbf,tif,dmp})\n";
                $SKIP++;
                next;
        }
@@ -582,7 +586,7 @@ sub run_simple_test
        
        if ( $OPT_EXPECT )
        {
-               print " expected\n";
+               print " (expected)";
                copy($outfile, $expected);
        }
        else
@@ -901,6 +905,88 @@ sub run_loader_test
        return 1;
 }
 
+##################################################################
+#  run_dumper_test 
+#
+#  Run dumper and compare output with various expectances
+#  test and run simple test with provided expected output. 
+#
+# input is ${TEST}.dmp, where last line is considered to be the
+# [table|query] argument for pgsql2shp and all the previous lines,
+# if any are 
+#
+##################################################################
+sub run_dumper_test 
+{
+  my $dump_file  = "${TEST}.dmp";
+
+  # ON_ERROR_STOP is used by psql to return non-0 on an error
+  my $psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true";
+
+       my $shpfile = "${TMPDIR}/dumper-shp";
+       my $outfile = "${TMPDIR}/dumper.out";
+       my $errfile = "${TMPDIR}/dumper.err";
+
+  # Produce the output SHP file.
+  open DUMPFILE, "$dump_file" or die "Cannot open dump file $dump_file\n";
+  my @dumplines = <DUMPFILE>;
+  my $dumpstring = join '', @dumplines;
+  chop($dumpstring);
+  my @cmd = ("${PGSQL2SHP}", "-f", ${shpfile}, ${DB}, ${dumpstring});
+  open my $stdout_save, '>&', *STDOUT or die "Cannot dup stdout\n";
+  open my $stderr_save, '>&', *STDERR or die "Cannot dup stdout\n";
+  open STDOUT, ">${outfile}" or die "Cannot write to ${outfile}\n";
+  open STDERR, ">${errfile}" or die "Cannot write to ${errfile}\n";
+  my $rv = system(@cmd);
+  open STDERR, '>&', $stderr_save;
+  open STDOUT, '>&', $stdout_save;
+
+  show_progress();
+
+  if ( $rv )
+  {
+    fail("dumping", "$errfile");
+    return 0;
+  }
+
+  my $diffile = sprintf("%s/test_%s_diff", $TMPDIR, $RUN);
+
+  my $numtests = 0;
+  foreach my $ext ("shp","prj","dbf","shx") {
+    my $obtained = ${shpfile}.".".$ext;
+    my $expected = ${TEST}."_expected.".$ext;
+    if ( $OPT_EXPECT )
+    {
+      copy($obtained, $expected);
+    }
+    elsif ( -r ${expected} ) {
+      show_progress();
+      $numtests++;
+      my $diff = diff($expected,  $obtained);
+      if ( $diff )
+      {
+        open(FILE, ">$diffile");
+        print FILE $diff;
+        close(FILE);
+        fail("diff expected obtained", $diffile);
+        return 0;
+      }
+    }
+  }
+
+  #show_progress();
+
+  if ( $OPT_EXPECT ) {
+    print " (expected)";
+  }
+  elsif ( ! $numtests ) {
+    fail("no expectances!");
+    return 0;
+  }
+
+       return 1;
+}
+
 
 ##################################################################
 #  run_raster_loader_test 
@@ -1182,7 +1268,7 @@ sub uninstall_spatial
                }
                else
                {
-            pass("($OBJ_COUNT_PRE)");
+                       pass("($OBJ_COUNT_PRE)");
                        return 1;
                }
        }