Package slash.navigation.base

Source Code of slash.navigation.base.ConvertBase

/*
    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.base;

import org.junit.Test;
import slash.navigation.babel.GarminMapSource6Format;
import slash.navigation.babel.MicrosoftAutoRouteFormat;
import slash.navigation.common.NavigationPosition;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

import static java.io.File.createTempFile;
import static org.junit.Assert.*;
import static slash.common.io.Files.getExtension;
import static slash.navigation.base.NavigationFormats.asFormat;
import static slash.navigation.base.NavigationFormats.getReadFormatsPreferredByExtension;
import static slash.navigation.base.NavigationTestCase.comparePositions;
import static slash.navigation.base.NavigationTestCase.compareRouteMetaData;
import static slash.navigation.base.RouteCharacteristics.Waypoints;

public abstract class ConvertBase {

    @Test
    public static void convertRoundtrip(String testFileName,
                                        BaseNavigationFormat sourceFormat,
                                        BaseNavigationFormat targetFormat) throws IOException {
        NavigationFormatParser parser = new NavigationFormatParser();

        assertTrue(sourceFormat.isSupportsReading());
        assertTrue(targetFormat.isSupportsWriting());

        File source = new File(testFileName);
        ParserResult result = parser.read(source, getReadFormatsPreferredByExtension(getExtension(testFileName)));
        assertNotNull("Cannot read route from " + source, result);
        assertTrue(result.isSuccessful());
        assertNotNull(result.getFormat());
        assertNotNull(result.getTheRoute());
        assertNotNull(result.getAllRoutes());
        assertTrue(result.getAllRoutes().size() > 0);

        // check append
        NavigationPosition sourcePosition = result.getTheRoute().getPositions().get(0);
        NavigationPosition targetPosition = asFormat(sourcePosition, targetFormat);
        assertNotNull(targetPosition);

        convertSingleRouteRoundtrip(sourceFormat, targetFormat, source, result.getTheRoute());

        if (targetFormat.isSupportsMultipleRoutes()) {
            convertMultipleRouteRoundtrip(sourceFormat, targetFormat, source, Collections.<BaseRoute>singletonList(result.getTheRoute()));
            convertMultipleRouteRoundtrip(sourceFormat, targetFormat, source, result.getAllRoutes());
        }
    }

    @SuppressWarnings("unchecked")
    private static void convertSingleRouteRoundtrip(BaseNavigationFormat sourceFormat, BaseNavigationFormat targetFormat, File source, BaseRoute sourceRoute) throws IOException {
        NavigationFormatParser parser = new NavigationFormatParser();

        File target = createTempFile("singletarget", targetFormat.getExtension());
        target.deleteOnExit();
        try {
            parser.write(sourceRoute, targetFormat, false, false, null, target);
            assertTrue(target.exists());

            ParserResult sourceResult = parser.read(source, getReadFormatsPreferredByExtension(getExtension(source)));
            assertNotNull(sourceResult);
            ParserResult targetResult = parser.read(target, getReadFormatsPreferredByExtension(getExtension(target)));
            assertNotNull(targetResult);

            assertEquals(sourceFormat.getClass(), sourceResult.getFormat().getClass());
            assertEquals(targetFormat.getClass(), targetResult.getFormat().getClass());
            assertEquals(sourceFormat.getName(), sourceResult.getFormat().getName());
            assertEquals(targetFormat.getName(), targetResult.getFormat().getName());

            compareRouteMetaData(sourceRoute, targetResult.getTheRoute());
            comparePositions(sourceRoute, sourceFormat, targetResult.getTheRoute(), targetFormat, targetResult.getAllRoutes().size() > 0);

            for (BaseRoute<BaseNavigationPosition, BaseNavigationFormat> targetRoute : targetResult.getAllRoutes()) {
                compareRouteMetaData(sourceRoute, targetRoute);
                comparePositions(sourceRoute, sourceFormat, targetRoute, targetFormat, targetResult.getAllRoutes().size() > 0);
            }

            assertTrue(target.exists());
            assertTrue(target.delete());
        } finally {
            // avoid to clutter the temp directory
            if (target.exists())
                assertTrue(target.delete());
        }
    }

    @SuppressWarnings("unchecked")
    private static void convertMultipleRouteRoundtrip(BaseNavigationFormat sourceFormat, BaseNavigationFormat targetFormat, File source, List<BaseRoute> sourceRoutes) throws IOException {
        NavigationFormatParser parser = new NavigationFormatParser();

        File target = createTempFile("multitarget", targetFormat.getExtension());
        target.deleteOnExit();
        try {
            parser.write(sourceRoutes, (MultipleRoutesFormat) targetFormat, target);
            assertTrue(target.exists());

            ParserResult sourceResult = parser.read(source, getReadFormatsPreferredByExtension(getExtension(source)));
            assertNotNull(sourceResult);
            assertTrue(sourceResult.isSuccessful());
            ParserResult targetResult = parser.read(target, getReadFormatsPreferredByExtension(getExtension(target)));
            assertNotNull(targetResult);
            assertTrue(targetResult.isSuccessful());

            assertEquals(sourceFormat.getClass(), sourceResult.getFormat().getClass());
            assertEquals(targetFormat.getClass(), targetResult.getFormat().getClass());
            assertEquals(sourceFormat.getName(), sourceResult.getFormat().getName());
            assertEquals(targetFormat.getName(), targetResult.getFormat().getName());

            compareRouteMetaData(sourceResult.getTheRoute(), targetResult.getTheRoute());

            for (int i = 0; i < targetResult.getAllRoutes().size(); i++) {
                BaseRoute<BaseNavigationPosition, BaseNavigationFormat> targetRoute = targetResult.getAllRoutes().get(i);
                BaseRoute sourceRoute = sourceResult.getAllRoutes().get(sourceFormat instanceof MicrosoftAutoRouteFormat ? 0 : i);
                // skip since first route is a list of all waypoints of all routes
                if (targetFormat instanceof GarminMapSource6Format && targetRoute.getCharacteristics().equals(Waypoints))
                    continue;
                compareRouteMetaData(sourceRoute, targetRoute);
                comparePositions(sourceRoute, sourceFormat, targetRoute, targetFormat, targetResult.getAllRoutes().size() > 1);
            }

            assertTrue(target.exists());
            assertTrue(target.delete());
        } finally {
            // avoid to clutter the temp directory
            if (target.exists())
                assertTrue(target.delete());
        }
    }
}
TOP

Related Classes of slash.navigation.base.ConvertBase

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.