[mkgmap] 02/07: Imported Upstream version 0.0.0+svn3383

Bas Couwenberg sebastic at xs4all.nl
Fri Dec 19 12:11:11 UTC 2014


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch master
in repository mkgmap.

commit 82a85d8acaf3fea27d4fc28c20b55561a31faa53
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Dec 19 12:06:35 2014 +0100

    Imported Upstream version 0.0.0+svn3383
---
 doc/mkgmap.1                                       |   4 +-
 doc/tutorial/Makefile                              |  12 +-
 doc/tutorial/custom.txt                            |  12 ++
 doc/tutorial/first_map.txt                         |  34 +++++
 doc/tutorial/{tutorial.txt => main.txt}            |  16 +--
 doc/tutorial/publish.txt                           |  39 ++++++
 doc/tutorial/second_map.txt                        |  40 ++++++
 doc/tutorial/splitter.txt                          |  23 ++++
 doc/tutorial/starting.txt                          |  21 ++-
 resources/mkgmap-version.properties                |   4 +-
 .../me/parabola/imgfmt/app/net/NETFileReader.java  |   2 +-
 src/uk/me/parabola/imgfmt/app/net/NETHeader.java   |   4 +
 .../mkgmap/osmstyle/actions/PartFilter.java        |   6 +-
 .../mkgmap/osmstyle/actions/SubstringFilter.java   |  16 ++-
 .../mkgmap/osmstyle/actions/PartFilterTest.java    | 148 +++++++++++++++++++++
 .../osmstyle/actions/SubstringFilterTest.java      |  69 ++++++++++
 16 files changed, 419 insertions(+), 31 deletions(-)

diff --git a/doc/mkgmap.1 b/doc/mkgmap.1
index afcdcb3..0ea0650 100644
--- a/doc/mkgmap.1
+++ b/doc/mkgmap.1
@@ -13,12 +13,12 @@ command.
 \fBmkgmap\fP is a program that converts OpenStreetMap (OSM) data into a map that can be
 loaded onto a Garmin GPS device. 
 The mapping between OSM features and the features in the map can be
-completly customized by writing what we term a "style".
+completely customized by writing what we term a "style".
 .SH OPTIONS
 .TP
 .B \-\-help <filename>
 Use this option to get alist of the built in help topics.
-In particular calling --help=options will list all the available
+In particular calling \-\-help=options will list all the available
 options and is always up to date.
 .SH ACKNOWLEDGEMENTS
 This project is almost entirely based on the file format specification
diff --git a/doc/tutorial/Makefile b/doc/tutorial/Makefile
index 0d1fe5a..ad7d55b 100644
--- a/doc/tutorial/Makefile
+++ b/doc/tutorial/Makefile
@@ -1,8 +1,13 @@
 
 include ../resources/make.param
 
-SOURCE_DEPS= tutorial.txt starting.txt first_map.txt $(XSL) 
-TUTORIAL_MAIN=tutorial.txt
+TUTORIAL_MAIN=main.txt
+SOURCE_DEPS= \
+		$(TUTORIAL_MAIN) \
+		starting.txt \
+		first_map.txt second_map.txt publish.txt \
+		splitter.txt custom.txt \
+		$(XSL) 
 
 build: html
 
@@ -13,10 +18,11 @@ pdf: tutorial.pdf
 epub: tutorial.epub
 
 tutorial.html: $(SOURCE_DEPS)
-	$(ASCIIDOC) $(HTML_ATTRS) -a icons -a iconsdir=$(ICONSDIR) -b html5 $(TUTORIAL_MAIN)
+	$(ASCIIDOC) $(HTML_ATTRS) -o tutorial.html -a icons -a iconsdir=$(ICONSDIR) -b html5 $(TUTORIAL_MAIN)
 
 tutorial.pdf: $(SOURCE_DEPS)
 	$(A2X) --xsl-file=$(XSL) --fop -a doctype=article $(PDF_OPTS) $(TUTORIAL_MAIN)
+	mv main.pdf tutorial.pdf
 
 tutorial.epub: $(SOURCE_DEPS)
 	mkdir -p build
diff --git a/doc/tutorial/custom.txt b/doc/tutorial/custom.txt
new file mode 100644
index 0000000..f156842
--- /dev/null
+++ b/doc/tutorial/custom.txt
@@ -0,0 +1,12 @@
+
+Customising the map
+===================
+
+This section covers how to change the kind of things that the
+map contains and how it looks.
+There are two parts to this.
+First it is possible to include or leave out any of the available
+data items that are contained in {osm}.
+Second the colours and appearence of the final map can be changed.
+These are separate operations, so that the same map can have
+the colours and icons changed, simply by using a different file.
diff --git a/doc/tutorial/first_map.txt b/doc/tutorial/first_map.txt
index 6243714..057dc2f 100644
--- a/doc/tutorial/first_map.txt
+++ b/doc/tutorial/first_map.txt
@@ -1,5 +1,39 @@
 
 Create your first map
 =====================
