Package slash.navigation.url

Source Code of slash.navigation.url.GoogleMapsUrlFormatTest

/*
    This file is part of RouteConverter.

    RouteConverter is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    RouteConverter 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.

    You should have received a copy of the GNU General Public License
    along with RouteConverter; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

    Copyright (C) 2007 Christian Pesch. All Rights Reserved.
*/

package slash.navigation.url;

import org.junit.Test;
import slash.navigation.base.Wgs84Position;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static slash.common.TestCase.assertDoubleEquals;
import static slash.navigation.url.GoogleMapsUrlFormat.isGoogleMapsLinkUrl;
import static slash.navigation.url.GoogleMapsUrlFormat.isGoogleMapsProfileUrl;

public class GoogleMapsUrlFormatTest {
    private static final String INPUT1_EMAIL = "Betreff: Route nach/zu Riehler Strasse 190 50735 Koeln (Google Maps)\n" +
            "\n" +
            "> Routenplaner\n" +
            "> Link:\n" +
            "<http://maps.google.de/maps?f=d&hl=de&geocode=&saddr=H%C3%B6lderlinstra%C3%9Fe,+51545+Br%C3%B6l,+Oberbergischer+Kreis,+Nordrhein-Westfalen,+Deutschland&daddr=L339%2FWuppertaler+Stra%C3%9Fe+%4050.918890,+7.560880+to%3AL350+%4050.885180,+7.463950+to%3AB%C3%B6vingen%2FK11+%4050.917200,+7.376600+to%3AL312+%4050.916380,+7.327030+to%3AK%C3%B6ln,+Riehler+Str.+190&mrcr=2&mra=mr&sll=50.954318,7.311401&sspn=0.142091,0.32135&ie=UTF8&ll=50.952371,7.261276&spn=0.284193,0.6427&z=11&om=1>\n" +
            ">\n" +
            "> Startadresse: Hoelderlinstrasse 51545 Broel\n" +
            "> Zieladresse: Riehler Strasse 190 50735 Koeln";

    private static final String INPUT2 = "http://maps.google.de/maps?f=d&hl=de&geocode=&saddr=51545+Waldbroel,+Hoelderlinstr.&daddr=50389+Wesseling,+Urfelder+Strasse+221+to%3A50.876178,6.962585&mrcr=1&mrsp=2&sz=10&mra=mi&sll=50.892745,7.312145&sspn=0.569114,1.2854&ie=UTF8&z=10&om=1";

    private static final String INPUT3 = "http://maps.google.com/maps?f=d&hl=de&geocode=&time=&date=&ttype=&saddr=L%C3%BCbeck,+Germany&daddr=Hamburg,+Germany&sll=37.0625,-95.677068&sspn=48.374125,76.464844&ie=UTF8&z=10&om=1";

    private static final String INPUT4 = "http://maps.google.de/maps?f=d&hl=de&geocode=17223560710991701360,51.125340,10.480100%3B12158345081209133212,51.126450,10.720920%3B7678232323906648676,50.944500,10.743250&time=&date=&ttype=&saddr=L1042%2FLangensaltzaer+Strasse+%4051.125340,+10.480100&daddr=51.116994,10.723944+to:Friedhofsweg+%4050.944500,+10.743250&mra=dme&mrcr=0,1&mrsp=1&sz=14&sll=51.128953,10.722742&sspn=0.035766,0.079136&ie=UTF8&ll=51.021962,10.661545&spn=0.286792,0.633087&z=11&om=1";

    private static final String INPUT4_STRIPPED = "http://maps.google.de/maps?saddr=L1042%2FLangensaltzaer+Strasse+%4051.125340,+10.480100&daddr=51.116994,10.723944+to:Friedhofsweg+%4050.944500,+10.743250";

    private static final String INPUT5 = "http://maps.google.com/maps?f=d&hl=en&geocode=7153851080862447280,40.323122,-78.922058%3B658155100876861845,40.443995,-79.950354&saddr=326+Napoleon+St,+Johnstown,+PA+15901+(War+Memorial)&daddr=4400+Forbes+Ave,+Pittsburgh,+PA+15213+(Carnegie+Museums+)&mra=pe&mrcr=0&doflg=ptm&sll=40.412722,-79.572054&sspn=1.327888,2.39502&ie=UTF8&t=h&z=10";

