Clover coverage report - Dependency Finder
Coverage timestamp: Mon Nov 29 2010 15:00:50 PST
file stats: LOC: 211   Methods: 9
NCLOC: 138   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
TestClassMatcher.java - 100% 100% 100%
coverage
 1    /*
 2    * Copyright (c) 2001-2009, Jean Tessier
 3    * All rights reserved.
 4    *
 5    * Redistribution and use in source and binary forms, with or without
 6    * modification, are permitted provided that the following conditions
 7    * are met:
 8    *
 9    * * Redistributions of source code must retain the above copyright
 10    * notice, this list of conditions and the following disclaimer.
 11    *
 12    * * Redistributions in binary form must reproduce the above copyright
 13    * notice, this list of conditions and the following disclaimer in the
 14    * documentation and/or other materials provided with the distribution.
 15    *
 16    * * Neither the name of Jean Tessier nor the names of his contributors
 17    * may be used to endorse or promote products derived from this software
 18    * without specific prior written permission.
 19    *
 20    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 21    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 22    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 23    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
 24    * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 25    * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 26    * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 27    * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 28    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 29    * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 30    * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 31    */
 32   
 33    package com.jeantessier.dependencyfinder.cli;
 34   
 35    import java.io.*;
 36    import java.util.*;
 37   
 38    import org.jmock.*;
 39    import org.jmock.integration.junit3.*;
 40   
 41    import com.jeantessier.classreader.*;
 42   
 43    public class TestClassMatcher extends MockObjectTestCase {
 44    public static final String TEST_CLASS = "test";
 45    public static final File TEST_FILE = new File(new File("classes"), "test.class");
 46    public static final File TEST_DIR = new File(new File("tests"), "JarJarDiff");
 47   
 48  1 public void testReadsGroupNameFromEndClassfileEvent() {
 49  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.<String>emptyList());
 50   
 51  1 String groupName1 = "groupName1";
 52  1 String filename1 = "filename1";
 53  1 String groupName2 = "groupName2";
 54  1 String filename2 = "filename2";
 55   
 56  1 final Classfile mockClassfile = mock(Classfile.class);
 57   
 58  1 checking(new Expectations() {{
 59  1 one (mockClassfile).getClassName();
 60    }});
 61   
 62  1 matcher.beginSession(new LoadEvent(this, null, null, null));
 63  1 matcher.beginGroup(new LoadEvent(this, groupName1, 1));
 64  1 matcher.beginFile(new LoadEvent(this, groupName1, filename1, null));
 65  1 matcher.beginClassfile(new LoadEvent(this, groupName1, filename1, null));
 66  1 matcher.endClassfile(new LoadEvent(this, groupName2, filename2, mockClassfile));
 67  1 matcher.endFile(new LoadEvent(this, groupName1, filename1, null));
 68  1 matcher.endGroup(new LoadEvent(this, groupName1, null, null));
 69  1 matcher.endSession(new LoadEvent(this, null, null, null));
 70   
 71  1 assertEquals("Number of results", 1, matcher.getResults().size());
 72  1 for (List<String> results : matcher.getResults().values()) {
 73  1 assertEquals("number results", 1, results.size());
 74  1 assertEquals("value", groupName2, results.get(0));
 75    }
 76    }
 77   
 78  1 public void testMatchNone() {
 79  1 ClassMatcher matcher = new ClassMatcher(Collections.<String>emptyList(), Collections.<String>emptyList());
 80   
 81  1 ClassfileLoader loader = new TransientClassfileLoader();
 82  1 loader.addLoadListener(matcher);
 83  1 loader.load(Collections.singleton(TEST_FILE.getPath()));
 84   
 85  1 assertEquals("Number of results", 0, matcher.getResults().size());
 86    }
 87   
 88  1 public void testMatchClassfile() {
 89  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.<String>emptyList());
 90   
 91  1 ClassfileLoader loader = new TransientClassfileLoader();
 92  1 loader.addLoadListener(matcher);
 93  1 loader.load(Collections.singleton(TEST_FILE.getPath()));
 94   
 95  1 assertEquals("Number of results", 1, matcher.getResults().size());
 96  1 assertEquals("key", TEST_CLASS, matcher.getResults().keySet().iterator().next());
 97  1 for (List<String> results : matcher.getResults().values()) {
 98  1 assertEquals("number results", 1, results.size());
 99  1 assertEquals("value", TEST_FILE.getPath(), results.get(0));
 100    }
 101    }
 102   
 103  1 public void testOneLevelJar() {
 104  1 File file = new File(TEST_DIR, "onelevel.jar");
 105  1 assertTrue(file + " missing", file.exists());
 106   
 107  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.<String>emptyList());
 108   
 109  1 ClassfileLoader loader = new TransientClassfileLoader();
 110  1 loader.addLoadListener(matcher);
 111  1 loader.load(Collections.singleton(file.getPath()));
 112   
 113  1 assertEquals("Number of results", 14, matcher.getResults().size());
 114  1 for (List<String> results : matcher.getResults().values()) {
 115  14 assertEquals("number results", 1, results.size());
 116  14 assertEquals("value", file.getPath(), results.get(0));
 117    }
 118    }
 119   
 120  1 public void testTwoLevelJar() {
 121  1 File file = new File(TEST_DIR, "twolevel.jar");
 122  1 assertTrue(file + " missing", file.exists());
 123   
 124  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.<String>emptyList());
 125   
 126  1 ClassfileLoader loader = new TransientClassfileLoader();
 127  1 loader.addLoadListener(matcher);
 128  1 loader.load(Collections.singleton(file.getPath()));
 129   
 130  1 assertEquals("Number of results", 14, matcher.getResults().size());
 131  1 for (List<String> results : matcher.getResults().values()) {
 132  14 assertEquals("number results", 1, results.size());
 133  14 assertEquals("value", "onelevel.zip", results.get(0));
 134    }
 135    }
 136   
 137  1 public void testMatchDirectory() {
 138  1 File dir = new File(TEST_DIR, "new");
 139  1 assertTrue(dir + " missing", dir.exists());
 140   
 141  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.<String>emptyList());
 142   
 143  1 ClassfileLoader loader = new TransientClassfileLoader();
 144  1 loader.addLoadListener(matcher);
 145  1 loader.load(Collections.singleton(dir.getPath()));
 146   
 147  1 assertEquals("Number of results", 14, matcher.getResults().size());
 148  1 for (List<String> results : matcher.getResults().values()) {
 149  14 assertEquals("number results", 1, results.size());
 150  14 assertEquals("value", dir.getPath(), results.get(0));
 151    }
 152    }
 153   
 154  1 public void testIncludes() {
 155  1 File dir = new File(TEST_DIR, "new");
 156  1 assertTrue(dir + " missing", dir.exists());
 157   
 158  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("/modified/i"), Collections.<String>emptyList());
 159   
 160  1 ClassfileLoader loader = new TransientClassfileLoader();
 161  1 loader.addLoadListener(matcher);
 162  1 loader.load(Collections.singleton(dir.getPath()));
 163   
 164  1 assertEquals("Number of results", 13, matcher.getResults().size());
 165  1 for (List<String> results : matcher.getResults().values()) {
 166  13 assertEquals("number results", 1, results.size());
 167  13 assertEquals("value", dir.getPath(), results.get(0));
 168    }
 169    }
 170   
 171  1 public void testExcludes() {
 172  1 File dir = new File(TEST_DIR, "new");
 173  1 assertTrue(dir + " missing", dir.exists());
 174   
 175  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.singletonList("/modified/i"));
 176   
 177  1 ClassfileLoader loader = new TransientClassfileLoader();
 178  1 loader.addLoadListener(matcher);
 179  1 loader.load(Collections.singleton(dir.getPath()));
 180   
 181  1 assertEquals("Number of results", 1, matcher.getResults().size());
 182  1 for (List<String> results : matcher.getResults().values()) {
 183  1 assertEquals("number results", 1, results.size());
 184  1 assertEquals("value", dir.getPath(), results.get(0));
 185    }
 186    }
 187   
 188  1 public void testMultiples() {
 189  1 File file1 = new File(TEST_DIR, "onelevel.zip");
 190  1 File file2 = new File(TEST_DIR, "onelevel.jar");
 191  1 assertTrue(file1 + " missing", file1.exists());
 192  1 assertTrue(file2 + " missing", file2.exists());
 193   
 194  1 Collection<String> filenames = new ArrayList<String>();
 195  1 filenames.add(file1.getPath());
 196  1 filenames.add(file2.getPath());
 197   
 198  1 ClassMatcher matcher = new ClassMatcher(Collections.singletonList("//"), Collections.<String>emptyList());
 199   
 200  1 ClassfileLoader loader = new TransientClassfileLoader();
 201  1 loader.addLoadListener(matcher);
 202  1 loader.load(filenames);
 203   
 204  1 assertEquals("Number of results", 14, matcher.getResults().size());
 205  1 for (List<String> results : matcher.getResults().values()) {
 206  14 assertEquals("number results", 2, results.size());
 207  14 assertEquals("value", file1.getPath(), results.get(0));
 208  14 assertEquals("value", file2.getPath(), results.get(1));
 209    }
 210    }
 211    }