+
+First you need to obtain an extract of map data.  You can do this by
+going to the http://www.openstreetmap.org[OSM] website, locating an area
+that you are familiar with and clicking on the +Export+ button at the
+top.
+It will not let you download a very large area, so zoom in and
+out until you find an acceptable area that is large enough to include
+a number of streets and interesting points. The tutorial
+will cover making maps of complete countries later on, this is
+just to get started.
+You will end up with a file called +map.osm+ which you should
+place in the same directory as mkgmap.jar.
+
+Alternatively you can use josm to download a familiar area of the map.
+Save it to a file called +map.osm+ in the same folder as mkgmap.jar.
+
+.Creating the map
+----
+java -jar mkgmap.jar map.osm
+----
+
+You should now see a few new files have been created.
+The important one for now is the one called 63240001.img.
+
+== Loading the map onto a GPS device
+
+TBW
+
+== Viewing the map with QLandkarteGT
+
+TBW
+
+== Displaying the map in BaseCamp
+
 TBW
 
diff --git a/doc/tutorial/tutorial.txt b/doc/tutorial/main.txt
similarity index 71%
rename from doc/tutorial/tutorial.txt
rename to doc/tutorial/main.txt
index 7a9669b..2094eb6 100644
--- a/doc/tutorial/tutorial.txt
+++ b/doc/tutorial/main.txt
@@ -14,10 +14,12 @@ The mkgmap team
 :frame: topbot
 :grid: rows
 
+:osm: Open Street Map
+
 // Used for conditional compiles for a unix/windows version.
 :windows: 1
 :linux: 1
-:max: 1
+:mac: 1
 
 
 Introduction
@@ -34,14 +36,10 @@ include::starting.txt[]
 
 include::first_map.txt[]
 
-// Some ideas for the sections, order to be decided 
-// I'm assuming that this will not be published before the great
-// option defaulting process is complete.
-
-// installing to device, mapsource, basecamp, qlandkartegt etc
+include::second_map.txt[]
 
-// adding sea areas
+include::splitter.txt[]
 
-// using a bounds file to improve addresses
+include::publish.txt[]
 
-// splitting large area
+include::custom.txt[]
diff --git a/doc/tutorial/publish.txt b/doc/tutorial/publish.txt
new file mode 100644
index 0000000..1e5d84b
--- /dev/null
+++ b/doc/tutorial/publish.txt
@@ -0,0 +1,39 @@
+
+Preparing to distribute your map
+================================
+
+You may want to share you map with others.
+This section shows how you prepare it so that it is
+well named and doesn't clash with other maps.
+
+--family-id::
+    This is an integer that identifies a family of products.
+Range: [1..9999]
+Mkgmap default: 6324
+
+--family-name::
+If you build several maps, this option describes the family name of all
+of your maps. Garmin will display this in the map selection screen.
+Example: --family-name="OpenStreetmap mkgmap XL 2019"
+
+--product-id::
+This is an integer that identifies a product within a family.  It is
+often just 1, which is the default.
+
+--product-version::
+The version of the product.  Default value is 1.
+
+--series-name::
+This name will be displayed in MapSource in the map selection drop-down.
+The default is "OSM map".
+
+--area-name::
+Area name is displayed on Garmin units (or at least on eTrex) as the
+second part of the mapname in the list of the individual maps.
+
+--copyright-message=note::
+Specify a copyright message for files that do not contain one.
+
+--license-file=file::
+The contents of the file will be used as licence information to
+be added to the map.
diff --git a/doc/tutorial/second_map.txt b/doc/tutorial/second_map.txt
new file mode 100644
index 0000000..56e068a
--- /dev/null
+++ b/doc/tutorial/second_map.txt
@@ -0,0 +1,40 @@
+
+Improving the map
+=================
+
+Once you have created a simple map, then next step is to add
+some options to improve or customise the map.
+
+Option --route::
+This option adds information to the map to enable automatically
+finding routes between two points.
+Option --drive-on-left:::
+Option --drive-on-right:::
+It is a good idea to set the correct option to indicate which
+side of the road traffic travels on. If you don't, then mkgmap
+will guess based on the direction of roundabouts which will
+often be correct, but its best to make sure.
+
+Option --code-page=1252::
+This sets the characters that can be used
++
+|=====
+| 1250 | Central and East European Latin
+| 1251 | Cyrillic
+| 1252 | West European Latin
+| 1253 | Greek
+| 1254 | Turkish
+| 1255 | Hebrew
+| 1256 | Arabic
+| 1257 | Baltic
+| 1258 | Vietnamese
+| 65001 | Unicode
+|=======
++
+There is some support for the following code page values
++
+|=======
+| 932 | Japanese | Displays fine, address search may fail.
+|======
+
+
diff --git a/doc/tutorial/splitter.txt b/doc/tutorial/splitter.txt
new file mode 100644
index 0000000..ae096c2
--- /dev/null
+++ b/doc/tutorial/splitter.txt
@@ -0,0 +1,23 @@
+
+Making a larger map
+===================
+
+So far we have just used a small sample of map data for a local area.
+If you want to create a map for a whole country or continent, then
+the data has to be split up into tiles first.
+There is no hard and fast rule about how large the tile is, because
+it depends on the numbers of map features within the tile rather than
+the area that the tile covers.
+So a large well mapped city may require several tiles, whereas a
+poorly mapped small country may only need one or two.
+
+Each tile is compiled and then the whole lot is combined into
+a single map.
+
+== Adding sea areas
+
+TBW
+
+== Adding better address information
+
+TBW
diff --git a/doc/tutorial/starting.txt b/doc/tutorial/starting.txt
index c1e7c79..bdbd3c1 100644
--- a/doc/tutorial/starting.txt
+++ b/doc/tutorial/starting.txt
@@ -3,21 +3,32 @@ Getting started
 ===============
 
 == Install java