    private static final String INPUT6 = "https://maps.google.com/maps?f=d&saddr=326+Napoleon+St,+Johnstown,+PA+15901+(War+Memorial)&daddr=40.159984,-78.980713+to:I-70+W%2FI-76+W%2FPennsylvania+Turnpike+%4040.064830,+-79.143020+to:PA-31+%4040.127779,+-79.434904+to:4400+Forbes+Ave,+Pittsburgh,+PA+15213+(Carnegie+Museums+)&hl=en&geocode=7153851080862447280,40.323122,-78.922058%3B12162090679892645334,40.064830,-79.143020%3B6752420830689506546,40.127779,-79.434904%3B658155100876861845,40.443995,-79.950354&mra=dpe&mrcr=0&mrsp=1&sz=9&via=1,2,3&sll=39.846504,-78.955994&sspn=1.524572,1.71936&ie=UTF8&z=9";

    private static final String INPUT7_GEOCODE = "http://maps.google.de/maps?f=d&saddr=Hamburg%2FUhlenhorst&daddr=Hauptstra%C3%9Fe%2FL160+to:53.588429,10.419159+to:Breitenfelde%2FNeuenlande&hl=de&geocode=%3BFVy1MQMdDoudAA%3B%3B&mra=dpe&mrcr=0&mrsp=2&sz=11&via=1,2&sll=53.582575,10.30528&sspn=0.234798,0.715485&ie=UTF8&z=11";

    private static final String INPUT8_WWW_NO_COORDINATES ="http://www.google.de/maps?f=d&source=s_d&saddr=hannover&daddr=hamburg&hl=de&geocode=&mra=ls&sll=51.151786,10.415039&sspn=20.697059,39.331055&ie=UTF8&z=9";

    private static final String INPUT9_NEW_GOOGLE_MAPS_2014 = "https://www.google.de/maps/dir/Aachen-Rothe+Erde/Mainz-Kastel,+Wiesbaden/Hanns-Martin-Schleyer-Stra%C3%9Fe,+Sindelfingen/@49.8065843,6.491479,8z/data=!3m1!4b1!4m20!4m19!1m5!1m1!1s0x47c09955de781093:0x8b975ed430fb3e53!2m2!1d6.116475!2d50.770202!1m5!1m1!1s0x47bd97a86ffd2e91:0xa4efa4fe12ce70c8!2m2!1d8.282168!2d50.0101878!1m5!1m1!1s0x4799dfcc3a4161f3:0xcd2a1bc2ee961675!2m2!1d9.0001511!2d48.7039074!3e0";

    private GoogleMapsUrlFormat format = new GoogleMapsUrlFormat();

    @Test
    public void testFindURL() {
        String url = format.findURL(INPUT1_EMAIL);
        assertNotNull(url);
        assertTrue(url.startsWith("?f=d"));
        assertNull(format.findURL("don't care"));
    }

    @Test
    public void testParseStartPosition() {
        Wgs84Position position = format.parsePlainPosition("50.954318,7.311401");
        assertDoubleEquals(7.311401, position.getLongitude());
        assertDoubleEquals(50.954318, position.getLatitude());
    }

    @Test
    public void testParseNegativeStartPosition() {
        Wgs84Position position = format.parsePlainPosition("-50.954318,-7.311401");
        assertDoubleEquals(-7.311401, position.getLongitude());
        assertDoubleEquals(-50.954318, position.getLatitude());
    }

    @Test
    public void testParseDestinationPosition() {
        Wgs84Position position = format.parseCommentPosition("L339/Wuppertaler Strasse @50.918890,7.560880 ");
        assertDoubleEquals(7.560880, position.getLongitude());
        assertDoubleEquals(50.918890, position.getLatitude());
        assertEquals("L339/Wuppertaler Strasse", position.getDescription());
    }

