GraphTest.java

package edu.hawaii.ics.yucheng;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Scanner;

import junit.framework.TestCase;

/**
 * Tests the Graph class.
 */
public class GraphTest extends TestCase {

    /**
     * Returns a URL to a sample graph.
     * 
     * @return A URL to a sample graph.
     */
    private static URL getUrl() {
        try {
            return new URL("http://www2.hawaii.edu/~yucheng/ics311/hw2/sample.graph");
        } catch (final MalformedURLException e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1a() throws Exception {
        try {
            new Graph(null, new ArrayList<Edge>());
            fail();
        } catch (final NullPointerException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1b() throws Exception {
        try {
            new Graph(new float[] {}, null);
            fail();
        } catch (final NullPointerException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1c() throws Exception {
        try {
            new Graph(new float[] {}, new ArrayList<Edge>());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1d() throws Exception {
        try {
            new Graph(new float[] { 0, 1 }, new ArrayList<Edge>());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1e() throws Exception {
        try {
            final ArrayList<Edge> edges = new ArrayList<Edge>();
            edges.add(null);
            new Graph(new float[] { 0, 1 }, edges);
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1f() throws Exception {
        try {
            final ArrayList<Edge> edges = new ArrayList<Edge>();
            edges.add(new Edge(0, 1));
            edges.add(new Edge(0, 1));
            new Graph(new float[] { 0, 1 }, edges);
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1g() throws Exception {
        try {
            final ArrayList<Edge> edges = new ArrayList<Edge>();
            edges.add(new Edge(0, 1));
            edges.add(new Edge(0, 2));
            edges.add(new Edge(1, 2));
            edges.add(new Edge(3, 4));
            new Graph(new float[] { 0, 1, 2, 3, 4 }, edges);
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor1h() throws Exception {
        final ArrayList<Edge> edges = new ArrayList<Edge>();
        edges.add(new Edge(0, 1));
        new Graph(new float[] { 0, 1 }, edges);
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2a() throws Exception {
        try {
            new Graph(null, getUrl());
            fail();
        } catch (final NullPointerException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2b() throws Exception {
        try {
            new Graph(new Scanner(""), null);
            fail();
        } catch (final NullPointerException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2c() throws Exception {
        try {
            new Graph(new Scanner("0"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2d() throws Exception {
        try {
            new Graph(new Scanner("2\n0"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2e() throws Exception {
        try {
            new Graph(new Scanner("2\n1\n1\t2\t3"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2f() throws Exception {
        try {
            new Graph(new Scanner("2\n2\n1\t2\n1,2\n1,2\n"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2g() throws Exception {
        try {
            new Graph(new Scanner("2\n2\n1\t2\n3,4\n"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2h() throws Exception {
        try {
            new Graph(new Scanner("2\n2\n1\t2\n1,3"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2i() throws Exception {
        try {
            new Graph(new Scanner("a"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2j() throws Exception {
        try {
            new Graph(new Scanner("5\n4\n0\t1\t2\t3\t4\n1,2\n1,3\n2,3\n4,5"),
                getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2k() throws Exception {
        try {
            new Graph(new Scanner("2\n1\n0\t1\n1,2\n\n\n2"), getUrl());
            fail();
        } catch (final GraphException e) {
            // This is expected.
        }
    }


    /**
     * Tests the constructor.
     * 
     * @throws Exception
     */
    public void testConstructor2l() throws Exception {
        new Graph(new Scanner("2\n1\n0\t1\n1,2\n\n\n"), getUrl());
    }


    /**
     * Tests the edgeAt method.
     * 
     * @throws Exception
     */
    public void testEdgeAt1() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        try {
            graph.edgeAt(2);
            fail();
        } catch (final IllegalArgumentException e) {
            // This is expected.
        }
    }


    /**
     * Tests the edgeAt method.
     * 
     * @throws Exception
     */
    public void testEdgeAt2() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        assertNotNull(graph.edgeAt(0));
        assertEquals(0, graph.edgeAt(0).first());
        assertEquals(1, graph.edgeAt(0).second());
    }


    /**
     * Tests the edges method.
     * 
     * @throws Exception
     */
    public void testEdges() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        assertEquals(1, graph.edges());
    }


    /**
     * Tests the iterator method.
     * 
     * @throws Exception
     */
    public void testIterator() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        for (final Edge e : graph) {
            assertNotNull(e);
            assertEquals(0, e.first());
            assertEquals(1, e.second());
        }
    }


    /**
     * Tests the toString method.
     * 
     * @throws Exception
     */
    public void testToString() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        assertEquals("V = { 0.0 1.0 }; E = { 1..2 }", graph.toString());
    }


    /**
     * Tests the url method.
     * 
     * @throws Exception
     */
    public void testUrl() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        assertEquals(getUrl(), graph.url());
    }


    /**
     * Tests the vertexAt method.
     * 
     * @throws Exception
     */
    public void testVertexAt1() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        try {
            graph.vertexAt(3);
            fail();
        } catch (final IllegalArgumentException e) {
            // This is expected.
        }
    }


    /**
     * Tests the vertexAt method.
     * 
     * @throws Exception
     */
    public void testVertexAt2() throws Exception {
        final Scanner scanner = new Scanner("2\n1\n0.1\t2.3\n1,2");
        final Graph graph = new Graph(scanner, getUrl());
        assertEquals(0.1, graph.vertexAt(0), 0.0001f);
        assertEquals(2.3, graph.vertexAt(1), 0.0001f);
    }


    /**
     * Tests the vertices method.
     * 
     * @throws Exception
     */
    public void testVertices() throws Exception {
        final Graph graph = new Graph(new Scanner("2\n1\n0\t1\n1,2"), getUrl());
        assertEquals(2, graph.vertices());
    }
}
Valid HTML 4.01 Valid CSS