-To use mkgmap you need a program called Java.
+To use mkgmap you need to install Java.
 Download it from http://www.java.com[java.com]
+and install it.
 
 ifdef::linux[]
 === Linux packages
 If you are running Linux, then you may prefer to install java from you
 systems package manager, instead of from the Java site.
 
-The package is named *java-1.7.0-openjdk* on Fedora and similar
-distributions; on Ubuntu, Debian and similar it is is named
-*openjdk-7-jre*
+The package has a name like *java-1.7.0-openjdk* on Fedora and similar
+distributions; on Ubuntu, Debian and similar it has a name
+like *openjdk-7-jre*
 
 endif::linux[]
 
-== Download 
+== Download mkgmap
 Download +mkgmap+ from the
 http://www.mkgmap.org.uk/download/mkgmap.html[mkgmap download site].
 
+Unzip the file into a folder or directory, the rest of the tutorial
+will assume that you are working within that directory.
+
+The main file is called +mkgmap.jar+ which is the main part of the
+program itself and the +lib+ folder that contains other parts
+of the program.  It is important that the +mkgmap.jar+ and the +lib+
+folder stay together: if you move one you must move the other.
+
+There will also be +doc+ folder containing the available documentation,
+and an examples folder which can be ignored.
diff --git a/resources/mkgmap-version.properties b/resources/mkgmap-version.properties
index 9f108d2..798b028 100644
--- a/resources/mkgmap-version.properties
+++ b/resources/mkgmap-version.properties
@@ -1,2 +1,2 @@
-svn.version: 3366
-build.timestamp: 2014-12-08T07:00:53+0000
+svn.version: 3383
+build.timestamp: 2014-12-18T07:11:34+0000
diff --git a/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java b/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
index bd93449..0d09b1e 100644
--- a/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
+++ b/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
@@ -229,7 +229,7 @@ public class NETFileReader extends ImgFile {
 			// entry we only need one of the offsets so pick the first one.
 			int idx = (net1 >> 22) & 0x3;
 			if (idx == 0)
-				offsets.add(net1 & 0x3fffff);
+				offsets.add((net1 & 0x3fffff) << netHeader.getRoadShift());
 		}
 
 		// Sort in address order in the hope of speeding up reading.
diff --git a/src/uk/me/parabola/imgfmt/app/net/NETHeader.java b/src/uk/me/parabola/imgfmt/app/net/NETHeader.java
index 351acd0..66f3bf6 100644
--- a/src/uk/me/parabola/imgfmt/app/net/NETHeader.java
+++ b/src/uk/me/parabola/imgfmt/app/net/NETHeader.java
@@ -108,4 +108,8 @@ public class NETHeader extends CommonHeader {
 	public int getSortedRoadsEnd() {
 		return sortedRoads.getEndPos();
 	}
+
+	public int getRoadShift() {
+		return roadShift & 0xff;
+	}
 }
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/PartFilter.java b/src/uk/me/parabola/mkgmap/osmstyle/actions/PartFilter.java
index c1a447e..91259ff 100644
--- a/src/uk/me/parabola/mkgmap/osmstyle/actions/PartFilter.java
+++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/PartFilter.java
@@ -13,8 +13,8 @@
 package uk.me.parabola.mkgmap.osmstyle.actions;
 
 import java.util.regex.Pattern;