    @Test
    public void testParseDestinationPositions() {
        List<Wgs84Position> positions = format.parseDestinationPositions("L339/Wuppertaler Strasse @50.918890,7.560880 to: B @ -1.1 , -2.2to:C@3.3,4.4");
        assertEquals(3, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertDoubleEquals(7.560880, position1.getLongitude());
        assertDoubleEquals(50.918890, position1.getLatitude());
        assertEquals("L339/Wuppertaler Strasse", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertDoubleEquals(-2.2, position2.getLongitude());
        assertDoubleEquals(-1.1, position2.getLatitude());
        assertEquals("B", position2.getDescription());
        Wgs84Position position3 = positions.get(2);
        assertDoubleEquals(4.4, position3.getLongitude());
        assertDoubleEquals(3.3, position3.getLatitude());
        assertEquals("C", position3.getDescription());
    }

    private List<Wgs84Position> parsePositions(String text) {
        String url = format.findURL(text);
        if (url.startsWith("/dir/")) {
            return format.parsePositions(url.substring(5));
        } else {
            Map<String, List<String>> parameters = format.parseURLParameters(url, "UTF-8");
            return format.parsePositions(parameters);

        }
    }

    @Test
    public void testParsePositionsFromInput1() {
        List<Wgs84Position> positions = parsePositions(INPUT1_EMAIL);
        assertNotNull(positions);
        assertEquals(6, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertNull(position1.getLongitude());
        assertNull(position1.getLatitude());
        assertEquals("H\u00f6lderlinstra\u00dfe, 51545 Br\u00f6l, Oberbergischer Kreis, Nordrhein-Westfalen, Deutschland", position1.getDescription());
        Wgs84Position position3 = positions.get(2);
        assertDoubleEquals(7.46395, position3.getLongitude());
        assertDoubleEquals(50.88518, position3.getLatitude());
        assertEquals("L350", position3.getDescription());
        Wgs84Position position6 = positions.get(5);
        assertNull(position6.getLongitude());
        assertNull(position6.getLatitude());
        assertEquals("K\u00f6ln, Riehler Str. 190", position6.getDescription());
    }

    @Test
    public void testParsePositionsFromInput2() {
        List<Wgs84Position> positions = parsePositions(INPUT2);
        assertNotNull(positions);
        assertEquals(3, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertNull(position1.getLongitude());
        assertNull(position1.getLatitude());
        assertEquals("51545 Waldbroel, Hoelderlinstr.", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertNull(position2.getLongitude());
        assertNull(position2.getLatitude());
        assertEquals("50389 Wesseling, Urfelder Strasse 221", position2.getDescription());
        Wgs84Position position3 = positions.get(2);
        assertDoubleEquals(6.962585, position3.getLongitude());
        assertDoubleEquals(50.876178, position3.getLatitude());
        assertNull(position3.getDescription());
    }

    @Test
    public void testParsePositionsFromInput3() {
        List<Wgs84Position> positions = parsePositions(INPUT3);
        assertNotNull(positions);
        assertEquals(2, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertNull(position1.getLongitude());
        assertNull(position1.getLatitude());
        assertEquals("L\u00fcbeck, Germany", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertNull(position2.getLongitude());
        assertNull(position2.getLatitude());
        assertEquals("Hamburg, Germany", position2.getDescription());
    }

    @Test
    public void testParsePositionsFromInput4() {
        List<Wgs84Position> positions = parsePositions(INPUT4);
        assertNotNull(positions);
        assertEquals(3, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertDoubleEquals(10.480100, position1.getLongitude());
        assertDoubleEquals(51.125340, position1.getLatitude());
        assertEquals("L1042/Langensaltzaer Strasse", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertDoubleEquals(10.723944, position2.getLongitude());
        assertDoubleEquals(51.116994, position2.getLatitude());
        assertNull(position2.getDescription());
        Wgs84Position position3 = positions.get(2);
        assertDoubleEquals(10.72092, position3.getLongitude());
        assertDoubleEquals(51.12645, position3.getLatitude());
        assertEquals("Friedhofsweg", position3.getDescription());
    }

    @Test
    public void testParsePositionsFromInput4Stripped() {
        List<Wgs84Position> positions = parsePositions(INPUT4_STRIPPED);
        assertNotNull(positions);
        assertEquals(3, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertDoubleEquals(10.480100, position1.getLongitude());
        assertDoubleEquals(51.125340, position1.getLatitude());
        assertEquals("L1042/Langensaltzaer Strasse", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertDoubleEquals(10.723944, position2.getLongitude());
        assertDoubleEquals(51.116994, position2.getLatitude());
        assertNull(position2.getDescription());
        Wgs84Position position3 = positions.get(2);
        assertDoubleEquals(10.74325, position3.getLongitude());
        assertDoubleEquals(50.9445, position3.getLatitude());
        assertEquals("Friedhofsweg", position3.getDescription());
    }

    @Test
    public void testParseGeocodePositionsFromInput5() {
        List<Wgs84Position> positions = parsePositions(INPUT5);
        assertNotNull(positions);
        assertEquals(2, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertDoubleEquals(-78.922058, position1.getLongitude());
        assertDoubleEquals(40.323122, position1.getLatitude());
        assertEquals("326 Napoleon St, Johnstown, PA 15901 (War Memorial)", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertDoubleEquals(-79.950354, position2.getLongitude());
        assertDoubleEquals(40.443995, position2.getLatitude());
        assertEquals("4400 Forbes Ave, Pittsburgh, PA 15213 (Carnegie Museums )", position2.getDescription());
    }

    @Test
    public void testParseGeocodePositionsWithViaFromInput6() {
        List<Wgs84Position> positions = parsePositions(INPUT6);
        assertNotNull(positions);
        assertEquals(5, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertDoubleEquals(-78.922058, position1.getLongitude());
        assertDoubleEquals(40.323122, position1.getLatitude());
        assertEquals("326 Napoleon St, Johnstown, PA 15901 (War Memorial)", position1.getDescription());
        Wgs84Position position2 = positions.get(2);
        assertDoubleEquals(-79.14302, position2.getLongitude());
        assertDoubleEquals(40.06483, position2.getLatitude());
        assertEquals("I-70 W/I-76 W/Pennsylvania Turnpike", position2.getDescription());
        Wgs84Position position3 = positions.get(3);
        assertDoubleEquals(-79.434904, position3.getLongitude());
        assertDoubleEquals(40.127779, position3.getLatitude());
        assertEquals("PA-31", position3.getDescription());
        Wgs84Position position4 = positions.get(4);
        assertDoubleEquals(-79.950354, position4.getLongitude());
        assertDoubleEquals(40.443995, position4.getLatitude());
        assertEquals("4400 Forbes Ave, Pittsburgh, PA 15213 (Carnegie Museums )", position4.getDescription());
    }

    @Test
    public void testParseEncodedGeocodePositionsFromInput7() {
        List<Wgs84Position> positions = parsePositions(INPUT7_GEOCODE);
        assertNotNull(positions);
        assertEquals(4, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertNull(position1.getLongitude());
        assertNull(position1.getLatitude());
        assertEquals("Hamburg/Uhlenhorst", position1.getDescription());
        Wgs84Position position2 = positions.get(2);
        assertDoubleEquals(10.419159, position2.getLongitude());
        assertDoubleEquals(53.588429, position2.getLatitude());
        assertEquals(null, position2.getDescription());
        Wgs84Position position3 = positions.get(3);
        assertEquals(null, position3.getLongitude());
        assertEquals(null, position3.getLatitude());
        assertEquals("Breitenfelde/Neuenlande", position3.getDescription());
    }

    @Test
    public void testParseWWWNoCoordinatesFromInput8() {
        List<Wgs84Position> positions = parsePositions(INPUT8_WWW_NO_COORDINATES);
        assertNotNull(positions);
        assertEquals(2, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertNull(position1.getLongitude());
        assertNull(position1.getLatitude());
        assertEquals("hannover", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertNull(position2.getLongitude());
        assertNull(position2.getLatitude());
        assertEquals("hamburg", position2.getDescription());
    }

    @Test
    public void testParseNewGoogleMaps2014FromInput9() {
        List<Wgs84Position> positions = parsePositions(INPUT9_NEW_GOOGLE_MAPS_2014);
        assertNotNull(positions);
        assertEquals(3, positions.size());
        Wgs84Position position1 = positions.get(0);
        assertNull(position1.getLongitude());
        assertNull(position1.getLatitude());
        assertEquals("Aachen-Rothe Erde", position1.getDescription());
        Wgs84Position position2 = positions.get(1);
        assertNull(position2.getLongitude());
        assertNull(position2.getLatitude());
        assertEquals("Mainz-Kastel, Wiesbaden", position2.getDescription());
        Wgs84Position position3 = positions.get(2);
        assertNull(position3.getLongitude());
        assertNull(position3.getLatitude());
        assertEquals("Hanns-Martin-Schleyer-Stra\u00dfe, Sindelfingen", position3.getDescription());
    }

    @Test
    public void testCreateURL() {
        List<Wgs84Position> positions = new ArrayList<Wgs84Position>();
        positions.add(new Wgs84Position(10.02571156, 53.57497745, null, 5.5, null, "Hamburg, Germany"));
        positions.add(new Wgs84Position(10.20026067, 53.57662034, null, 4.5, null, "Stemwarde, Germany"));
        positions.add(new Wgs84Position(10.35735078, 53.59171021, null, 3.5, null, "Gro\u00dfensee, Germany"));
        positions.add(new Wgs84Position(10.45696089, 53.64781001, null, 2.5, null, "Linau, Germany"));
        String expected = "http://maps.google.com/maps?ie=UTF8&saddr=Hamburg,+Germany%4053.574977,10.025711&daddr=Stemwarde,+Germany%4053.576620,10.200260+to:Gro%C3%9Fensee,+Germany%4053.591710,10.357350+to:Linau,+Germany%4053.647810,10.456960";
        String actual = format.createURL(positions, 0, positions.size());
        assertEquals(expected, actual);
    }

    @Test
    public void testIsGoogleMapsLinkUrl() throws MalformedURLException {
        assertTrue(isGoogleMapsLinkUrl(new URL("https://maps.google.com/maps?saddr=Hamburg&daddr=Hannover+to:M%C3%BCnchen&hl=en&ie=UTF8&sll=50.844236,10.557014&sspn=6.272277,10.777588&geocode=Fe0fMQMd0n2YACm5Exh-g2GxRzGgOtZ78j0mBA%3BFVQxHwMdqn-UACmFT0lNUQuwRzEgR6yUbawlBA%3BFRCC3gIdsqWwACnZX4yj-XWeRzF9mLF9SrgMAQ&mra=ls&t=m&z=7")));
        assertTrue(isGoogleMapsLinkUrl(new URL("https://www.google.de/maps/dir/Hamburg/Hannover/M%C3%BCnchen/@50.8213415,8.3587982,7z/data=!3m1!4b1!4m20!4m19!1m5!1m1!1s0x47b161837e1813b9:0x4263df27bd63aa0!2m2!1d9.9936818!2d53.5510846!1m5!1m1!1s0x47b00b514d494f85:0x425ac6d94ac4720!2m2!1d9.7320104!2d52.3758916!1m5!1m1!1s0x479e75f9a38c5fd9:0x10cb84a7db1987d!2m2!1d11.5819806!2d48.1351253!3e0")));
    }

    @Test
    public void testIsGoogleMapsProfile() throws MalformedURLException {
        assertTrue(isGoogleMapsProfileUrl(new URL("http://maps.google.com/maps/ms?ie=UTF8&hl=de&oe=UTF8&num=200&start=37&msa=0&msid=215491296402946676738.000484ccfd83696d5b12e&z=11")));
        assertTrue(isGoogleMapsProfileUrl(new URL("https://maps.google.com/maps/ms?msa=0&msid=218347962219071576267.0004e1131e8ad4ef4fd9b")));
    }
}
TOP

Related Classes of slash.navigation.url.GoogleMapsUrlFormatTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.