Add lots of tests for num_expand() and let it remove unnecessary zeroes
[gpstools.git] / tests / run-tests.pl
blob391dc010d4e57b062dba7432b482ed0694f20387
1 #!/usr/bin/perl -w
3 #=======================================================================
4 # tests/run-tests.pl
5 # File ID: b9e66fa2-f924-11dd-b57f-0001805bf4b1
6 # Test suite for gpst(1).
8 # Character set: UTF-8
9 # ©opyleft 2006– Øyvind A. Holm <sunny@sunbase.org>
10 # License: GNU General Public License version 3 or later, see end of
11 # file for legal stuff.
12 #=======================================================================
14 BEGIN {
15 push(@INC, "$ENV{'HOME'}/bin/src/gpstools");
16 use Test::More qw{no_plan};
17 use_ok(GPST);
18 use_ok(GPSTdate);
19 use_ok(GPSTdebug);
20 use_ok(GPSTgeo);
21 use_ok(GPSTxml);
24 use strict;
25 use Getopt::Long;
27 $| = 1;
29 our $Debug = 0;
30 our $CMD = "../gpst";
32 our %Opt = (
34 'all' => 0,
35 'debug' => 0,
36 'help' => 0,
37 'todo' => 0,
38 'verbose' => 0,
39 'version' => 0,
43 our $progname = $0;
44 $progname =~ s/^.*\/(.*?)$/$1/;
45 our $VERSION = "0.00";
47 Getopt::Long::Configure("bundling");
48 GetOptions(
50 "all|a" => \$Opt{'all'},
51 "debug" => \$Opt{'debug'},
52 "help|h" => \$Opt{'help'},
53 "todo|t" => \$Opt{'todo'},
54 "verbose|v+" => \$Opt{'verbose'},
55 "version" => \$Opt{'version'},
57 ) || die("$progname: Option error. Use -h for help.\n");
59 our %Cmd = (
60 'gpsbabel' => 'gpsbabel',
63 $Opt{'debug'} && ($Debug = 1);
64 $Opt{'help'} && usage(0);
65 if ($Opt{'version'}) {
66 print_version();
67 exit(0);
70 diag(sprintf("========== Executing %s v%s ==========",
71 $progname,
72 $VERSION));
74 chomp(my $gpx_header = <<END);
75 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
76 <gpx
77 version="1.1"
78 creator="gpst - http://sunny256.github.com/gpstools/"
79 xmlns="http://www.topografix.com/GPX/1/1"
80 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
81 xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
83 END
84 my $stripped_gpx_header = $gpx_header;
85 $stripped_gpx_header =~ s/^\s*(.*)$/$1/mg;
87 if ($Opt{'todo'} && !$Opt{'all'}) {
88 goto todo_section;
91 =pod
93 testcmd("$CMD command", # {{{
94 <<END,
95 [expected stdin]
96 END
97 "",
98 "description",
99 is_gpx,
102 # }}}
104 =cut
106 diag("Testing conversion routines...");
108 # txt_to_xml() and xml_to_txt() {{{
110 is(txt_to_xml("abc"),
111 "abc",
112 "txt_to_xml(\"abc\")");
113 is(txt_to_xml("<&>"),
114 "&lt;&amp;&gt;",
115 "txt_to_xml(\"<&>\")");
116 is(txt_to_xml("first line\nsecond <\rthird\r\n<&>"),
117 "first line\nsecond &lt;\rthird\r\n&lt;&amp;&gt;",
118 "txt_to_xml() with multiline string");
120 is(xml_to_txt("abc"),
121 "abc",
122 "xml_to_txt(\"abc\")");
123 is(xml_to_txt("&lt;&amp;&gt;"),
124 "<&>",
125 "xml_to_txt(\"&lt;&amp;&gt;\")");
126 is(xml_to_txt("first line\nsecond &lt;\rthird\r\n&lt;&amp;&gt;"),
127 "first line\nsecond <\rthird\r\n<&>",
128 "xml_to_txt() with multiline string");
130 # txt_to_xml() and xml_to_txt() }}}
131 # postgresql_copy_safe() {{{
133 is(postgresql_copy_safe(""),
135 "postgresql_copy_safe() with empty string");
137 is(postgresql_copy_safe("abcæøåÆØÅ"),
138 "abcæøåÆØÅ",
139 "postgresql_copy_safe(\"abcæøåÆØÅ\")");
141 is(postgresql_copy_safe("abc\t'\r\n"),
142 "abc\\t'\\r\\n",
143 "postgresql_copy_safe(\"abc\\t'\\r\\n\")");
145 is(postgresql_copy_safe("¤%/&gurgle\t325\\wer\ndfv'\r!\"#\n%\twe\r\x00sdf\xFFsadc\n\t\x00sdc\n"),
146 "¤%/&gurgle\\t325\\\\wer\\ndfv'\\r!\"#\\n%\\twe\\r\x00sdf\xFFsadc\\n\\t\x00sdc\\n",
147 "postgresql_copy_safe() with multiline, nulls and stuff");
149 # postgresql_copy_safe() }}}
150 # num_expand() {{{
152 is(num_expand(""),
154 "num_expand(\"\") returns empty string");
156 is(num_expand("6.5"),
157 "6.5",
158 "num_expand(\"6.5\") returns same value");
159 is(num_expand("-6.5"),
160 "-6.5",
161 "num_expand(\"-6.5\") returns same value");
162 is(num_expand("+6.5"),
163 "6.5",
164 "num_expand(\"+6.5\") removes leading plus sign");
166 is(num_expand("0.0000000000123"),
167 "0.0000000000123",
168 "num_expand(\"0.0000000000123\") returns same value");
169 is(num_expand("-0.0000000000123"),
170 "-0.0000000000123",
171 "num_expand(\"-0.0000000000123\") returns same value");
172 is(num_expand("+0.0000000000123"),
173 "0.0000000000123",
174 "num_expand(\"+0.0000000000123\") removes leading plus sign");
176 is(num_expand("1e-06"),
177 "0.000001",
178 "num_expand(\"1e-06\") returns 0.000001");
179 is(num_expand("-1e-06"),
180 "-0.000001",
181 "num_expand(\"-1e-06\") returns -0.000001");
182 is(num_expand("+1e-06"),
183 "0.000001",
184 "num_expand(\"+1e-06\") removes leading plus sign");
186 is(num_expand("1e-6"),
187 "0.000001",
188 "num_expand(\"1e-6\") returns 0.000001");
189 is(num_expand("1e+6"),
190 "1000000",
191 "num_expand(\"1e+6\") returns 1000000");
193 is(num_expand("3.14159265358979e-10"),
194 "0.000000000314159265358979",
195 "num_expand(\"3.14159265358979e-10\") returns 0.000000000314159265358979");
197 is(num_expand("1.2000e-10"),
198 "0.00000000012",
199 "Strip trailing zeroes from num_expand(\"1.2000e-10\")");
200 is(num_expand("1.2000e+10"),
201 "12000000000",
202 "num_expand(\"1.2000e+10\") returns 12000000000");
204 is(num_expand("0000000000000"),
205 "0",
206 "num_expand(\"0000000000000\") returns 0");
207 is(num_expand("-0000000000000"),
208 "0",
209 "num_expand(\"-0000000000000\") returns 0");
210 is(num_expand("+0000000000000"),
211 "0",
212 "num_expand(\"+0000000000000\") returns 0");
214 is(num_expand("000000.0000000"),
215 "0",
216 "num_expand(\"000000.0000000\") returns 0");
217 is(num_expand("-000000.0000000"),
218 "0",
219 "num_expand(\"-000000.0000000\") returns 0");
220 is(num_expand("+000000.0000000"),
221 "0",
222 "num_expand(\"+000000.0000000\") returns 0");
224 is(num_expand("1e+20"),
225 "100000000000000000000",
226 "num_expand(\"1e+20\") returns 100000000000000000000");
228 is(num_expand("3.14159e+10"),
229 "31415900000",
230 "num_expand(\"314159e+10\") returns 31415900000");
232 is(num_expand("2.50000"),
233 "2.5",
234 "num_expand(\"2.50000\") removes trailing zeroes");
236 is(num_expand("0002.5"),
237 "2.5",
238 "num_expand(\"0002.5\") removes leading zeroes");
239 is(num_expand("-0002.5"),
240 "-2.5",
241 "num_expand(\"-0002.5\") removes leading zeroes");
242 is(num_expand("+0002.5"),
243 "2.5",
244 "num_expand(\"+0002.5\") removes leading zeroes and leading plus sign");
246 is(num_expand("0002.50000"),
247 "2.5",
248 "num_expand(\"0002.50000\") removes both leading and trailing zeroes");
250 is(num_expand("300"),
251 "300",
252 "Don’t remove trailing zeroes from integers");
254 is(num_expand("0004"),
255 "4",
256 "num_expand(\"0004\") removes leading zeroes from integer");
257 is(num_expand("-0004"),
258 "-4",
259 "num_expand(\"-0004\") removes leading zeroes from negative integer");
260 is(num_expand("+0004"),
261 "4",
262 "num_expand(\"+0004\") removes leading plus sign and zeroes from integer");
264 # num_expand() }}}
266 diag("Testing date routines...");
268 # sec_to_string() {{{
270 is(sec_to_string(1148220825),
271 "2006-05-21 14:13:45",
272 "sec_to_string() without separator");
273 is(sec_to_string(1148220825, "T"),
274 "2006-05-21T14:13:45",
275 "sec_to_string() with separator");
276 is(sec_to_string(-5000),
277 undef,
278 "sec_to_string(-5000) — negative numbers unsupported atm");
279 is(sec_to_string(""),
280 undef,
281 "sec_to_string(\"\")");
282 is(sec_to_string("pH()rtY tW0"),
283 undef,
284 "sec_to_string() with invalid string");
285 is(sec_to_string("00000000000000000000001148220825"),
286 "2006-05-21 14:13:45",
287 "sec_to_string() with a bunch of leading zeros");
288 is(sec_to_string("1148220825.93"),
289 "2006-05-21 14:13:45.93",
290 "sec_to_string() with decimals");
291 is(sec_to_string("000000000000000000000000000001148220825.7312"),
292 "2006-05-21 14:13:45.7312",
293 "sec_to_string() with decimals and prefixing zeros");
294 is(sec_to_string("1148220825.93000"),
295 "2006-05-21 14:13:45.93",
296 "sec_to_string() with decimals and extra trailing zeros");
297 is(sec_to_string(".863"),
298 "1970-01-01 00:00:00.863",
299 "sec_to_string() with missing zero before decimal point");
301 # sec_to_string() }}}
302 # sec_to_readable() {{{
304 is(sec_to_readable(0),
305 "0:00:00:00",
306 "sec_to_readable(0)");
307 is(sec_to_readable("pH()rtY tW0"),
308 undef,
309 "sec_to_readable() with invalid string");
310 is(sec_to_readable(86400),
311 "1:00:00:00",
312 "sec_to_readable(86400)");
313 is(sec_to_readable(86400*1000),
314 "1000:00:00:00",
315 "sec_to_readable(86400*1000)");
316 is(sec_to_readable(86400+7200+180+4),
317 "1:02:03:04",
318 "sec_to_readable(86400+7200+180+4)");
319 is(sec_to_readable("3.14"),
320 "0:00:00:03.14",
321 "sec_to_readable(\"3.14\")");
322 is(sec_to_readable("-124"),
323 undef,
324 "sec_to_readable() rejects negative numbers");
325 is(sec_to_readable("-2.34"),
326 undef,
327 "sec_to_readable() rejects negative decimal");
328 is(sec_to_readable(".87"),
329 "0:00:00:00.87",
330 "sec_to_readable(), missing zero before decimal point");
331 is(sec_to_readable(""),
332 "0:00:00:00",
333 "sec_to_readable() with empty string");
335 # sec_to_readable() }}}
337 diag("Testing geo routines...");
339 # ddd_to_dms() {{{
341 is(ddd_to_dms("12.34567"),
342 "12\xB020'44.4\"",
343 "ddd_to_dms(\"12.34567\")");
345 is(ddd_to_dms("0"),
346 "0\xB000'00.0\"",
347 "ddd_to_dms(\"0\")");
349 is(ddd_to_dms(""),
350 "0\xB000'00.0\"",
351 "ddd_to_dms(\"\")");
353 is(ddd_to_dms("pH()rtY tW0"),
354 undef,
355 "ddd_to_dms(\"pH()rtY tW0\")");
357 is(ddd_to_dms("-12.34567"),
358 "-12\xB020'44.4\"",
359 "ddd_to_dms(\"-12.34567\")");
361 is(ddd_to_dms("0.34567"),
362 "0\xB020'44.4\"",
363 "ddd_to_dms(\"0.34567\")");
365 is(ddd_to_dms(".34567"),
366 "0\xB020'44.4\"",
367 "ddd_to_dms(\".34567\")");
369 is(ddd_to_dms("-.34567"),
370 "-0\xB020'44.4\"",
371 "ddd_to_dms(\"-.34567\")");
373 is(ddd_to_dms("-0.34567"),
374 "-0\xB020'44.4\"",
375 "ddd_to_dms(\"-0.34567\")");
377 is(ddd_to_dms("180"),
378 "180\xB000'00.0\"",
379 "ddd_to_dms(\"180\")");
381 is(ddd_to_dms("-180"),
382 "-180\xB000'00.0\"",
383 "ddd_to_dms(\"-180\")");
385 is(ddd_to_dms("-1"),
386 "-1\xB000'00.0\"",
387 "ddd_to_dms(\"-1\")");
389 is(ddd_to_dms("2-3"),
390 undef,
391 "ddd_to_dms(\"2-3\")");
393 # ddd_to_dms() }}}
394 diag("Testing trackpoint()..."); # {{{
396 my %Dat = ();
398 is(trackpoint(%Dat),
399 undef,
400 "trackpoint() receives empty hash");
402 my %Bck = (
403 # {{{
404 'format' => 'gpsml',
405 'year' => '2003',
406 'month' => '06',
407 'day' => '13',
408 'hour' => '14',
409 'min' => '36',
410 'sec' => '10',
411 'lat' => '59.5214',
412 'lon' => '7.392133',
413 'ele' => '762',
414 'error' => "",
415 'what' => 'tp',
416 # }}}
419 # trackpoint() (gpsml) {{{
420 %Dat = %Bck;
422 trackpoint(%Dat),
423 "<tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
424 "trackpoint() (gpsml)"
427 # trackpoint() (gpsml) }}}
428 # trackpoint() (gpx) {{{
429 %Dat = %Bck;
430 $Dat{'format'} = "gpx";
432 trackpoint(%Dat),
433 qq{ <trkpt lat="59.5214" lon="7.392133"> <ele>762</ele> <time>2003-06-13T14:36:10Z</time> </trkpt>\n},
434 "trackpoint() (gpx)"
437 # trackpoint() (gpx) }}}
439 # trackpoint(): Various loop tests {{{
441 for my $Elem (qw{format lat lon what}) {
442 my %Dat = %Bck;
444 $Dat{"$Elem"} = '2d';
445 is(trackpoint(%Dat),
446 undef,
447 "trackpoint(): {'$Elem'} with invalid value (\"$Dat{$Elem}\") returns undef"
452 for my $Elem (qw{year month day hour min sec}) {
453 # Date tests {{{
454 my %Dat;
456 %Dat = %Bck;
457 $Dat{"$Elem"} = '';
458 is(trackpoint(%Dat),
459 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
460 "trackpoint(): {'$Elem'} with empty value skips time"
463 %Dat = %Bck;
464 $Dat{"$Elem"} = '2d';
465 is(trackpoint(%Dat),
466 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
467 "trackpoint(): {'$Elem'} with invalid value (\"$Dat{$Elem}\") skips time"
470 %Dat = %Bck;
471 $Dat{$Elem} = "00000$Dat{$Elem}";
472 is(trackpoint(%Dat),
473 "<tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
474 "trackpoint(): Strip prefixing zeros from {'$Elem'}"
477 %Dat = %Bck;
478 $Dat{"$Elem"} = 0-$Dat{$Elem};
479 is(trackpoint(%Dat),
480 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
481 "trackpoint(): {'$Elem'} is negative, skip time"
484 if ($Elem ne "sec") {
485 %Dat = %Bck;
486 $Dat{"$Elem"} = "$Dat{$Elem}.00";
487 is(trackpoint(%Dat),
488 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
489 "trackpoint(): Decimals in {'$Elem'}, skip time"
493 # Date tests }}}
496 %Dat = %Bck;
497 $Dat{'sec'} = "$Dat{'sec'}.00";
498 is(trackpoint(%Dat),
499 "<tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
500 "trackpoint(): Remove trailing zeros in {'sec'} decimals"
503 for my $Elem (qw{format what error}) {
504 my %Dat = %Bck;
505 $Dat{$Elem} = undef;
506 is(trackpoint(%Dat),
507 undef,
508 "trackpoint(): Missing {'$Elem'}, return undef"
512 # Various loop tests }}}
514 # trackpoint() }}}
516 diag("Testing output from ../gpst");
518 diag("Read empty input (/dev/null)..."); # {{{
519 testcmd("../gpst </dev/null", # {{{
520 <<END,
521 <?xml version="1.0" encoding="UTF-8"?>
522 <gpsml>
523 <track>
524 </track>
525 </gpsml>
528 "Read from /dev/null",
532 # }}}
533 testcmd("../gpst -o gpx </dev/null", # {{{
534 <<END,
535 $gpx_header
536 <trk>
537 <trkseg>
538 </trkseg>
539 </trk>
540 </gpx>
543 "Output gpx from /dev/null",
547 # }}}
548 # empty input }}}
549 diag("Read empty files..."); # {{{
550 testcmd("echo '<tp> </tp>' | ../gpst", # {{{
551 <<END,
552 <?xml version="1.0" encoding="UTF-8"?>
553 <gpsml>
554 <track>
555 </track>
556 </gpsml>
559 "Don’t print empty trackpoints",
563 # }}}
564 # Read empty files }}}
565 diag("Testing --chronology option..."); # {{{
566 testcmd("../gpst --chronology chronology-error.gpsml", # {{{
567 <<END,
568 <?xml version="1.0" encoding="UTF-8"?>
569 <gpsml>
570 <track>
571 <title>Chronology errors</title>
572 <tp> <time>2006-05-02T09:46:37Z</time> <lat>60.45369</lat> <lon>5.31559</lon> <ele>95</ele> </tp>
573 <tp> <time>2006-05-02T09:46:42Z</time> <lat>60.45353</lat> <lon>5.31548</lon> <ele>94</ele> </tp>
574 <tp> <time>2006-05-02T09:46:46Z</time> <lat>60.45353</lat> <lon>5.31561</lon> <ele>94</ele> </tp>
575 <break/>
576 <tp> <time>2006-05-02T09:40:07Z</time> <lat>60.45369</lat> <lon>5.31597</lon> <desc>Out of chronology</desc> </tp>
577 <break/>
578 <pause>0:00:37:54</pause>
579 <tp> <time>2006-05-02T10:18:01Z</time> <lat>60.45418</lat> <lon>5.31517</lon> <ele>92</ele> </tp>
580 <tp> <time>2006-05-02T10:18:06Z</time> <lat>60.45407</lat> <lon>5.31542</lon> <ele>91</ele> </tp>
581 <tp> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </tp>
582 <tp> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </tp>
583 <tp> <time>2006-05-02T10:18:10Z</time> <lat>60.45395</lat> <lon>5.31544</lon> <ele>103</ele> </tp>
584 <tp> <time>2006-05-02T10:18:11Z</time> <lat>60.45391</lat> <lon>5.31545</lon> <ele>107</ele> </tp>
585 </track>
586 </gpsml>
588 "gpst: chronology-error.gpsml: \"2006-05-02T09:46:46Z\": Next date is 0:00:06:39 in the past (2006-05-02T09:40:07Z)\n" .
589 "gpst: chronology-error.gpsml: \"2006-05-02T10:18:09Z\": Duplicated time\n",
590 "Check for chronology errors and duplicated times",
594 # }}}
595 # --chronology option }}}
596 diag("Testing --skip-dups option..."); # {{{
597 testcmd("../gpst -d no_signal.mayko", # {{{
598 <<END,
599 <?xml version="1.0" encoding="UTF-8"?>
600 <gpsml>
601 <track>
602 <tp> <time>2002-12-22T21:42:24Z</time> <lat>70.6800486</lat> <lon>23.6746151</lon> </tp>
603 <tp> <time>2002-12-22T21:42:32Z</time> <lat>70.6799322</lat> <lon>23.6740038</lon> </tp>
604 <tp> <time>2002-12-22T21:42:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </tp>
605 <etp err="dup"> <time>2002-12-22T21:43:51Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
606 <etp err="dup"> <time>2002-12-22T21:43:52Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
607 <etp err="dup"> <time>2002-12-22T21:43:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
608 <tp> <time>2002-12-22T21:44:45Z</time> <lat>70.6800774</lat> <lon>23.6757566</lon> </tp>
609 <tp> <time>2002-12-22T21:44:52Z</time> <lat>70.6801502</lat> <lon>23.6753442</lon> </tp>
610 <tp> <time>2002-12-22T21:45:04Z</time> <lat>70.6801905</lat> <lon>23.6757542</lon> </tp>
611 </track>
612 </gpsml>
615 "Remove duplicated positions from gpsml",
619 # }}}
620 testcmd("../gpst -d -o csv no_signal.mayko", # {{{
621 <<END,
622 2002-12-22T21:42:24Z\t23.6746151\t70.6800486\t\t
623 2002-12-22T21:42:32Z\t23.6740038\t70.6799322\t\t
624 2002-12-22T21:42:54Z\t23.6723991\t70.6796266\t\t
625 2002-12-22T21:44:45Z\t23.6757566\t70.6800774\t\t
626 2002-12-22T21:44:52Z\t23.6753442\t70.6801502\t\t
627 2002-12-22T21:45:04Z\t23.6757542\t70.6801905\t\t
630 "Remove duplicated positions from csv output format",
634 # }}}
635 testcmd("../gpst -d -o clean no_signal.mayko", # {{{
636 <<END,
637 23.6746151\t70.6800486\t
638 23.6740038\t70.6799322\t
639 23.6723991\t70.6796266\t
640 23.6757566\t70.6800774\t
641 23.6753442\t70.6801502\t
642 23.6757542\t70.6801905\t
645 "Remove duplicated positions from clean output format",
649 # }}}
650 testcmd("../gpst -d -o pgtab no_signal.mayko", # {{{
651 <<END,
652 2002-12-22T21:42:24Z\t(70.6800486,23.6746151)\t\\N\t\\N\t\\N\t\\N
653 2002-12-22T21:42:32Z\t(70.6799322,23.6740038)\t\\N\t\\N\t\\N\t\\N
654 2002-12-22T21:42:54Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N
655 2002-12-22T21:44:45Z\t(70.6800774,23.6757566)\t\\N\t\\N\t\\N\t\\N
656 2002-12-22T21:44:52Z\t(70.6801502,23.6753442)\t\\N\t\\N\t\\N\t\\N
657 2002-12-22T21:45:04Z\t(70.6801905,23.6757542)\t\\N\t\\N\t\\N\t\\N
660 "Remove duplicated positions from pgtab output format",
664 # }}}
665 # --skip-dups option }}}
666 diag("Testing --epoch option..."); # {{{
667 testcmd("../gpst -e pause.gpx", # {{{
668 <<END,
669 <?xml version="1.0" encoding="UTF-8"?>
670 <gpsml>
671 <track>
672 <title>ACTIVE LOG164705</title>
673 <tp> <time>2006-05-21T16:49:11Z</time> <lat>60.425494</lat> <lon>5.299534</lon> <ele>25.26</ele> </tp>
674 <tp> <time>2006-05-21T16:49:46Z</time> <lat>60.425464</lat> <lon>5.29961</lon> <ele>24.931</ele> </tp>
675 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.425314</lat> <lon>5.299694</lon> <ele>27.975</ele> </tp>
676 <tp> <time>2006-05-21T16:56:36Z</time> <lat>60.425384</lat> <lon>5.299741</lon> <ele>31.017</ele> </tp>
677 <tp> <time>2006-05-21T16:56:47Z</time> <lat>60.425339</lat> <lon>5.299958</lon> <ele>30.98</ele> </tp>
678 <tp> <time>2006-05-21T16:56:56Z</time> <lat>60.425238</lat> <lon>5.29964</lon> <ele>30.538</ele> </tp>
679 <tp> <time>2006-05-21T16:57:03Z</time> <lat>60.425246</lat> <lon>5.299686</lon> <ele>30.515</ele> </tp>
680 <tp> <time>2006-05-21T16:59:08Z</time> <lat>60.425345</lat> <lon>5.299773</lon> <ele>31.936</ele> </tp>
681 <tp> <time>2006-05-21T17:00:54Z</time> <lat>60.425457</lat> <lon>5.299419</lon> <ele>31.794</ele> </tp>
682 </track>
683 </gpsml>
686 "--epoch is ignored in gpsml output",
690 # }}}
691 testcmd("../gpst -e -o gpx pause-noname.gpx", # {{{
692 <<END,
693 $gpx_header
694 <trk>
695 <trkseg>
696 <trkpt lat="60.425494" lon="5.299534"> <ele>25.260</ele> <time>2006-05-21T16:49:11Z</time> </trkpt>
697 <trkpt lat="60.425464" lon="5.299610"> <ele>24.931</ele> <time>2006-05-21T16:49:46Z</time> </trkpt>
698 <trkpt lat="60.425314" lon="5.299694"> <ele>27.975</ele> <time>2006-05-21T16:52:04Z</time> </trkpt>
699 <trkpt lat="60.425384" lon="5.299741"> <ele>31.017</ele> <time>2006-05-21T16:56:36Z</time> </trkpt>
700 <trkpt lat="60.425339" lon="5.299958"> <ele>30.980</ele> <time>2006-05-21T16:56:47Z</time> </trkpt>
701 <trkpt lat="60.425238" lon="5.299640"> <ele>30.538</ele> <time>2006-05-21T16:56:56Z</time> </trkpt>
702 <trkpt lat="60.425246" lon="5.299686"> <ele>30.515</ele> <time>2006-05-21T16:57:03Z</time> </trkpt>
703 <trkpt lat="60.425345" lon="5.299773"> <ele>31.936</ele> <time>2006-05-21T16:59:08Z</time> </trkpt>
704 <trkpt lat="60.425457" lon="5.299419"> <ele>31.794</ele> <time>2006-05-21T17:00:54Z</time> </trkpt>
705 </trkseg>
706 </trk>
707 </gpx>
710 "--epoch is ignored in gpx output",
714 # }}}
715 # --epoch option }}}
716 diag("Testing --fix option..."); # {{{
717 testcmd("../gpst --fix --chronology chronology-error.gpsml", # {{{
718 <<END,
719 <?xml version="1.0" encoding="UTF-8"?>
720 <gpsml>
721 <track>
722 <title>Chronology errors</title>
723 <tp> <time>2006-05-02T09:46:37Z</time> <lat>60.45369</lat> <lon>5.31559</lon> <ele>95</ele> </tp>
724 <tp> <time>2006-05-02T09:46:42Z</time> <lat>60.45353</lat> <lon>5.31548</lon> <ele>94</ele> </tp>
725 <tp> <time>2006-05-02T09:46:46Z</time> <lat>60.45353</lat> <lon>5.31561</lon> <ele>94</ele> </tp>
726 <break/>
727 <etp err="chrono"> <time>2006-05-02T09:40:07Z</time> <lat>60.45369</lat> <lon>5.31597</lon> <desc>Out of chronology</desc> </etp>
728 <break/>
729 <pause>0:00:37:54</pause>
730 <tp> <time>2006-05-02T10:18:01Z</time> <lat>60.45418</lat> <lon>5.31517</lon> <ele>92</ele> </tp>
731 <tp> <time>2006-05-02T10:18:06Z</time> <lat>60.45407</lat> <lon>5.31542</lon> <ele>91</ele> </tp>
732 <tp> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </tp>
733 <etp err="duptime"> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </etp>
734 <tp> <time>2006-05-02T10:18:10Z</time> <lat>60.45395</lat> <lon>5.31544</lon> <ele>103</ele> </tp>
735 <tp> <time>2006-05-02T10:18:11Z</time> <lat>60.45391</lat> <lon>5.31545</lon> <ele>107</ele> </tp>
736 </track>
737 </gpsml>
739 "gpst: chronology-error.gpsml: \"2006-05-02T09:46:46Z\": Next date is 0:00:06:39 in the past (2006-05-02T09:40:07Z)\n" .
740 "gpst: chronology-error.gpsml: \"2006-05-02T10:18:09Z\": Duplicated time\n",
741 "Remove bad timestamps",
745 # }}}
746 # --fix option }}}
747 diag("Testing --from-date option..."); # {{{
748 # --from-date option }}}
749 diag("Testing -h (--help) option..."); # {{{
750 likecmd("$CMD -h", # {{{
751 '/ Show this help\./',
752 '/^$/',
753 "Option -h prints help screen",
756 # }}}
757 # --help option }}}
758 diag("Testing --inside option..."); # {{{
759 testcmd("../gpst --pos1 2.11,2.12 --pos2 3.31,3.32 --inside multitrack-pause.gpx", # {{{
760 <<END,
761 <?xml version="1.0" encoding="UTF-8"?>
762 <gpsml>
763 <track>
764 <title>track1</title>
765 <break/>
766 <title>track2</title>
767 <tp> <time>2006-01-02T00:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
768 <tp> <time>2006-01-02T00:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
769 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
770 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
771 <break/>
772 <tp> <time>2006-01-02T01:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
773 <break/>
774 <title>track3</title>
775 <tp> <time>2006-01-03T02:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
776 <tp> <time>2006-01-03T02:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
777 <tp> <time>2006-01-03T02:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
778 </track>
779 </gpsml>
782 "Check --inside option (gpx to gpst)",
785 # }}}
787 # --inside option }}}
788 diag("Testing --undefined option..."); # {{{
789 # --undefined option }}}
790 diag("Testing --output option..."); # {{{
791 # gpsml (Default)
792 testcmd("../gpst log.mcsv", # {{{
793 <<END,
794 <?xml version="1.0" encoding="UTF-8"?>
795 <gpsml>
796 <track>
797 <break/>
798 <title>ACTIVE LOG 125</title>
799 <tp> <time>2006-03-04T11:12:30Z</time> <lat>54.96883</lat> <lon>-1.62439</lon> <ele>77</ele> </tp>
800 <tp> <time>2006-03-04T11:12:47Z</time> <lat>54.96878</lat> <lon>-1.62413</lon> <ele>77</ele> </tp>
801 <tp> <time>2006-03-04T11:12:55Z</time> <lat>54.96913</lat> <lon>-1.62616</lon> <ele>77</ele> </tp>
802 <tp> <time>2006-03-04T11:13:04Z</time> <lat>54.96934</lat> <lon>-1.62624</lon> <ele>77.5</ele> </tp>
803 <tp> <time>2006-03-04T11:13:33Z</time> <lat>54.96934</lat> <lon>-1.62596</lon> <ele>78</ele> </tp>
804 <tp> <time>2006-03-04T11:13:48Z</time> <lat>54.96931</lat> <lon>-1.62645</lon> <ele>78</ele> </tp>
805 <tp> <time>2006-03-04T11:14:05Z</time> <lat>54.96918</lat> <lon>-1.62603</lon> <ele>79</ele> </tp>
806 <tp> <time>2006-03-04T11:14:33Z</time> <lat>54.96901</lat> <lon>-1.62364</lon> <ele>76.1</ele> </tp>
807 <tp> <time>2006-03-04T11:15:02Z</time> <lat>54.96922</lat> <lon>-1.6254</lon> <ele>76.1</ele> </tp>
808 <tp> <time>2006-03-04T11:15:27Z</time> <lat>54.96914</lat> <lon>-1.62526</lon> <ele>75.1</ele> </tp>
809 <tp> <time>2006-03-04T11:15:50Z</time> <lat>54.96911</lat> <lon>-1.62494</lon> <ele>75.1</ele> </tp>
810 <tp> <time>2006-03-04T11:16:03Z</time> <lat>54.9693</lat> <lon>-1.62489</lon> <ele>75.1</ele> </tp>
811 <tp> <time>2006-03-04T11:16:19Z</time> <lat>54.96901</lat> <lon>-1.62496</lon> <ele>75.1</ele> </tp>
812 <tp> <time>2006-03-04T11:16:52Z</time> <lat>54.96871</lat> <lon>-1.62466</lon> <ele>74.6</ele> </tp>
813 <tp> <time>2006-03-04T11:17:25Z</time> <lat>54.96908</lat> <lon>-1.62488</lon> <ele>72.7</ele> </tp>
814 <break/>
815 <title>ACTIVE LOG 126</title>
816 <tp> <time>2006-03-04T11:18:32Z</time> <lat>54.96904</lat> <lon>-1.62482</lon> <ele>72.7</ele> </tp>
817 <tp> <time>2006-03-04T11:18:35Z</time> <lat>54.96913</lat> <lon>-1.62499</lon> <ele>71.3</ele> </tp>
818 <tp> <time>2006-03-04T11:18:38Z</time> <lat>54.96904</lat> <lon>-1.62497</lon> <ele>70.8</ele> </tp>
819 <tp> <time>2006-03-04T11:18:48Z</time> <lat>54.96913</lat> <lon>-1.62496</lon> <ele>71.8</ele> </tp>
820 <tp> <time>2006-03-04T11:18:55Z</time> <lat>54.96924</lat> <lon>-1.62501</lon> <ele>72.2</ele> </tp>
821 <tp> <time>2006-03-04T11:19:11Z</time> <lat>54.9694</lat> <lon>-1.62521</lon> <ele>71.8</ele> </tp>
822 <tp> <time>2006-03-04T11:19:30Z</time> <lat>54.96916</lat> <lon>-1.62515</lon> <ele>71.3</ele> </tp>
823 <tp> <time>2006-03-04T11:19:53Z</time> <lat>54.96921</lat> <lon>-1.625</lon> <ele>71.3</ele> </tp>
824 <tp> <time>2006-03-04T11:20:21Z</time> <lat>54.96801</lat> <lon>-1.62417</lon> <ele>71.8</ele> </tp>
825 <break/>
826 <title>ACTIVE LOG 127</title>
827 <tp> <time>2006-03-04T11:21:16Z</time> <lat>54.96887</lat> <lon>-1.62504</lon> <ele>70.8</ele> </tp>
828 <tp> <time>2006-03-04T11:21:18Z</time> <lat>54.96898</lat> <lon>-1.62476</lon> <ele>69.8</ele> </tp>
829 <tp> <time>2006-03-04T11:21:29Z</time> <lat>54.9691</lat> <lon>-1.62475</lon> <ele>69.4</ele> </tp>
830 <tp> <time>2006-03-04T11:21:46Z</time> <lat>54.96918</lat> <lon>-1.62468</lon> <ele>70.3</ele> </tp>
831 <tp> <time>2006-03-04T11:22:39Z</time> <lat>54.9692</lat> <lon>-1.62465</lon> <ele>69.4</ele> </tp>
832 <tp> <time>2006-03-04T11:22:43Z</time> <lat>54.96924</lat> <lon>-1.62462</lon> <ele>71.8</ele> </tp>
833 <tp> <time>2006-03-04T11:22:45Z</time> <lat>54.96928</lat> <lon>-1.62463</lon> <ele>71.8</ele> </tp>
834 <tp> <time>2006-03-04T11:23:00Z</time> <lat>54.96945</lat> <lon>-1.62466</lon> <ele>69.4</ele> </tp>
835 </track>
836 </gpsml>
839 "Read Mapsource TAB-separated format",
843 # }}}
844 testcmd("../gpst two-digit_year.mcsv", # {{{
845 <<END,
846 <?xml version="1.0" encoding="UTF-8"?>
847 <gpsml>
848 <track>
849 <break/>
850 <title>ACTIVE LOG 032</title>
851 <tp> <time>2006-03-20T20:35:33Z</time> <lat>60.41324</lat> <lon>5.33352</lon> <ele>14</ele> </tp>
852 <tp> <time>2006-03-20T20:35:38Z</time> <lat>60.38802</lat> <lon>5.33845</lon> <ele>18</ele> </tp>
853 <tp> <time>2006-03-20T20:35:44Z</time> <lat>60.38709</lat> <lon>5.3379</lon> <ele>19</ele> </tp>
854 <tp> <time>2006-03-20T20:35:49Z</time> <lat>60.38641</lat> <lon>5.33732</lon> <ele>18</ele> </tp>
855 <tp> <time>2006-03-20T20:35:54Z</time> <lat>60.38581</lat> <lon>5.33647</lon> <ele>18</ele> </tp>
856 <tp> <time>2006-03-20T20:36:00Z</time> <lat>60.38516</lat> <lon>5.33528</lon> <ele>15</ele> </tp>
857 <tp> <time>2006-03-20T20:36:02Z</time> <lat>60.38495</lat> <lon>5.3349</lon> <ele>13</ele> </tp>
858 </track>
859 </gpsml>
862 "Read Mapsource TAB-separated format with two-digit year",
866 # }}}
867 testcmd("../gpst log.gpstxt", # {{{
868 <<END,
869 <?xml version="1.0" encoding="UTF-8"?>
870 <gpsml>
871 <track>
872 <tp> <time>2003-06-13T14:36:09Z</time> <lat>59.521517</lat> <lon>7.391867</lon> <ele>762</ele> </tp>
873 <tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>
874 <tp> <time>2003-06-13T14:36:11Z</time> <lat>59.5213</lat> <lon>7.392417</lon> <ele>761</ele> </tp>
875 <tp> <time>2003-06-13T14:36:12Z</time> <lat>59.521183</lat> <lon>7.3927</lon> <ele>761</ele> </tp>
876 <etp err="nosignal"> <time>2003-06-13T14:36:13Z</time> </etp>
877 <tp> <time>2003-06-13T14:36:15Z</time> <lat>59.52085</lat> <lon>7.393517</lon> <ele>760</ele> </tp>
878 <tp> <time>2003-06-13T14:36:16Z</time> <lat>59.520733</lat> <lon>7.393783</lon> <ele>760</ele> </tp>
879 <tp> <time>2003-06-13T14:36:17Z</time> <lat>59.52065</lat> <lon>7.39405</lon> <ele>760</ele> </tp>
880 <tp> <time>2003-06-13T14:36:18Z</time> <lat>59.520583</lat> <lon>7.394333</lon> <ele>760</ele> </tp>
881 <tp> <time>2003-06-13T14:36:19Z</time> <lat>59.520533</lat> <lon>7.394633</lon> <ele>759</ele> </tp>
882 <tp> <time>2003-06-13T14:36:20Z</time> <lat>59.520483</lat> <lon>7.394917</lon> <ele>759</ele> </tp>
883 <tp> <time>2003-06-13T14:36:21Z</time> <lat>59.520433</lat> <lon>7.395233</lon> <ele>759</ele> </tp>
884 <etp err="nosignal"> <time>2003-06-13T14:36:22Z</time> </etp>
885 <tp> <time>2003-06-13T14:36:24Z</time> <lat>59.520283</lat> <lon>7.396233</lon> <ele>758</ele> </tp>
886 <tp> <time>2003-06-13T14:36:25Z</time> <lat>59.520233</lat> <lon>7.39655</lon> <ele>758</ele> </tp>
887 <tp> <time>2003-06-13T14:36:26Z</time> <lat>59.520183</lat> <lon>7.396883</lon> <ele>757</ele> </tp>
888 <tp> <time>2003-06-13T14:36:27Z</time> <lat>59.520133</lat> <lon>7.397217</lon> <ele>757</ele> </tp>
889 <tp> <time>2003-06-13T14:36:28Z</time> <lat>59.5201</lat> <lon>7.397567</lon> <ele>757</ele> </tp>
890 </track>
891 </gpsml>
894 "Read Garmin serial text format",
898 # }}}
899 testcmd("../gpst log.dos.mayko", # {{{
900 <<END,
901 <?xml version="1.0" encoding="UTF-8"?>
902 <gpsml>
903 <track>
904 <tp> <time>2003-06-15T10:27:45Z</time> <lat>58.1818158</lat> <lon>8.1225077</lon> </tp>
905 <tp> <time>2003-06-15T10:27:53Z</time> <lat>58.1818712</lat> <lon>8.12532</lon> </tp>
906 <tp> <time>2003-06-15T10:27:57Z</time> <lat>58.1816347</lat> <lon>8.1266031</lon> </tp>
907 <tp> <time>2003-06-15T10:28:03Z</time> <lat>58.1812099</lat> <lon>8.1284612</lon> </tp>
908 <tp> <time>2003-06-15T10:28:06Z</time> <lat>58.1810315</lat> <lon>8.129395</lon> </tp>
909 <tp> <time>2003-06-15T10:28:10Z</time> <lat>58.1809621</lat> <lon>8.13074</lon> </tp>
910 </track>
911 </gpsml>
914 "Read DOS-formatted Mayko format",
918 # }}}
919 testcmd("../gpst log.dos.gpstxt", # {{{
920 <<END,
921 <?xml version="1.0" encoding="UTF-8"?>
922 <gpsml>
923 <track>
924 <tp> <time>2003-01-05T16:47:11Z</time> <lat>66.908167</lat> <lon>15.022983</lon> <ele>11472</ele> </tp>
925 <tp> <time>2003-01-05T16:47:12Z</time> <lat>66.90625</lat> <lon>15.020667</lon> <ele>11472</ele> </tp>
926 <tp> <time>2003-01-05T16:47:13Z</time> <lat>66.904317</lat> <lon>15.01835</lon> <ele>11472</ele> </tp>
927 <tp> <time>2003-01-05T16:47:14Z</time> <lat>66.9024</lat> <lon>15.016017</lon> <ele>11473</ele> </tp>
928 <tp> <time>2003-01-05T16:47:15Z</time> <lat>66.900483</lat> <lon>15.0137</lon> <ele>11474</ele> </tp>
929 <tp> <time>2003-01-05T16:47:16Z</time> <lat>66.898567</lat> <lon>15.011383</lon> <ele>11474</ele> </tp>
930 <tp> <time>2003-01-05T16:47:17Z</time> <lat>66.896633</lat> <lon>15.009067</lon> <ele>11475</ele> </tp>
931 <tp> <time>2003-01-05T16:47:18Z</time> <lat>66.894717</lat> <lon>15.006733</lon> <ele>11475</ele> </tp>
932 <tp> <time>2003-01-05T16:47:19Z</time> <lat>66.8928</lat> <lon>15.004417</lon> <ele>11475</ele> </tp>
933 <tp> <time>2003-01-05T16:47:20Z</time> <lat>66.890867</lat> <lon>15.0021</lon> <ele>11475</ele> </tp>
934 <tp> <time>2003-01-05T16:47:21Z</time> <lat>66.88895</lat> <lon>14.999783</lon> <ele>11475</ele> </tp>
935 </track>
936 </gpsml>
939 "Read DOS-formatted Garmin serial text format",
943 # }}}
944 testcmd("../gpst log.unix.mcsv", # {{{
945 <<END,
946 <?xml version="1.0" encoding="UTF-8"?>
947 <gpsml>
948 <track>
949 <break/>
950 <title>ACTIVE LOG 058</title>
951 <tp> <time>2006-02-21T15:14:25Z</time> <lat>60.36662</lat> <lon>5.24885</lon> <ele>31.9</ele> </tp>
952 <tp> <time>2006-02-21T15:14:30Z</time> <lat>60.37057</lat> <lon>5.22956</lon> <ele>35.2</ele> </tp>
953 <tp> <time>2006-02-21T15:14:35Z</time> <lat>60.37019</lat> <lon>5.22817</lon> <ele>39.6</ele> </tp>
954 <tp> <time>2006-02-21T15:14:36Z</time> <lat>60.37012</lat> <lon>5.2279</lon> <ele>41</ele> </tp>
955 <tp> <time>2006-02-21T15:14:40Z</time> <lat>60.37009</lat> <lon>5.22682</lon> <ele>47.2</ele> </tp>
956 <tp> <time>2006-02-21T15:14:42Z</time> <lat>60.37011</lat> <lon>5.22641</lon> <ele>49.2</ele> </tp>
957 <tp> <time>2006-02-21T15:14:44Z</time> <lat>60.37011</lat> <lon>5.22607</lon> <ele>50.1</ele> </tp>
958 <tp> <time>2006-02-21T15:14:48Z</time> <lat>60.37002</lat> <lon>5.22568</lon> <ele>51.1</ele> </tp>
959 <tp> <time>2006-02-21T15:14:51Z</time> <lat>60.3701</lat> <lon>5.22548</lon> <ele>52.5</ele> </tp>
960 </track>
961 </gpsml>
964 "Read UNIX-formatted Garmin Mapsource TAB-separated format",
968 # }}}
969 testcmd("../gpst multitrack.gpx", # {{{
970 <<END,
971 <?xml version="1.0" encoding="UTF-8"?>
972 <gpsml>
973 <track>
974 <title>Track 1</title>
975 <tp> <time>2003-02-11T23:35:39Z</time> <lat>51.4968266</lat> <lon>-0.1448824</lon> </tp>
976 <tp> <time>2003-02-11T23:35:49Z</time> <lat>51.4968227</lat> <lon>-0.1449938</lon> </tp>
977 <tp> <time>2003-02-11T23:36:14Z</time> <lat>51.496904</lat> <lon>-0.1453202</lon> </tp>
978 <break/>
979 <title>Track 2</title>
980 <tp> <time>2003-02-11T23:36:16Z</time> <lat>51.4969214</lat> <lon>-0.1453398</lon> </tp>
981 <tp> <time>2003-02-11T23:36:31Z</time> <lat>51.4969816</lat> <lon>-0.1455514</lon> </tp>
982 <tp> <time>2003-02-11T23:36:43Z</time> <lat>51.4970224</lat> <lon>-0.1457489</lon> <ele>1000</ele> </tp>
983 <tp> <time>2003-02-11T23:36:50Z</time> <lat>51.4970452</lat> <lon>-0.1457804</lon> </tp>
984 <break/>
985 <title>Track 3</title>
986 <tp> <time>2003-02-11T23:37:05Z</time> <lat>51.497068</lat> <lon>-0.1458608</lon> </tp>
987 <tp> <time>2003-02-11T23:37:22Z</time> <lat>51.4971658</lat> <lon>-0.1460047</lon> </tp>
988 <tp> <time>2003-02-11T23:37:36Z</time> <lat>51.4972469</lat> <lon>-0.1461614</lon> </tp>
989 <break/>
990 <title>Track 4</title>
991 <tp> <time>2003-02-11T23:37:43Z</time> <lat>51.4972731</lat> <lon>-0.1462394</lon> </tp>
992 <tp> <time>2003-02-11T23:38:04Z</time> <lat>51.4973437</lat> <lon>-0.1463232</lon> </tp>
993 <tp> <time>2003-02-11T23:38:28Z</time> <lat>51.4973337</lat> <lon>-0.1462949</lon> </tp>
994 <tp> <time>2003-02-11T23:38:34Z</time> <lat>51.4973218</lat> <lon>-0.1462825</lon> </tp>
995 <tp> <time>2003-02-11T23:38:35Z</time> <lat>51.4973145</lat> <lon>-0.1462732</lon> </tp>
996 </track>
997 </gpsml>
1000 "Read GPX file with multiple tracks",
1004 # }}}
1005 testcmd("../gpst compact.gpx", # {{{
1006 <<END,
1007 <?xml version="1.0" encoding="UTF-8"?>
1008 <gpsml>
1009 <track>
1010 <title>All whitespace stripped</title>
1011 <tp> <time>2002-12-30T15:22:04Z</time> <lat>70.660932</lat> <lon>23.7028354</lon> </tp>
1012 <tp> <time>2002-12-30T15:22:06Z</time> <lat>70.6609392</lat> <lon>23.7028468</lon> </tp>
1013 <tp> <time>2002-12-30T15:22:08Z</time> <lat>70.6609429</lat> <lon>23.7028499</lon> </tp>
1014 <tp> <time>2002-12-30T15:22:11Z</time> <lat>70.6609381</lat> <lon>23.702862</lon> </tp>
1015 <tp> <time>2002-12-30T15:22:12Z</time> <lat>70.6609368</lat> <lon>23.7028648</lon> </tp>
1016 <tp> <time>2002-12-30T15:22:13Z</time> <lat>70.6609344</lat> <lon>23.7028652</lon> </tp>
1017 <tp> <time>2002-12-30T15:22:15Z</time> <lat>70.6609349</lat> <lon>23.7028707</lon> </tp>
1018 <tp> <time>2002-12-30T15:22:17Z</time> <lat>70.6609348</lat> <lon>23.7028654</lon> </tp>
1019 <tp> <time>2002-12-30T15:22:19Z</time> <lat>70.6609347</lat> <lon>23.7028599</lon> </tp>
1020 <tp> <time>2002-12-30T15:22:20Z</time> <lat>70.6609348</lat> <lon>23.7028609</lon> </tp>
1021 <tp> <time>2002-12-30T15:22:23Z</time> <lat>70.6609388</lat> <lon>23.7028653</lon> </tp>
1022 <tp> <time>2002-12-30T15:22:25Z</time> <lat>70.6609426</lat> <lon>23.7028732</lon> </tp>
1023 </track>
1024 </gpsml>
1027 "Read GPX one-liner",
1031 # }}}
1032 testcmd("../gpst missing.gpsml", # {{{
1033 <<END,
1034 <?xml version="1.0" encoding="UTF-8"?>
1035 <gpsml>
1036 <track>
1037 <title>Missing various elements</title>
1038 <tp> <time>2006-04-30T17:16:59Z</time> </tp>
1039 <tp> <time>2006-04-30T17:17:00Z</time> <lat>60.42352</lat> </tp>
1040 <tp> <time>2006-04-30T17:17:09Z</time> <lat>60.42353</lat> <lon>5.34185</lon> </tp>
1041 <tp> <time>2006-04-30T17:17:11Z</time> <lon>5.34187</lon> <ele>483</ele> </tp>
1042 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1043 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1044 <tp> <lon>5.34224</lon> <ele>484</ele> </tp>
1045 <tp> <ele>486</ele> </tp>
1046 <tp> <desc>Missing everything</desc> </tp>
1047 <tp> <lat>60.42339</lat> </tp>
1048 <tp> <lon>5.34262</lon> </tp>
1049 <tp> <time>2006-04-30T17:18:03Z</time> <lat>60.42339</lat> <ele>490</ele> </tp>
1050 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1051 </track>
1052 </gpsml>
1055 "Read gpsml with various data missing",
1059 # }}}
1060 testcmd("../gpst different_dateformats.gpsml", # {{{
1061 <<END,
1062 <?xml version="1.0" encoding="UTF-8"?>
1063 <gpsml>
1064 <track>
1065 <title>Date format variations</title>
1066 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1</lat> <lon>1</lon> </tp>
1067 <tp> <time>2006-01-01T00:00:02Z</time> <lat>2</lat> <lon>2</lon> </tp>
1068 <tp> <time>2006-01-01T00:00:03Z</time> <lat>3</lat> <lon>3</lon> </tp>
1069 <tp> <time>2006-01-01T00:00:04Z</time> <lat>4</lat> <lon>4</lon> </tp>
1070 </track>
1071 </gpsml>
1074 "Read different date formats from gpsml file",
1078 # }}}
1079 testcmd("../gpst multitrack-pause.gpx", # {{{
1080 file_data("multitrack-pause.gpsml"),
1082 "Should be equal to multitrack-pause.gpsml",
1086 # }}}
1087 # gpx
1088 testcmd("../gpst -o gpx no_signal.mayko", # {{{
1089 <<END,
1090 $gpx_header
1091 <trk>
1092 <trkseg>
1093 <trkpt lat="70.6800486" lon="23.6746151"> <time>2002-12-22T21:42:24Z</time> </trkpt>
1094 <trkpt lat="70.6799322" lon="23.6740038"> <time>2002-12-22T21:42:32Z</time> </trkpt>
1095 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:42:54Z</time> </trkpt>
1096 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:51Z</time> </trkpt>
1097 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:52Z</time> </trkpt>
1098 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:54Z</time> </trkpt>
1099 <trkpt lat="70.6800774" lon="23.6757566"> <time>2002-12-22T21:44:45Z</time> </trkpt>
1100 <trkpt lat="70.6801502" lon="23.6753442"> <time>2002-12-22T21:44:52Z</time> </trkpt>
1101 <trkpt lat="70.6801905" lon="23.6757542"> <time>2002-12-22T21:45:04Z</time> </trkpt>
1102 </trkseg>
1103 </trk>
1104 </gpx>
1107 "Output GPX from Mayko file with duplicates",
1111 # }}}
1112 testcmd("../gpst -o gpx comments.mayko", # {{{
1113 <<END,
1114 $gpx_header
1115 <trk>
1116 <trkseg>
1117 <trkpt lat="70.6800486" lon="23.6746151"> <time>2002-12-22T21:42:24Z</time> </trkpt>
1118 <trkpt lat="70.6799322" lon="23.6740038"> <time>2002-12-22T21:42:32Z</time> </trkpt>
1119 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:42:54Z</time> </trkpt>
1120 <!-- <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:51Z</time> <extensions> <error>desc</error> </extensions> </trkpt> -->
1121 <!-- <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:52Z</time> <extensions> <error>desc</error> </extensions> </trkpt> -->
1122 <!-- <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:54Z</time> <extensions> <error>desc</error> </extensions> </trkpt> -->
1123 <trkpt lat="70.6800774" lon="23.6757566"> <time>2002-12-22T21:44:45Z</time> </trkpt>
1124 </trkseg>
1125 <trkseg>
1126 <trkpt lat="70.6801502" lon="23.6753442"> <time>2002-12-22T21:44:52Z</time> </trkpt>
1127 <trkpt lat="70.6801905" lon="23.6757542"> <time>2002-12-22T21:45:04Z</time> </trkpt>
1128 </trkseg>
1129 </trk>
1130 </gpx>
1133 "Output GPX from Mayko file with commented-out lines",
1137 # }}}
1138 testcmd("../gpst -o gpx missing-noname.gpsml", # {{{
1139 <<END,
1140 $gpx_header
1141 <trk>
1142 <trkseg>
1143 <trkpt lat="60.42353" lon="5.34185"> <time>2006-04-30T17:17:09Z</time> </trkpt>
1144 <trkpt lat="60.42347" lon="5.34212"> <ele>486</ele> </trkpt>
1145 <trkpt lat="60.42338" lon="5.34269"> <ele>487</ele> <time>2006-04-30T17:18:05Z</time> </trkpt>
1146 </trkseg>
1147 </trk>
1148 </gpx>
1151 "Output GPX from gpsml with missing data",
1155 # }}}
1156 # xgraph
1157 testcmd("../gpst -o xgraph multitrack.gpx", # {{{
1158 <<END,
1159 -0.1448824 51.4968266
1160 -0.1449938 51.4968227
1161 -0.1453202 51.4969040
1162 move -0.1453398 51.4969214
1163 -0.1455514 51.4969816
1164 -0.1457489 51.4970224
1165 -0.1457804 51.4970452
1166 move -0.1458608 51.4970680
1167 -0.1460047 51.4971658
1168 -0.1461614 51.4972469
1169 move -0.1462394 51.4972731
1170 -0.1463232 51.4973437
1171 -0.1462949 51.4973337
1172 -0.1462825 51.4973218
1173 -0.1462732 51.4973145
1176 "Output xgraph format from GPX",
1180 # }}}
1181 # pgtab
1182 testcmd("../gpst -o pgtab compact.gpx", # {{{
1183 <<END,
1184 2002-12-30T15:22:04Z\t(70.6609320,23.7028354)\t\\N\t\\N\t\\N\t\\N
1185 2002-12-30T15:22:06Z\t(70.6609392,23.7028468)\t\\N\t\\N\t\\N\t\\N
1186 2002-12-30T15:22:08Z\t(70.6609429,23.7028499)\t\\N\t\\N\t\\N\t\\N
1187 2002-12-30T15:22:11Z\t(70.6609381,23.7028620)\t\\N\t\\N\t\\N\t\\N
1188 2002-12-30T15:22:12Z\t(70.6609368,23.7028648)\t\\N\t\\N\t\\N\t\\N
1189 2002-12-30T15:22:13Z\t(70.6609344,23.7028652)\t\\N\t\\N\t\\N\t\\N
1190 2002-12-30T15:22:15Z\t(70.6609349,23.7028707)\t\\N\t\\N\t\\N\t\\N
1191 2002-12-30T15:22:17Z\t(70.6609348,23.7028654)\t\\N\t\\N\t\\N\t\\N
1192 2002-12-30T15:22:19Z\t(70.6609347,23.7028599)\t\\N\t\\N\t\\N\t\\N
1193 2002-12-30T15:22:20Z\t(70.6609348,23.7028609)\t\\N\t\\N\t\\N\t\\N
1194 2002-12-30T15:22:23Z\t(70.6609388,23.7028653)\t\\N\t\\N\t\\N\t\\N
1195 2002-12-30T15:22:25Z\t(70.6609426,23.7028732)\t\\N\t\\N\t\\N\t\\N
1198 "Output pgtab from gpx format",
1202 # }}}
1203 testcmd("../gpst -o pgtab no_signal.mayko", # {{{
1204 <<END,
1205 2002-12-22T21:42:24Z\t(70.6800486,23.6746151)\t\\N\t\\N\t\\N\t\\N
1206 2002-12-22T21:42:32Z\t(70.6799322,23.6740038)\t\\N\t\\N\t\\N\t\\N
1207 2002-12-22T21:42:54Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N
1208 2002-12-22T21:43:51Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N
1209 2002-12-22T21:43:52Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N
1210 2002-12-22T21:43:54Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N
1211 2002-12-22T21:44:45Z\t(70.6800774,23.6757566)\t\\N\t\\N\t\\N\t\\N
1212 2002-12-22T21:44:52Z\t(70.6801502,23.6753442)\t\\N\t\\N\t\\N\t\\N
1213 2002-12-22T21:45:04Z\t(70.6801905,23.6757542)\t\\N\t\\N\t\\N\t\\N
1216 "Output pgtab from mayko format",
1220 # }}}
1221 testcmd("../gpst -o pgtab missing.gpsml", # {{{
1222 <<END,
1223 2006-04-30T17:17:09Z\t(60.42353,5.34185)\t\\N\t\\N\t\\N\t\\N
1224 \\N\t(60.42347,5.34212)\t486\t\\N\t\\N\t\\N
1225 2006-04-30T17:18:05Z\t(60.42338,5.34269)\t487\t\\N\t\\N\t\\N
1228 "Output pgtab from missing.gpsml",
1232 # }}}
1233 # csv
1234 testcmd("../gpst -o csv log.dos.mayko", # {{{
1235 <<END,
1236 2003-06-15T10:27:45Z\t8.1225077\t58.1818158\t\t
1237 2003-06-15T10:27:53Z\t8.1253200\t58.1818712\t\t
1238 2003-06-15T10:27:57Z\t8.1266031\t58.1816347\t\t
1239 2003-06-15T10:28:03Z\t8.1284612\t58.1812099\t\t
1240 2003-06-15T10:28:06Z\t8.1293950\t58.1810315\t\t
1241 2003-06-15T10:28:10Z\t8.1307400\t58.1809621\t\t
1244 "Output csv from DOS-formatted Mayko format",
1248 # }}}
1249 # pgwtab
1250 testcmd("../gpst -o pgwtab multitrack.gpx", # {{{
1251 <<END,
1252 (51.477880000,-0.001470000)\t0-Meridian\t\\N\t\\N\t\\N\t11-FEB-03 15:46\t11-FEB-03 15:46\t\\N\t\\N
1253 (51.532030,-0.177330)\tAbbey Road\t34.492798\t\\N\t\\N\tDet hellige gangfeltet der Beatles valsa over.\t26-FEB-06 17:29:46\t\\N\t\\N
1254 (61.636684,8.312254)\tGaldhøpiggen med ', &, < og >. ☺\t2469.012939\tmountain\t2006-05-08T18:27:59Z\tHer er det &, < og >. ☺\tSchwæra greie\thttp://www.example.org/\tWaypoint
1255 (60.397460000,5.350610000)\tHalfdan Griegs vei\t\\N\t\\N\t\\N\t04-AUG-02 19:42\t04-AUG-02 19:42\t\\N\t\\N
1256 (51.510130000,-0.130410000)\tLeicester Square\t\\N\t\\N\t\\N\t11-FEB-03 18:00\t11-FEB-03 18:00\t\\N\t\\N
1257 (60.968540000,9.285350000)\tLeira camping\t\\N\t\\N\t\\N\t03-OKT-02 21:58\t03-OKT-02 21:58\t\\N\t\\N
1260 "Test pgwtab format",
1264 # }}}
1265 # pgwupd
1266 testcmd("../gpst -o pgwupd multitrack.gpx", # {{{
1267 <<END,
1268 BEGIN;
1269 UPDATE logg SET name = clname(coor) WHERE (point(51.477880000,-0.001470000) <-> coor) < 0.05;
1270 UPDATE logg SET dist = cldist(coor) WHERE (point(51.477880000,-0.001470000) <-> coor) < 0.05;
1271 COMMIT;
1272 BEGIN;
1273 UPDATE logg SET name = clname(coor) WHERE (point(51.532030,-0.177330) <-> coor) < 0.05;
1274 UPDATE logg SET dist = cldist(coor) WHERE (point(51.532030,-0.177330) <-> coor) < 0.05;
1275 COMMIT;
1276 BEGIN;
1277 UPDATE logg SET name = clname(coor) WHERE (point(61.636684,8.312254) <-> coor) < 0.05;
1278 UPDATE logg SET dist = cldist(coor) WHERE (point(61.636684,8.312254) <-> coor) < 0.05;
1279 COMMIT;
1280 BEGIN;
1281 UPDATE logg SET name = clname(coor) WHERE (point(60.397460000,5.350610000) <-> coor) < 0.05;
1282 UPDATE logg SET dist = cldist(coor) WHERE (point(60.397460000,5.350610000) <-> coor) < 0.05;
1283 COMMIT;
1284 BEGIN;
1285 UPDATE logg SET name = clname(coor) WHERE (point(51.510130000,-0.130410000) <-> coor) < 0.05;
1286 UPDATE logg SET dist = cldist(coor) WHERE (point(51.510130000,-0.130410000) <-> coor) < 0.05;
1287 COMMIT;
1288 BEGIN;
1289 UPDATE logg SET name = clname(coor) WHERE (point(60.968540000,9.285350000) <-> coor) < 0.05;
1290 UPDATE logg SET dist = cldist(coor) WHERE (point(60.968540000,9.285350000) <-> coor) < 0.05;
1291 COMMIT;
1294 "Test pgwupd format",
1298 # }}}
1299 # clean
1300 testcmd("../gpst -t -o clean pause.gpx", # {{{
1301 <<END,
1302 5.299534\t60.425494\t25.260
1303 5.299610\t60.425464\t24.931
1305 5.299694\t60.425314\t27.975
1307 5.299741\t60.425384\t31.017
1308 5.299958\t60.425339\t30.980
1309 5.299640\t60.425238\t30.538
1310 5.299686\t60.425246\t30.515
1312 5.299773\t60.425345\t31.936
1313 5.299419\t60.425457\t31.794
1316 "Output clean format with time breaks",
1319 # }}}
1320 # gpstrans
1321 # poscount
1322 # ps (Unfinished)
1323 # svg (Unfinished)
1324 # ygraph
1325 # --output option }}}
1326 diag("Testing --outside option..."); # {{{
1327 testcmd("../gpst --pos1 2.11,2.12 --pos2 3.31,3.32 --outside multitrack-pause.gpx", # {{{
1328 <<END,
1329 <?xml version="1.0" encoding="UTF-8"?>
1330 <gpsml>
1331 <track>
1332 <title>track1</title>
1333 <tp> <time>2006-01-01T00:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1334 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1335 <tp> <time>2006-01-01T00:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1336 <break/>
1337 <title>track2</title>
1338 <break/>
1339 <title>track3</title>
1340 <break/>
1341 <tp> <time>2006-01-03T02:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1342 <tp> <time>2006-01-03T02:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1343 <tp> <time>2006-01-03T02:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1344 <tp> <time>2006-01-03T02:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1345 <tp> <time>2006-01-03T02:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1346 </track>
1347 </gpsml>
1350 "Check --outside option (gpx to gpst)",
1354 # }}}
1355 # --outside option }}}
1356 diag("Testing --pos1 and --pos2 options..."); # {{{
1357 # --pos1 and --pos2 options }}}
1358 diag("Testing --require option..."); # {{{
1359 testcmd("../gpst -re multitrack.gpx", # {{{
1360 <<END,
1361 <?xml version="1.0" encoding="UTF-8"?>
1362 <gpsml>
1363 <track>
1364 <title>Track 1</title>
1365 <break/>
1366 <title>Track 2</title>
1367 <tp> <time>2003-02-11T23:36:43Z</time> <lat>51.4970224</lat> <lon>-0.1457489</lon> <ele>1000</ele> </tp>
1368 <break/>
1369 <title>Track 3</title>
1370 <break/>
1371 <title>Track 4</title>
1372 </track>
1373 </gpsml>
1376 "Require elevation from GPX data",
1380 # }}}
1381 testcmd("../gpst -re one_ele.dos.gpsml", # {{{
1382 <<END,
1383 <?xml version="1.0" encoding="UTF-8"?>
1384 <gpsml>
1385 <track>
1386 <title>Only one point has elevation</title>
1387 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.425314</lat> <lon>5.299694</lon> <ele>27.975</ele> </tp>
1388 </track>
1389 </gpsml>
1392 "Require elevation from gpsml",
1396 # }}}
1397 testcmd("../gpst -re missing.gpsml", # {{{
1398 <<END,
1399 <?xml version="1.0" encoding="UTF-8"?>
1400 <gpsml>
1401 <track>
1402 <title>Missing various elements</title>
1403 <tp> <time>2006-04-30T17:17:11Z</time> <lon>5.34187</lon> <ele>483</ele> </tp>
1404 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1405 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1406 <tp> <lon>5.34224</lon> <ele>484</ele> </tp>
1407 <tp> <ele>486</ele> </tp>
1408 <tp> <time>2006-04-30T17:18:03Z</time> <lat>60.42339</lat> <ele>490</ele> </tp>
1409 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1410 </track>
1411 </gpsml>
1414 "Require elevation",
1418 # }}}
1419 testcmd("../gpst -rt missing.gpsml", # {{{
1420 <<END,
1421 <?xml version="1.0" encoding="UTF-8"?>
1422 <gpsml>
1423 <track>
1424 <title>Missing various elements</title>
1425 <tp> <time>2006-04-30T17:16:59Z</time> </tp>
1426 <tp> <time>2006-04-30T17:17:00Z</time> <lat>60.42352</lat> </tp>
1427 <tp> <time>2006-04-30T17:17:09Z</time> <lat>60.42353</lat> <lon>5.34185</lon> </tp>
1428 <tp> <time>2006-04-30T17:17:11Z</time> <lon>5.34187</lon> <ele>483</ele> </tp>
1429 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1430 <tp> <time>2006-04-30T17:18:03Z</time> <lat>60.42339</lat> <ele>490</ele> </tp>
1431 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1432 </track>
1433 </gpsml>
1436 "Require time",
1440 # }}}
1441 testcmd("../gpst -rp missing.gpsml", # {{{
1442 <<END,
1443 <?xml version="1.0" encoding="UTF-8"?>
1444 <gpsml>
1445 <track>
1446 <title>Missing various elements</title>
1447 <tp> <time>2006-04-30T17:17:09Z</time> <lat>60.42353</lat> <lon>5.34185</lon> </tp>
1448 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1449 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1450 </track>
1451 </gpsml>
1454 "Require position",
1458 # }}}
1459 testcmd("../gpst -ret missing.gpsml", # {{{
1460 <<END,
1461 <?xml version="1.0" encoding="UTF-8"?>
1462 <gpsml>
1463 <track>
1464 <title>Missing various elements</title>
1465 <tp> <time>2006-04-30T17:17:11Z</time> <lon>5.34187</lon> <ele>483</ele> </tp>
1466 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1467 <tp> <time>2006-04-30T17:18:03Z</time> <lat>60.42339</lat> <ele>490</ele> </tp>
1468 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1469 </track>
1470 </gpsml>
1473 "Require elevation and time",
1477 # }}}
1478 testcmd("../gpst -retp missing.gpsml", # {{{
1479 <<END,
1480 <?xml version="1.0" encoding="UTF-8"?>
1481 <gpsml>
1482 <track>
1483 <title>Missing various elements</title>
1484 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1485 </track>
1486 </gpsml>
1489 "Require elevation, time and position",
1493 # }}}
1494 testcmd("../gpst -rep missing.gpsml", # {{{
1495 <<END,
1496 <?xml version="1.0" encoding="UTF-8"?>
1497 <gpsml>
1498 <track>
1499 <title>Missing various elements</title>
1500 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1501 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1502 </track>
1503 </gpsml>
1506 "Require elevation and position",
1510 # }}}
1511 # --require option }}}
1512 diag("Testing --round option..."); # {{{
1513 testcmd("../gpst -R lat=4,lon=5,ele=1 pause.gpx", # {{{
1514 <<END,
1515 <?xml version="1.0" encoding="UTF-8"?>
1516 <gpsml>
1517 <track>
1518 <title>ACTIVE LOG164705</title>
1519 <tp> <time>2006-05-21T16:49:11Z</time> <lat>60.4255</lat> <lon>5.29953</lon> <ele>25.3</ele> </tp>
1520 <tp> <time>2006-05-21T16:49:46Z</time> <lat>60.4255</lat> <lon>5.29961</lon> <ele>24.9</ele> </tp>
1521 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.4253</lat> <lon>5.29969</lon> <ele>28</ele> </tp>
1522 <tp> <time>2006-05-21T16:56:36Z</time> <lat>60.4254</lat> <lon>5.29974</lon> <ele>31</ele> </tp>
1523 <tp> <time>2006-05-21T16:56:47Z</time> <lat>60.4253</lat> <lon>5.29996</lon> <ele>31</ele> </tp>
1524 <tp> <time>2006-05-21T16:56:56Z</time> <lat>60.4252</lat> <lon>5.29964</lon> <ele>30.5</ele> </tp>
1525 <tp> <time>2006-05-21T16:57:03Z</time> <lat>60.4252</lat> <lon>5.29969</lon> <ele>30.5</ele> </tp>
1526 <tp> <time>2006-05-21T16:59:08Z</time> <lat>60.4253</lat> <lon>5.29977</lon> <ele>31.9</ele> </tp>
1527 <tp> <time>2006-05-21T17:00:54Z</time> <lat>60.4255</lat> <lon>5.29942</lon> <ele>31.8</ele> </tp>
1528 </track>
1529 </gpsml>
1532 "--round works with lat, lon, ele from gpx",
1536 # }}}
1537 testcmd("../gpst -R lat=3,lon=3,ele=1 -o pgtab pause.gpx", # {{{
1538 <<END,
1539 2006-05-21T16:49:11Z\t(60.425,5.3)\t25.3\t\\N\t\\N\t\\N
1540 2006-05-21T16:49:46Z\t(60.425,5.3)\t24.9\t\\N\t\\N\t\\N
1541 2006-05-21T16:52:04Z\t(60.425,5.3)\t28\t\\N\t\\N\t\\N
1542 2006-05-21T16:56:36Z\t(60.425,5.3)\t31\t\\N\t\\N\t\\N
1543 2006-05-21T16:56:47Z\t(60.425,5.3)\t31\t\\N\t\\N\t\\N
1544 2006-05-21T16:56:56Z\t(60.425,5.3)\t30.5\t\\N\t\\N\t\\N
1545 2006-05-21T16:57:03Z\t(60.425,5.3)\t30.5\t\\N\t\\N\t\\N
1546 2006-05-21T16:59:08Z\t(60.425,5.3)\t31.9\t\\N\t\\N\t\\N
1547 2006-05-21T17:00:54Z\t(60.425,5.299)\t31.8\t\\N\t\\N\t\\N
1550 "pgtab output from gpx works with --round lat, lon, ele",
1554 # }}}
1555 testcmd("../gpst -R lat=3,lon=3,ele=1 -o pgwtab multitrack.gpx", # {{{
1556 <<END,
1557 (51.478,-0.001)\t0-Meridian\t\\N\t\\N\t\\N\t11-FEB-03 15:46\t11-FEB-03 15:46\t\\N\t\\N
1558 (51.532,-0.177)\tAbbey Road\t34.5\t\\N\t\\N\tDet hellige gangfeltet der Beatles valsa over.\t26-FEB-06 17:29:46\t\\N\t\\N
1559 (61.637,8.312)\tGaldhøpiggen med ', &, < og >. ☺\t2469\tmountain\t2006-05-08T18:27:59Z\tHer er det &, < og >. ☺\tSchwæra greie\thttp://www.example.org/\tWaypoint
1560 (60.397,5.351)\tHalfdan Griegs vei\t\\N\t\\N\t\\N\t04-AUG-02 19:42\t04-AUG-02 19:42\t\\N\t\\N
1561 (51.51,-0.13)\tLeicester Square\t\\N\t\\N\t\\N\t11-FEB-03 18:00\t11-FEB-03 18:00\t\\N\t\\N
1562 (60.969,9.285)\tLeira camping\t\\N\t\\N\t\\N\t03-OKT-02 21:58\t03-OKT-02 21:58\t\\N\t\\N
1565 "--round works with lat, lon, ele from gpx, pgwtab output",
1569 # }}}
1570 testcmd("../gpst -R lat=3,lon=3,ele=1 -o pgwupd multitrack.gpx", # {{{
1571 <<END,
1572 BEGIN;
1573 UPDATE logg SET name = clname(coor) WHERE (point(51.478,-0.001) <-> coor) < 0.05;
1574 UPDATE logg SET dist = cldist(coor) WHERE (point(51.478,-0.001) <-> coor) < 0.05;
1575 COMMIT;
1576 BEGIN;
1577 UPDATE logg SET name = clname(coor) WHERE (point(51.532,-0.177) <-> coor) < 0.05;
1578 UPDATE logg SET dist = cldist(coor) WHERE (point(51.532,-0.177) <-> coor) < 0.05;
1579 COMMIT;
1580 BEGIN;
1581 UPDATE logg SET name = clname(coor) WHERE (point(61.637,8.312) <-> coor) < 0.05;
1582 UPDATE logg SET dist = cldist(coor) WHERE (point(61.637,8.312) <-> coor) < 0.05;
1583 COMMIT;
1584 BEGIN;
1585 UPDATE logg SET name = clname(coor) WHERE (point(60.397,5.351) <-> coor) < 0.05;
1586 UPDATE logg SET dist = cldist(coor) WHERE (point(60.397,5.351) <-> coor) < 0.05;
1587 COMMIT;
1588 BEGIN;
1589 UPDATE logg SET name = clname(coor) WHERE (point(51.51,-0.13) <-> coor) < 0.05;
1590 UPDATE logg SET dist = cldist(coor) WHERE (point(51.51,-0.13) <-> coor) < 0.05;
1591 COMMIT;
1592 BEGIN;
1593 UPDATE logg SET name = clname(coor) WHERE (point(60.969,9.285) <-> coor) < 0.05;
1594 UPDATE logg SET dist = cldist(coor) WHERE (point(60.969,9.285) <-> coor) < 0.05;
1595 COMMIT;
1598 "pgwupd output and --round works with lat, lon, ele from gpx",
1602 # }}}
1603 testcmd("../gpst -R lat=8,lon=8 -o gpx rounding.mayko", # {{{
1604 <<END,
1605 $gpx_header
1606 <trk>
1607 <trkseg>
1608 <trkpt lat="51.4838161" lon="0.0000533"> <time>2003-02-11T12:17:05Z</time> </trkpt>
1609 <trkpt lat="51.483777" lon="-0.0000211"> <time>2003-02-11T12:17:15Z</time> </trkpt>
1610 <trkpt lat="51.4837543" lon="-0.0000894"> <time>2003-02-11T12:17:21Z</time> </trkpt>
1611 <trkpt lat="51.4836222" lon="0.0000272"> <time>2003-02-11T12:27:41Z</time> </trkpt>
1612 </trkseg>
1613 </trk>
1614 </gpx>
1617 "Suppress braindead scientific notation when using --round (from mayko)",
1621 # }}}
1622 testcmd("../gpst -R lat=8,lon=8 -o gpx rounding.gpx", # {{{
1623 <<END,
1624 $gpx_header
1625 <trk>
1626 <trkseg>
1627 <trkpt lat="51.4838161" lon="0.0000533"> <time>2003-02-11T12:17:05Z</time> </trkpt>
1628 <trkpt lat="51.483777" lon="-0.0000211"> <time>2003-02-11T12:17:15Z</time> </trkpt>
1629 <trkpt lat="51.4837543" lon="-0.0000894"> <time>2003-02-11T12:17:21Z</time> </trkpt>
1630 <trkpt lat="51.4836222" lon="0.0000272"> <time>2003-02-11T12:27:41Z</time> </trkpt>
1631 </trkseg>
1632 </trk>
1633 </gpx>
1636 "Suppress braindead scientific notation when using --round (from gpx)",
1640 # }}}
1641 # --round option }}}
1642 diag("Testing --short-date option..."); # {{{
1643 # --short-date option }}}
1644 diag("Testing --save-to-file option..."); # {{{
1645 # --save-to-file option }}}
1646 diag("Testing --create-breaks option..."); # {{{
1647 testcmd("../gpst -t pause.gpx", # {{{
1648 <<END,
1649 <?xml version="1.0" encoding="UTF-8"?>
1650 <gpsml>
1651 <track>
1652 <title>ACTIVE LOG164705</title>
1653 <tp> <time>2006-05-21T16:49:11Z</time> <lat>60.425494</lat> <lon>5.299534</lon> <ele>25.26</ele> </tp>
1654 <tp> <time>2006-05-21T16:49:46Z</time> <lat>60.425464</lat> <lon>5.29961</lon> <ele>24.931</ele> </tp>
1655 <pause>0:00:02:18</pause>
1656 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.425314</lat> <lon>5.299694</lon> <ele>27.975</ele> </tp>
1657 <pause>0:00:04:32</pause>
1658 <tp> <time>2006-05-21T16:56:36Z</time> <lat>60.425384</lat> <lon>5.299741</lon> <ele>31.017</ele> </tp>
1659 <tp> <time>2006-05-21T16:56:47Z</time> <lat>60.425339</lat> <lon>5.299958</lon> <ele>30.98</ele> </tp>
1660 <tp> <time>2006-05-21T16:56:56Z</time> <lat>60.425238</lat> <lon>5.29964</lon> <ele>30.538</ele> </tp>
1661 <tp> <time>2006-05-21T16:57:03Z</time> <lat>60.425246</lat> <lon>5.299686</lon> <ele>30.515</ele> </tp>
1662 <pause>0:00:02:05</pause>
1663 <tp> <time>2006-05-21T16:59:08Z</time> <lat>60.425345</lat> <lon>5.299773</lon> <ele>31.936</ele> </tp>
1664 <tp> <time>2006-05-21T17:00:54Z</time> <lat>60.425457</lat> <lon>5.299419</lon> <ele>31.794</ele> </tp>
1665 </track>
1666 </gpsml>
1669 "Output gpsml with <pause> elements from GPX files",
1673 # }}}
1674 testcmd("../gpst -t multitrack-pause.gpx", # {{{
1675 <<END,
1676 <?xml version="1.0" encoding="UTF-8"?>
1677 <gpsml>
1678 <track>
1679 <title>track1</title>
1680 <tp> <time>2006-01-01T00:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1681 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1682 <tp> <time>2006-01-01T00:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1683 <break/>
1684 <title>track2</title>
1685 <pause>0:23:59:58</pause>
1686 <tp> <time>2006-01-02T00:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
1687 <tp> <time>2006-01-02T00:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
1688 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
1689 <pause>0:01:00:00</pause>
1690 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
1691 <break/>
1692 <tp> <time>2006-01-02T01:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
1693 <break/>
1694 <title>track3</title>
1695 <pause>1:01:00:03</pause>
1696 <tp> <time>2006-01-03T02:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
1697 <tp> <time>2006-01-03T02:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
1698 <tp> <time>2006-01-03T02:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
1699 <break/>
1700 <tp> <time>2006-01-03T02:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1701 <tp> <time>2006-01-03T02:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1702 <tp> <time>2006-01-03T02:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1703 <tp> <time>2006-01-03T02:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1704 <tp> <time>2006-01-03T02:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1705 </track>
1706 </gpsml>
1709 "Insert <pause> between gpx tracks",
1713 # }}}
1714 testcmd("../gpst -t multitrack-pause.gpsml", # {{{
1715 <<END,
1716 <?xml version="1.0" encoding="UTF-8"?>
1717 <gpsml>
1718 <track>
1719 <title>track1</title>
1720 <tp> <time>2006-01-01T00:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1721 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1722 <tp> <time>2006-01-01T00:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1723 <break/>
1724 <title>track2</title>
1725 <pause>0:23:59:58</pause>
1726 <tp> <time>2006-01-02T00:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
1727 <tp> <time>2006-01-02T00:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
1728 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
1729 <pause>0:01:00:00</pause>
1730 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
1731 <break/>
1732 <tp> <time>2006-01-02T01:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
1733 <break/>
1734 <title>track3</title>
1735 <pause>1:01:00:03</pause>
1736 <tp> <time>2006-01-03T02:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
1737 <tp> <time>2006-01-03T02:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
1738 <tp> <time>2006-01-03T02:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
1739 <break/>
1740 <tp> <time>2006-01-03T02:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1741 <tp> <time>2006-01-03T02:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1742 <tp> <time>2006-01-03T02:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1743 <tp> <time>2006-01-03T02:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1744 <tp> <time>2006-01-03T02:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1745 </track>
1746 </gpsml>
1749 "Insert <pause> between gpsml titles",
1753 # }}}
1754 # --create-breaks option }}}
1755 diag("Testing -T (--time-shift) option..."); # {{{
1756 testcmd("$CMD -T 3600 multitrack-pause.gpx", # {{{
1757 <<END,
1758 <?xml version="1.0" encoding="UTF-8"?>
1759 <gpsml>
1760 <track>
1761 <title>track1</title>
1762 <tp> <time>2006-01-01T01:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1763 <tp> <time>2006-01-01T01:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1764 <tp> <time>2006-01-01T01:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1765 <break/>
1766 <title>track2</title>
1767 <tp> <time>2006-01-02T01:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
1768 <tp> <time>2006-01-02T01:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
1769 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
1770 <tp> <time>2006-01-02T02:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
1771 <break/>
1772 <tp> <time>2006-01-02T02:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
1773 <break/>
1774 <title>track3</title>
1775 <tp> <time>2006-01-03T03:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
1776 <tp> <time>2006-01-03T03:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
1777 <tp> <time>2006-01-03T03:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
1778 <break/>
1779 <tp> <time>2006-01-03T03:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1780 <tp> <time>2006-01-03T03:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1781 <tp> <time>2006-01-03T03:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1782 <tp> <time>2006-01-03T03:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1783 <tp> <time>2006-01-03T03:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1784 </track>
1785 </gpsml>
1788 "Add one hour to GPX input, output gpsml",
1792 # }}}
1793 testcmd("$CMD -T -3600 multitrack-pause.gpx", # {{{
1794 <<END,
1795 <?xml version="1.0" encoding="UTF-8"?>
1796 <gpsml>
1797 <track>
1798 <title>track1</title>
1799 <tp> <time>2005-12-31T23:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1800 <tp> <time>2005-12-31T23:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1801 <tp> <time>2005-12-31T23:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1802 <break/>
1803 <title>track2</title>
1804 <tp> <time>2006-01-01T23:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
1805 <tp> <time>2006-01-01T23:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
1806 <tp> <time>2006-01-01T23:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
1807 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
1808 <break/>
1809 <tp> <time>2006-01-02T00:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
1810 <break/>
1811 <title>track3</title>
1812 <tp> <time>2006-01-03T01:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
1813 <tp> <time>2006-01-03T01:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
1814 <tp> <time>2006-01-03T01:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
1815 <break/>
1816 <tp> <time>2006-01-03T01:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1817 <tp> <time>2006-01-03T01:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1818 <tp> <time>2006-01-03T01:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1819 <tp> <time>2006-01-03T01:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1820 <tp> <time>2006-01-03T01:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1821 </track>
1822 </gpsml>
1825 "Subtract one hour from GPX input, output gpsml",
1829 # }}}
1830 testcmd("$CMD -T 1 -o gpx multitrack-pause.gpx", # {{{
1831 <<END,
1832 $gpx_header
1833 <trk>
1834 <trkseg>
1835 <trkpt lat="1.11" lon="1.12"> <time>2006-01-01T00:00:01Z</time> </trkpt>
1836 <trkpt lat="1.21" lon="1.22"> <time>2006-01-01T00:00:02Z</time> </trkpt>
1837 <trkpt lat="1.31" lon="1.32"> <time>2006-01-01T00:00:03Z</time> </trkpt>
1838 </trkseg>
1839 <trkseg>
1840 <trkpt lat="2.11" lon="2.12"> <time>2006-01-02T00:00:01Z</time> </trkpt>
1841 <trkpt lat="2.21" lon="2.22"> <time>2006-01-02T00:00:05Z</time> </trkpt>
1842 <trkpt lat="2.31" lon="2.32"> <time>2006-01-02T00:00:17Z</time> </trkpt>
1843 <trkpt lat="2.41" lon="2.42"> <time>2006-01-02T01:00:17Z</time> </trkpt>
1844 <trkpt lat="2.451" lon="2.452"> <time>2006-01-02T01:00:18Z</time> </trkpt>
1845 </trkseg>
1846 <trkseg>
1847 </trkseg>
1848 <trkseg>
1849 <trkpt lat="3.11" lon="3.12"> <time>2006-01-03T02:00:21Z</time> </trkpt>
1850 <trkpt lat="3.21" lon="3.22"> <time>2006-01-03T02:00:22Z</time> </trkpt>
1851 <trkpt lat="3.31" lon="3.32"> <time>2006-01-03T02:00:23Z</time> </trkpt>
1852 <trkpt lat="3.41" lon="3.42"> <time>2006-01-03T02:00:24Z</time> </trkpt>
1853 </trkseg>
1854 <trkseg>
1855 <trkpt lat="3.51" lon="3.52"> <time>2006-01-03T02:00:25Z</time> </trkpt>
1856 <trkpt lat="3.61" lon="3.62"> <time>2006-01-03T02:00:26Z</time> </trkpt>
1857 <trkpt lat="3.71" lon="3.72"> <time>2006-01-03T02:00:27Z</time> </trkpt>
1858 <trkpt lat="3.81" lon="3.82"> <time>2006-01-03T02:00:28Z</time> </trkpt>
1859 </trkseg>
1860 </trk>
1861 </gpx>
1864 "Add one second to GPX input, output GPX",
1868 # }}}
1869 testcmd("$CMD --time-shift -1 -o gpx multitrack-pause.gpsml", # {{{
1870 <<END,
1871 $gpx_header
1872 <trk>
1873 <trkseg>
1874 <trkpt lat="1.11" lon="1.12"> <time>2005-12-31T23:59:59Z</time> </trkpt>
1875 <trkpt lat="1.21" lon="1.22"> <time>2006-01-01T00:00:00Z</time> </trkpt>
1876 <trkpt lat="1.31" lon="1.32"> <time>2006-01-01T00:00:01Z</time> </trkpt>
1877 </trkseg>
1878 <trkseg>
1879 <trkpt lat="2.11" lon="2.12"> <time>2006-01-01T23:59:59Z</time> </trkpt>
1880 <trkpt lat="2.21" lon="2.22"> <time>2006-01-02T00:00:03Z</time> </trkpt>
1881 <trkpt lat="2.31" lon="2.32"> <time>2006-01-02T00:00:15Z</time> </trkpt>
1882 <trkpt lat="2.41" lon="2.42"> <time>2006-01-02T01:00:15Z</time> </trkpt>
1883 <trkpt lat="2.451" lon="2.452"> <time>2006-01-02T01:00:16Z</time> </trkpt>
1884 </trkseg>
1885 <trkseg>
1886 </trkseg>
1887 <trkseg>
1888 <trkpt lat="3.11" lon="3.12"> <time>2006-01-03T02:00:19Z</time> </trkpt>
1889 <trkpt lat="3.21" lon="3.22"> <time>2006-01-03T02:00:20Z</time> </trkpt>
1890 <trkpt lat="3.31" lon="3.32"> <time>2006-01-03T02:00:21Z</time> </trkpt>
1891 <trkpt lat="3.41" lon="3.42"> <time>2006-01-03T02:00:22Z</time> </trkpt>
1892 </trkseg>
1893 <trkseg>
1894 <trkpt lat="3.51" lon="3.52"> <time>2006-01-03T02:00:23Z</time> </trkpt>
1895 <trkpt lat="3.61" lon="3.62"> <time>2006-01-03T02:00:24Z</time> </trkpt>
1896 <trkpt lat="3.71" lon="3.72"> <time>2006-01-03T02:00:25Z</time> </trkpt>
1897 <trkpt lat="3.81" lon="3.82"> <time>2006-01-03T02:00:26Z</time> </trkpt>
1898 </trkseg>
1899 </trk>
1900 </gpx>
1903 "Subtract one second from gpsml input, output GPX, use long option",
1907 # }}}
1908 testcmd("$CMD -T 0 -o pgtab multitrack-pause.gpx", # {{{
1909 <<END,
1910 2006-01-01T00:00:00Z\t(1.11,1.12)\t\\N\t\\N\t\\N\t\\N
1911 2006-01-01T00:00:01Z\t(1.21,1.22)\t\\N\t\\N\t\\N\t\\N
1912 2006-01-01T00:00:02Z\t(1.31,1.32)\t\\N\t\\N\t\\N\t\\N
1913 2006-01-02T00:00:00Z\t(2.11,2.12)\t\\N\t\\N\t\\N\t\\N
1914 2006-01-02T00:00:04Z\t(2.21,2.22)\t\\N\t\\N\t\\N\t\\N
1915 2006-01-02T00:00:16Z\t(2.31,2.32)\t\\N\t\\N\t\\N\t\\N
1916 2006-01-02T01:00:16Z\t(2.41,2.42)\t\\N\t\\N\t\\N\t\\N
1917 2006-01-02T01:00:17Z\t(2.451,2.452)\t\\N\t\\N\t\\N\t\\N
1918 2006-01-03T02:00:20Z\t(3.11,3.12)\t\\N\t\\N\t\\N\t\\N
1919 2006-01-03T02:00:21Z\t(3.21,3.22)\t\\N\t\\N\t\\N\t\\N
1920 2006-01-03T02:00:22Z\t(3.31,3.32)\t\\N\t\\N\t\\N\t\\N
1921 2006-01-03T02:00:23Z\t(3.41,3.42)\t\\N\t\\N\t\\N\t\\N
1922 2006-01-03T02:00:24Z\t(3.51,3.52)\t\\N\t\\N\t\\N\t\\N
1923 2006-01-03T02:00:25Z\t(3.61,3.62)\t\\N\t\\N\t\\N\t\\N
1924 2006-01-03T02:00:26Z\t(3.71,3.72)\t\\N\t\\N\t\\N\t\\N
1925 2006-01-03T02:00:27Z\t(3.81,3.82)\t\\N\t\\N\t\\N\t\\N
1928 "Read GPX, time-shift 0 seconds, output pgtab",
1932 # }}}
1933 # --time-shift option }}}
1934 diag("Testing -v (--verbose) option..."); # {{{
1935 likecmd("$CMD -hv", # {{{
1936 '/^\n\S+ v\d\.\d\d\n/s',
1937 '/^$/',
1938 "Option --version with -h returns version number and help screen",
1941 # }}}
1942 diag("Testing --version option..."); # {{{
1943 likecmd("$CMD --version", # {{{
1944 '/^\S+ v\d\.\d\d\n/',
1945 '/^$/',
1946 "Option --version returns version number",
1949 # }}}
1950 # --version option }}}
1951 # ---version option }}}
1952 diag("Testing --strip-whitespace option..."); # {{{
1953 testcmd("../gpst -w -o gpx pause-noname.gpx", # {{{
1954 <<END,
1955 $stripped_gpx_header
1956 <trk>
1957 <trkseg>
1958 <trkpt lat="60.425494" lon="5.299534"><ele>25.260</ele><time>2006-05-21T16:49:11Z</time></trkpt>
1959 <trkpt lat="60.425464" lon="5.299610"><ele>24.931</ele><time>2006-05-21T16:49:46Z</time></trkpt>
1960 <trkpt lat="60.425314" lon="5.299694"><ele>27.975</ele><time>2006-05-21T16:52:04Z</time></trkpt>
1961 <trkpt lat="60.425384" lon="5.299741"><ele>31.017</ele><time>2006-05-21T16:56:36Z</time></trkpt>
1962 <trkpt lat="60.425339" lon="5.299958"><ele>30.980</ele><time>2006-05-21T16:56:47Z</time></trkpt>
1963 <trkpt lat="60.425238" lon="5.299640"><ele>30.538</ele><time>2006-05-21T16:56:56Z</time></trkpt>
1964 <trkpt lat="60.425246" lon="5.299686"><ele>30.515</ele><time>2006-05-21T16:57:03Z</time></trkpt>
1965 <trkpt lat="60.425345" lon="5.299773"><ele>31.936</ele><time>2006-05-21T16:59:08Z</time></trkpt>
1966 <trkpt lat="60.425457" lon="5.299419"><ele>31.794</ele><time>2006-05-21T17:00:54Z</time></trkpt>
1967 </trkseg>
1968 </trk>
1969 </gpx>
1972 "Strip whitespace from GPX output",
1976 # }}}
1977 testcmd("../gpst -o gpx -w comments.mayko", # {{{
1978 <<END,
1979 $stripped_gpx_header
1980 <trk>
1981 <trkseg>
1982 <trkpt lat="70.6800486" lon="23.6746151"><time>2002-12-22T21:42:24Z</time></trkpt>
1983 <trkpt lat="70.6799322" lon="23.6740038"><time>2002-12-22T21:42:32Z</time></trkpt>
1984 <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:42:54Z</time></trkpt>
1985 <!-- <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:43:51Z</time><extensions><error>desc</error></extensions></trkpt> -->
1986 <!-- <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:43:52Z</time><extensions><error>desc</error></extensions></trkpt> -->
1987 <!-- <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:43:54Z</time><extensions><error>desc</error></extensions></trkpt> -->
1988 <trkpt lat="70.6800774" lon="23.6757566"><time>2002-12-22T21:44:45Z</time></trkpt>
1989 </trkseg>
1990 <trkseg>
1991 <trkpt lat="70.6801502" lon="23.6753442"><time>2002-12-22T21:44:52Z</time></trkpt>
1992 <trkpt lat="70.6801905" lon="23.6757542"><time>2002-12-22T21:45:04Z</time></trkpt>
1993 </trkseg>
1994 </trk>
1995 </gpx>
1998 "Output whitespace-stripped GPX from Mayko file with commented-out lines",
2002 # }}}
2003 testcmd("../gpst -w -o pgwupd multitrack.gpx", # {{{
2004 <<END,
2005 BEGIN;
2006 UPDATE logg SET name = clname(coor) WHERE (point(51.477880000,-0.001470000) <-> coor) < 0.05;
2007 UPDATE logg SET dist = cldist(coor) WHERE (point(51.477880000,-0.001470000) <-> coor) < 0.05;
2008 COMMIT;
2009 BEGIN;
2010 UPDATE logg SET name = clname(coor) WHERE (point(51.532030,-0.177330) <-> coor) < 0.05;
2011 UPDATE logg SET dist = cldist(coor) WHERE (point(51.532030,-0.177330) <-> coor) < 0.05;
2012 COMMIT;
2013 BEGIN;
2014 UPDATE logg SET name = clname(coor) WHERE (point(61.636684,8.312254) <-> coor) < 0.05;
2015 UPDATE logg SET dist = cldist(coor) WHERE (point(61.636684,8.312254) <-> coor) < 0.05;
2016 COMMIT;
2017 BEGIN;
2018 UPDATE logg SET name = clname(coor) WHERE (point(60.397460000,5.350610000) <-> coor) < 0.05;
2019 UPDATE logg SET dist = cldist(coor) WHERE (point(60.397460000,5.350610000) <-> coor) < 0.05;
2020 COMMIT;
2021 BEGIN;
2022 UPDATE logg SET name = clname(coor) WHERE (point(51.510130000,-0.130410000) <-> coor) < 0.05;
2023 UPDATE logg SET dist = cldist(coor) WHERE (point(51.510130000,-0.130410000) <-> coor) < 0.05;
2024 COMMIT;
2025 BEGIN;
2026 UPDATE logg SET name = clname(coor) WHERE (point(60.968540000,9.285350000) <-> coor) < 0.05;
2027 UPDATE logg SET dist = cldist(coor) WHERE (point(60.968540000,9.285350000) <-> coor) < 0.05;
2028 COMMIT;
2031 "Strip whitespace from pgwupd output",
2035 # }}}
2036 # --strip-whitespace option }}}
2037 diag("Testing --double-y-scale option..."); # {{{
2038 testcmd("../gpst -y -o clean pause.gpx", # {{{
2039 <<END,
2040 5.299534\t120.850988\t25.260
2041 5.299610\t120.850928\t24.931
2042 5.299694\t120.850628\t27.975
2043 5.299741\t120.850768\t31.017
2044 5.299958\t120.850678\t30.980
2045 5.299640\t120.850476\t30.538
2046 5.299686\t120.850492\t30.515
2047 5.299773\t120.85069\t31.936
2048 5.299419\t120.850914\t31.794
2051 "Double y scale, clean output from gpx format",
2055 # }}}
2056 testcmd("../gpst -y -o clean log.dos.mayko", # {{{
2057 <<END,
2058 8.1225077\t116.3636316\t
2059 8.1253200\t116.3637424\t
2060 8.1266031\t116.3632694\t
2061 8.1284612\t116.3624198\t
2062 8.1293950\t116.362063\t
2063 8.1307400\t116.3619242\t
2066 "Double y scale, clean output from mayko format",
2070 # }}}
2071 # --double-y-scale option }}}
2072 diag("Testing --debug option..."); # {{{
2073 # --debug option }}}
2074 diag("Strip error from Mayko format..."); # {{{
2076 testcmd("../gpst -o csv date_error.mayko", # {{{
2077 <<END,
2078 2003-06-13T09:12:36Z\t5.5794667\t60.4280897\t\t
2079 2003-06-13T09:12:38Z\t5.5802255\t60.4281867\t\t
2080 2003-06-13T09:12:41Z\t5.5813636\t60.4283320\t\t
2081 2003-06-13T09:12:42Z\t5.5817430\t60.4283806\t\t
2084 "Strip error from mayko format in csv output",
2088 # }}}
2089 testcmd("../gpst -o clean date_error.mayko", # {{{
2090 <<END,
2091 5.5794667\t60.4280897\t
2092 5.5802255\t60.4281867\t
2093 5.5813636\t60.4283320\t
2094 5.5817430\t60.4283806\t
2097 "Strip error from mayko format in clean output",
2101 # }}}
2102 testcmd("../gpst -o gpsml date_error.mayko", # {{{
2103 <<END,
2104 <?xml version="1.0" encoding="UTF-8"?>
2105 <gpsml>
2106 <track>
2107 <tp> <time>2003-06-13T09:12:36Z</time> <lat>60.4280897</lat> <lon>5.5794667</lon> </tp>
2108 <tp> <time>2003-06-13T09:12:38Z</time> <lat>60.4281867</lat> <lon>5.5802255</lon> </tp>
2109 <etp err="error"> <time>2037-06-25T17:19:22Z</time> <lat>103.4034054</lat> <lon>129.7271053</lon> </etp>
2110 <tp> <time>2003-06-13T09:12:41Z</time> <lat>60.428332</lat> <lon>5.5813636</lon> </tp>
2111 <tp> <time>2003-06-13T09:12:42Z</time> <lat>60.4283806</lat> <lon>5.581743</lon> </tp>
2112 </track>
2113 </gpsml>
2116 "Strip error from mayko format in gpsml output",
2120 # }}}
2121 testcmd("../gpst -o gpx date_error.mayko", # {{{
2122 <<END,
2123 $gpx_header
2124 <trk>
2125 <trkseg>
2126 <trkpt lat="60.4280897" lon="5.5794667"> <time>2003-06-13T09:12:36Z</time> </trkpt>
2127 <trkpt lat="60.4281867" lon="5.5802255"> <time>2003-06-13T09:12:38Z</time> </trkpt>
2128 <!-- <trkpt lat="103.4034054" lon="129.7271053"> <time>2037-06-25T17:19:22Z</time> <extensions> <error>error</error> </extensions> </trkpt> -->
2129 <trkpt lat="60.4283320" lon="5.5813636"> <time>2003-06-13T09:12:41Z</time> </trkpt>
2130 <trkpt lat="60.4283806" lon="5.5817430"> <time>2003-06-13T09:12:42Z</time> </trkpt>
2131 </trkseg>
2132 </trk>
2133 </gpx>
2136 "Strip error from mayko format in gpx output",
2140 # }}}
2141 testcmd("../gpst -o gpstrans date_error.mayko", # {{{
2142 <<END,
2143 Format: DMS UTC Offset: 0.00 hrs Datum[100]: WGS 84
2144 T\t06/13/2003 09:12:36\t60\xB025'41.1"\t5\xB034'46.1"
2145 T\t06/13/2003 09:12:38\t60\xB025'41.5"\t5\xB034'48.8"
2146 T\t06/13/2003 09:12:41\t60\xB025'42.0"\t5\xB034'52.9"
2147 T\t06/13/2003 09:12:42\t60\xB025'42.2"\t5\xB034'54.3"
2150 "Strip error from mayko format in gpstrans output",
2154 # }}}
2155 testcmd("../gpst -o pgtab date_error.mayko", # {{{
2156 <<END,
2157 2003-06-13T09:12:36Z\t(60.4280897,5.5794667)\t\\N\t\\N\t\\N\t\\N
2158 2003-06-13T09:12:38Z\t(60.4281867,5.5802255)\t\\N\t\\N\t\\N\t\\N
2159 2003-06-13T09:12:41Z\t(60.4283320,5.5813636)\t\\N\t\\N\t\\N\t\\N
2160 2003-06-13T09:12:42Z\t(60.4283806,5.5817430)\t\\N\t\\N\t\\N\t\\N
2163 "Strip error from mayko format in pgtab output",
2167 # }}}
2168 testcmd("../gpst -o poscount date_error.mayko", # {{{
2169 <<END,
2170 5.5802255\t60.4281867\t1
2171 5.5817430\t60.4283806\t1
2172 5.5813636\t60.4283320\t1
2173 5.5794667\t60.4280897\t1
2176 "Strip error from mayko format in poscount output",
2180 # }}}
2181 testcmd("../gpst -o xgraph date_error.mayko", # {{{
2182 <<END,
2183 5.5794667 60.4280897
2184 5.5802255 60.4281867
2185 5.5813636 60.4283320
2186 5.5817430 60.4283806
2189 "Strip error from mayko format in xgraph output",
2193 # }}}
2194 testcmd("../gpst -o ygraph date_error.mayko", # {{{
2195 <<END,
2196 "Time = 0.0
2197 5.5794667 60.4280897
2199 "Time = 2.0
2200 5.5802255 60.4281867
2202 "Time = 5.0
2203 5.5813636 60.4283320
2205 "Time = 6.0
2206 5.5817430 60.4283806
2210 "Strip error from mayko format in ygraph output",
2214 # }}}
2216 # Strip error from Mayko format }}}
2218 todo_section:
2221 if ($Opt{'all'} || $Opt{'todo'}) {
2222 diag("Running TODO tests..."); # {{{
2224 TODO: {
2225 local $TODO = "Fix read/write of GPX name element";
2226 testcmd("../gpst -o gpx pause.gpx", # {{{
2227 <<END,
2228 $gpx_header
2229 <trk>
2230 <name>ACTIVE LOG164705</name>
2231 <trkseg>
2232 <trkpt lat="60.425494" lon="5.299534"> <ele>25.260</ele> <time>2006-05-21T16:49:11Z</time> </trkpt>
2233 <trkpt lat="60.425464" lon="5.299610"> <ele>24.931</ele> <time>2006-05-21T16:49:46Z</time> </trkpt>
2234 <trkpt lat="60.425314" lon="5.299694"> <ele>27.975</ele> <time>2006-05-21T16:52:04Z</time> </trkpt>
2235 <trkpt lat="60.425384" lon="5.299741"> <ele>31.017</ele> <time>2006-05-21T16:56:36Z</time> </trkpt>
2236 <trkpt lat="60.425339" lon="5.299958"> <ele>30.980</ele> <time>2006-05-21T16:56:47Z</time> </trkpt>
2237 <trkpt lat="60.425238" lon="5.299640"> <ele>30.538</ele> <time>2006-05-21T16:56:56Z</time> </trkpt>
2238 <trkpt lat="60.425246" lon="5.299686"> <ele>30.515</ele> <time>2006-05-21T16:57:03Z</time> </trkpt>
2239 <trkpt lat="60.425345" lon="5.299773"> <ele>31.936</ele> <time>2006-05-21T16:59:08Z</time> </trkpt>
2240 <trkpt lat="60.425457" lon="5.299419"> <ele>31.794</ele> <time>2006-05-21T17:00:54Z</time> </trkpt>
2241 </trkseg>
2242 </trk>
2243 </gpx>
2246 "Read and write name element from/to GPX",
2250 # }}}
2251 local $TODO = "Remove extra \\n in the beginning";
2252 testcmd("../gpst -o csv multitrack.gpx", # {{{
2253 <<END,
2254 2003-02-11T23:35:39Z\t-0.1448824\t51.4968266\t\t
2255 2003-02-11T23:35:49Z\t-0.1449938\t51.4968227\t\t
2256 2003-02-11T23:36:14Z\t-0.1453202\t51.4969040\t\t
2257 \t\t\t\t
2258 2003-02-11T23:36:16Z\t-0.1453398\t51.4969214\t\t
2259 2003-02-11T23:36:31Z\t-0.1455514\t51.4969816\t\t
2260 2003-02-11T23:36:43Z\t-0.1457489\t51.4970224\t1000\t
2261 2003-02-11T23:36:50Z\t-0.1457804\t51.4970452\t\t
2262 \t\t\t\t
2263 2003-02-11T23:37:05Z\t-0.1458608\t51.4970680\t\t
2264 2003-02-11T23:37:22Z\t-0.1460047\t51.4971658\t\t
2265 2003-02-11T23:37:36Z\t-0.1461614\t51.4972469\t\t
2266 \t\t\t\t
2267 2003-02-11T23:37:43Z\t-0.1462394\t51.4972731\t\t
2268 2003-02-11T23:38:04Z\t-0.1463232\t51.4973437\t\t
2269 2003-02-11T23:38:28Z\t-0.1462949\t51.4973337\t\t
2270 2003-02-11T23:38:34Z\t-0.1462825\t51.4973218\t\t
2271 2003-02-11T23:38:35Z\t-0.1462732\t51.4973145\t\t
2274 "Output csv format from multitrack.gpx",
2278 # }}}
2279 testcmd("../gpst -o csv pause.gpx", # {{{
2280 <<END,
2281 2006-05-21T16:49:11Z\t5.299534\t60.425494\t25.260\t
2282 2006-05-21T16:49:46Z\t5.299610\t60.425464\t24.931\t
2283 2006-05-21T16:52:04Z\t5.299694\t60.425314\t27.975\t
2284 2006-05-21T16:56:36Z\t5.299741\t60.425384\t31.017\t
2285 2006-05-21T16:56:47Z\t5.299958\t60.425339\t30.980\t
2286 2006-05-21T16:56:56Z\t5.299640\t60.425238\t30.538\t
2287 2006-05-21T16:57:03Z\t5.299686\t60.425246\t30.515\t
2288 2006-05-21T16:59:08Z\t5.299773\t60.425345\t31.936\t
2289 2006-05-21T17:00:54Z\t5.299419\t60.425457\t31.794\t
2292 "Output csv format from pause.gpx",
2296 # }}}
2297 testcmd("../gpst -e -o csv pause.gpx", # {{{
2298 <<END,
2299 1148230151\t5.299534\t60.425494\t25.260\t
2300 1148230186\t5.299610\t60.425464\t24.931\t
2301 1148230324\t5.299694\t60.425314\t27.975\t
2302 1148230596\t5.299741\t60.425384\t31.017\t
2303 1148230607\t5.299958\t60.425339\t30.980\t
2304 1148230616\t5.299640\t60.425238\t30.538\t
2305 1148230623\t5.299686\t60.425246\t30.515\t
2306 1148230748\t5.299773\t60.425345\t31.936\t
2307 1148230854\t5.299419\t60.425457\t31.794\t
2310 "csv format with epoch seconds from gpx",
2314 # }}}
2315 $TODO = "Tweak output";
2316 testcmd("../gpst -o gpx multitrack-pause.gpsml", # {{{
2317 file_data("multitrack-pause.gpx"),
2319 "Should be equal to multitrack-pause.gpx",
2323 # }}}
2325 # TODO tests }}}
2328 diag("Testing finished.");
2330 sub testcmd {
2331 # {{{
2332 my ($Cmd, $Exp_stdout, $Exp_stderr, $Desc, $is_gpx) = @_;
2333 my $stderr_cmd = "";
2334 my $deb_str = $Opt{'debug'} ? " --debug" : "";
2335 my $Txt = join("",
2336 "\"$Cmd\"",
2337 defined($Desc)
2338 ? " - $Desc"
2339 : ""
2341 my $TMP_STDERR = "gpst-stderr.tmp";
2342 my $TMP_STDOUT = "gpst-stdout.tmp";
2343 defined($is_gpx) || die("$progname: testcmd(): $Desc: \$is_gpx not defined\n");
2345 if (defined($Exp_stderr) && !length($deb_str)) {
2346 $stderr_cmd = " 2>$TMP_STDERR";
2348 system("$Cmd$deb_str$stderr_cmd >$TMP_STDOUT");
2349 is(file_data($TMP_STDOUT), $Exp_stdout, $Txt);
2350 if ($is_gpx) {
2351 validate_gpx($TMP_STDOUT, $Desc);
2353 if (defined($Exp_stderr)) {
2354 if (!length($deb_str)) {
2355 is(file_data($TMP_STDERR), $Exp_stderr, "$Txt (stderr)");
2356 unlink($TMP_STDERR);
2358 } else {
2359 diag("Warning: stderr not defined for '$Txt'");
2361 unlink($TMP_STDOUT);
2362 # }}}
2363 } # testcmd()
2365 sub likecmd {
2366 # {{{
2367 my ($Cmd, $Exp_stdout, $Exp_stderr, $Desc) = @_;
2368 my $stderr_cmd = "";
2369 my $deb_str = $Opt{'debug'} ? " --debug" : "";
2370 my $Txt = join("",
2371 "\"$Cmd\"",
2372 defined($Desc)
2373 ? " - $Desc"
2374 : ""
2376 my $TMP_STDERR = "gpst-stderr.tmp";
2378 if (defined($Exp_stderr) && !length($deb_str)) {
2379 $stderr_cmd = " 2>$TMP_STDERR";
2381 like(`$Cmd$deb_str$stderr_cmd`, "$Exp_stdout", $Txt);
2382 if (defined($Exp_stderr)) {
2383 if (!length($deb_str)) {
2384 like(file_data($TMP_STDERR), "$Exp_stderr", "$Txt (stderr)");
2385 unlink($TMP_STDERR);
2387 } else {
2388 diag("Warning: stderr not defined for '$Txt'");
2390 # }}}
2391 } # likecmd()
2393 sub file_data {
2394 # Return file content as a string {{{
2395 my $File = shift;
2396 my $Txt;
2397 if (open(FP, "<", $File)) {
2398 $Txt = join("", <FP>);
2399 close(FP);
2400 return($Txt);
2401 } else {
2402 return undef;
2404 # }}}
2405 } # file_data()
2407 sub validate_gpx {
2408 # Check that a file is valid GPX {{{
2409 my ($File, $Txt) = @_;
2410 my $TMP_VALID = "validate_result.tmp";
2411 my $Result = system("xmllint --noout --schema ../Tools/xsd/gpx/gpx-1.1.xsd $File 2>$TMP_VALID");
2412 is($Result, 0, "GPX for \"$Txt\" validates");
2413 if ($Result) {
2414 diag(file_data($TMP_VALID));
2416 unlink($TMP_VALID);
2417 # }}}
2418 } # validate_gpx()
2420 sub print_version {
2421 # Print program version {{{
2422 print("$progname v$VERSION\n");
2423 # }}}
2424 } # print_version()
2426 sub usage {
2427 # Send the help message to stdout {{{
2428 my $Retval = shift;
2430 if ($Opt{'verbose'}) {
2431 print("\n");
2432 print_version();
2434 print(<<END);
2436 Usage: $progname [options] [file [files [...]]]
2438 Contains tests for the gpst(1) program.
2440 Options:
2442 -a, --all
2443 Run all tests, also TODOs.
2444 -h, --help
2445 Show this help.
2446 -t, --todo
2447 Run only the TODO tests.
2448 -v, --verbose
2449 Increase level of verbosity. Can be repeated.
2450 --version
2451 Print version information.
2452 --debug
2453 Print debugging messages.
2456 exit($Retval);
2457 # }}}
2458 } # usage()
2460 sub msg {
2461 # Print a status message to stderr based on verbosity level {{{
2462 my ($verbose_level, $Txt) = @_;
2464 if ($Opt{'verbose'} >= $verbose_level) {
2465 print(STDERR "$progname: $Txt\n");
2467 # }}}
2468 } # msg()
2470 __END__
2472 # Plain Old Documentation (POD) {{{
2474 =pod
2476 =head1 NAME
2478 run-tests.pl
2480 =head1 SYNOPSIS
2482 run-tests.pl [options] [file [files [...]]]
2484 =head1 DESCRIPTION
2486 Contains tests for the gpst(1) program.
2488 =head1 OPTIONS
2490 =over 4
2492 =item B<-a>, B<--all>
2494 Run all tests, also TODOs.
2496 =item B<-h>, B<--help>
2498 Print a brief help summary.
2500 =item B<-t>, B<--todo>
2502 Run only the TODO tests.
2504 =item B<-v>, B<--verbose>
2506 Increase level of verbosity. Can be repeated.
2508 =item B<--version>
2510 Print version information.
2512 =item B<--debug>
2514 Print debugging messages.
2516 =back
2518 =head1 AUTHOR
2520 Made by Øyvind A. Holm S<E<lt>sunny@sunbase.orgE<gt>>.
2522 =head1 COPYRIGHT
2524 Copyleft © Øyvind A. Holm E<lt>sunny@sunbase.orgE<gt>
2525 This is free software; see the file F<COPYING> for legalese stuff.
2527 =head1 LICENCE
2529 This program is free software: you can redistribute it and/or modify it
2530 under the terms of the GNU General Public License as published by the
2531 Free Software Foundation, either version 3 of the License, or (at your
2532 option) any later version.
2534 This program is distributed in the hope that it will be useful, but
2535 WITHOUT ANY WARRANTY; without even the implied warranty of
2536 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2537 See the GNU General Public License for more details.
2539 You should have received a copy of the GNU General Public License along
2540 with this program.
2541 If not, see L<http://www.gnu.org/licenses/>.
2543 =head1 SEE ALSO
2545 gpst(1)
2547 =cut
2549 # }}}
2551 # vim: set fenc=UTF-8 ft=perl fdm=marker ts=4 sw=4 sts=4 et fo+=w :