-import uk.me.parabola.imgfmt.ExitException;
 import uk.me.parabola.mkgmap.reader.osm.Element;
+import uk.me.parabola.mkgmap.scan.SyntaxException;
 
 /**
  * Split a value in parts and returns one or more part(s) of a value.
@@ -78,8 +78,10 @@ public class PartFilter extends ValueFilter {
 				separator = ";";
 			}
 		} catch (NumberFormatException e) {
-			throw new ExitException("Not valid numbers in style part command: " + arg);
+			throw new SyntaxException("Not valid numbers in style part command: " + arg);
 		}
+		if (partnumber == 0)
+			throw new SyntaxException("Not valid numbers in style part command: " + arg);
 	}
 
 	public String doFilter(String value, Element el) {
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java b/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
index fd88bbc..4a8218f 100644
--- a/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
+++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
@@ -16,8 +16,8 @@
  */
 package uk.me.parabola.mkgmap.osmstyle.actions;
 
-import uk.me.parabola.imgfmt.ExitException;
 import uk.me.parabola.mkgmap.reader.osm.Element;
+import uk.me.parabola.mkgmap.scan.SyntaxException;
 
 /**
  * Extract a substring from a value
@@ -45,19 +45,21 @@ public class SubstringFilter extends ValueFilter {
 				end = Integer.parseInt(temp[1]);
 				args = 2;
 			} else {
-				start = 0;
-				end = 0;
-				args = 0;
+				throw new SyntaxException(String.format("invalid argunemt for style substring command: '%s'", arg));
 			}
 		} catch (NumberFormatException e) {
-			throw new ExitException(String.format("Numbers not valid in style substring command: '%s'", arg));
+			throw new SyntaxException(String.format("Numbers not valid in style substring command: '%s'", arg));
+		}
+		if (args == 2 && start > end){
+			throw new SyntaxException(String.format("start > end in style substring command: '%s'", arg));
 		}
 	}
 
 	protected String doFilter(String value, Element el) {
 		if (value == null) return null;
-
-		if (args == 1) {
+		if (start > value.length())
+			return null;
+		if (args == 1 || end > value.length()) {
 			return value.substring(start);
 		}
 		if (args == 2) {
diff --git a/test/uk/me/parabola/mkgmap/osmstyle/actions/PartFilterTest.java b/test/uk/me/parabola/mkgmap/osmstyle/actions/PartFilterTest.java
new file mode 100644
index 0000000..35a8709
--- /dev/null
+++ b/test/uk/me/parabola/mkgmap/osmstyle/actions/PartFilterTest.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2014.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 or
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+package uk.me.parabola.mkgmap.osmstyle.actions;
+
+import uk.me.parabola.mkgmap.scan.SyntaxException;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class PartFilterTest {
+	
+	/**
+	 *  * Examples from docu: if the value is "Aa#Bb#Cc#Dd#Ee"
+ * part:#:1  returns Aa
+ * part:#:-1 returns Ee
+ * part:#:2  returns Bb
+ * part:#:-2 returns Dd
+ * part:#>1  returns Bb#Cc#Dd#Ee#
+ * part:#<5  returns Aa#Bb#Cc#Dd#
+ * part:#<-1 returns Aa#Bb#Cc#Dd#
+
+	 */
+	@Test
+	public void testNoArg() {
+		PartFilter filter = new PartFilter("");
+		String s = filter.doFilter("x;y;z", null);
+		assertEquals("x", s);
+	}
+	@Test
+	public void testOneArg() {
+		PartFilter filter = new PartFilter(";");
+		String s = filter.doFilter("x;y;z", null);
+		assertEquals("x", s);
+	}
+	@Test
+	public void test2ndArg() {
+		PartFilter filter = new PartFilter(":3");
+		String s = filter.doFilter("Aa;Bb;Cc;Dd;Ee", null);
+		assertEquals("Cc", s);
+	}
+	@Test
+	public void testFirstPart() {
+		PartFilter filter = new PartFilter("#:1");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Aa", s);
+	}
+	@Test
+	public void testLastPart() {
+		PartFilter filter = new PartFilter("#:-1");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Ee", s);
+	}
+
+	@Test
+	public void test2ndPart() {
+		PartFilter filter = new PartFilter("#:2");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Bb", s);
+	}
+
+	@Test
+	public void test2ndLastPart() {
+		PartFilter filter = new PartFilter("#:-2");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Dd", s);
+	}
+	@Test
+	public void testRestAfter1() {
+		PartFilter filter = new PartFilter("#>1");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Bb#Cc#Dd#Ee#", s);
+	}
+	@Test
+	public void testBeforeLast() {
+		PartFilter filter = new PartFilter("#<-1");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Aa#Bb#Cc#Dd#", s);
+	}
+	@Test
+	public void testBeforeFifth() {
+		PartFilter filter = new PartFilter("#<5");
+		String s = filter.doFilter("Aa#Bb#Cc#Dd#Ee", null);
+		assertEquals("Aa#Bb#Cc#Dd#", s);
+	}
+	@Test
+	public void testStringContainsNoSeparatorPart1() {
+		PartFilter filter = new PartFilter("#:1");
+		String s = filter.doFilter("xyz", null);
+		assertEquals("xyz", s);
+	}
+	@Test
+	public void testStringContainsNoSeparatorLastPart() {
+		PartFilter filter = new PartFilter("#:-1");
+		String s = filter.doFilter("xyz", null);
+		assertEquals("xyz", s);
+	}
+	@Test
+	public void testStringContainsNoSeparator2ndPart() {
+		PartFilter filter = new PartFilter("#:2");
+		String s = filter.doFilter("xyz", null);
+		assertEquals(null, s);
+	}
+	@Test
+	public void testStringContainsNoSeparator2ndLastPart() {
+		PartFilter filter = new PartFilter("#:2");
+		String s = filter.doFilter("xyz", null);
+		assertEquals(null, s);
+	}
+	
+	
+	@Test(expected=SyntaxException.class)
+	public void testBadArgNotNum() {
+		PartFilter filter = new PartFilter("#<-x");
+		filter.doFilter("abc", null);
+	}
+	@Test(expected=SyntaxException.class)
+	public void testBadArgBefore0() {
+		PartFilter filter = new PartFilter("#<-0");
+		filter.doFilter("abc", null);
+	}
+	@Test(expected=SyntaxException.class)
+	public void testBadArgAfter0() {
+		PartFilter filter = new PartFilter("#>-0");
+		filter.doFilter("abc", null);
+	}
+	@Test
+	public void testLong1stArg() {
+		PartFilter filter = new PartFilter("--->1");
+		String s = filter.doFilter("abc---def---ghi", null);
+		assertEquals("def---ghi---", s);
+	}
+//	@Test (expected=SyntaxException.class)
+//	public void test1stIsColonArg() {
+//		PartFilter filter = new PartFilter("::2");
+//		filter.doFilter("abc", null);	}
+}
diff --git a/test/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilterTest.java b/test/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilterTest.java
new file mode 100644
index 0000000..3a5bb92
--- /dev/null
+++ b/test/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilterTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2014.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 or
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+package uk.me.parabola.mkgmap.osmstyle.actions;
+
+import uk.me.parabola.mkgmap.scan.SyntaxException;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class SubstringFilterTest {
+
+	@Test
+	public void testOneArg() {
+		SubstringFilter filter = new SubstringFilter("2");
+		String s = filter.doFilter("abcd", null);
+		assertEquals("cd", s);
+	}
+
+	@Test
+	public void testTwoArgs() {
+		SubstringFilter filter = new SubstringFilter("2:4");
+		String s = filter.doFilter("abcdefg", null);
+		assertEquals("cd", s);
+	}
+
+	@Test(expected=SyntaxException.class)
+	public void testBadArgs() {
+		SubstringFilter filter = new SubstringFilter("6:4");
+		filter.doFilter("abc", null);
+	}
+
+	@Test(expected = SyntaxException.class)
+	public void testEmptyArgs() {
+		SubstringFilter filter = new SubstringFilter("");
+		String s = filter.doFilter("abcde", null);
+		assertEquals("abcde", s);
+	}
+
+	@Test(expected = SyntaxException.class)
+	public void testTooManyArgs() {
+		SubstringFilter filter = new SubstringFilter("1:2:3");
+		filter.doFilter("abc", null);
+	}
+
+	@Test
+	public void testRangeLargerThanInput() {
+		SubstringFilter filter = new SubstringFilter("2:30");
+		String s = filter.doFilter("abcdef", null);
+		assertEquals("cdef", s);
+	}
+	@Test
+	public void testStartLargerThanInput() {
+		SubstringFilter filter = new SubstringFilter("10");
+		String s = filter.doFilter("abcdef", null);
+		assertEquals(null, s);
+	}
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mkgmap.git



More information about the Pkg-grass-devel mailing list