Package hudson.scm

Source Code of hudson.scm.DefaultSVNLogFilterTest

package hudson.scm;

import java.io.File;
import java.util.*;
import java.util.regex.Pattern;

import hudson.scm.subversion.UpdateUpdater;
import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.HudsonHomeLoader.CopyExisting;
import org.tmatesoft.svn.core.*;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNClientManager;

/**
* Tests the behavior of {@link DefaultSVNLogFilter}
*
*/
public class DefaultSVNLogFilterTest extends AbstractSubversionTest {

    String [] empty = {};
    Pattern [] noPatterns = {};
    @SuppressWarnings("unchecked")
    Set<String> noUsers = Collections.EMPTY_SET;
    SVNRepository svnRepo;
   
    public void setUp() throws Exception {
        super.setUp();
        File repo = new CopyExisting(DefaultSVNLogFilter.class.getResource("JENKINS-10449.zip")).allocate();
        SVNURL svnUrl = SVNURL.fromFile(repo);
        SVNClientManager svnMgr = SVNClientManager.newInstance();
        svnRepo = svnMgr.createRepository(svnUrl, false);
    }
   
    public void tearDown() throws Exception {
        svnRepo = null;
        super.tearDown();
    }
   
    private List<SVNLogEntry> doFilter(final SVNLogFilter logFilter) throws SVNException {
        final List<SVNLogEntry> log = new ArrayList<SVNLogEntry>();
        ISVNLogEntryHandler logGatherer = new ISVNLogEntryHandler() {
            public void handleLogEntry(SVNLogEntry logEntry) throws SVNException {
                if (logFilter.isIncluded(logEntry)) {
                    log.add(logEntry);
                }
            }
        };
        svnRepo.log(empty, 1, 5, true, false, logGatherer);
        return log;
    }
   
    private static Pattern [] compile(String ... regexes) {
        List<Pattern> patterns = new ArrayList<Pattern>();
        for (String re : regexes) {
            patterns.add(Pattern.compile(re));
        }
        return patterns.toArray(new Pattern [] {});
    }
   
    private static boolean containsRevs(List<SVNLogEntry> logs, long ... revs) {
        if (revs.length != logs.size())
            return false;
        nextrev: for (long r : revs) {
            for (SVNLogEntry l : logs) {
                if (r == l.getRevision());
                continue nextrev;
            }
            return false;
        }
        return true;
    }
   
    public void testNoExcludes() throws Exception {
       
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(noPatterns, noPatterns, noUsers, null, noPatterns, false);
        assertTrue(!filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 1, 2, 3, 4, 5));
    }
   
    public void testExcludes() throws Exception {
        Pattern [] excludes = compile("/z.*");
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(excludes, noPatterns, noUsers, null, noPatterns, false);

        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 1, 4));
    }
   
    public void testIncludes() throws Exception {
        Pattern [] includes = compile("/z.*");
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(noPatterns, includes, noUsers, null, noPatterns, false);
       
        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 2, 3, 5));
    }
   
    public void testBothIncludesAndExcludes() throws Exception {
        Pattern [] includes = compile("/z.*");
        Pattern [] excludes = compile("/z/a.*");
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(excludes, includes, noUsers, null, noPatterns, false);
       
        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 2, 5));
    }
   
    public void testExcludedUsers() throws Exception {
        Set<String> users = new HashSet<String>();
        users.add("brent");
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(noPatterns, noPatterns, users, null, noPatterns, false);
       
        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 1, 2, 3, 4));
    }
   
    public void testExcludedRevProp() throws Exception {
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(noPatterns, noPatterns, noUsers, "ignoreme", noPatterns, false);
       
        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 1, 2, 3, 4));
    }
   
    public void testExcludedCommitMessages() throws Exception {
        Pattern [] excludes = compile(".*pinned.*");
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(noPatterns, noPatterns, noUsers, null, excludes, false);
       
        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 1, 2, 3, 5));
    }
   
    public void testExcludedDirPropChanges() throws Exception {
        DefaultSVNLogFilter filter = new DefaultSVNLogFilter(noPatterns, noPatterns, noUsers, null, noPatterns, true);
       
        assertTrue(filter.hasExclusionRule());
       
        List<SVNLogEntry> entries = doFilter(filter);
        assertTrue(containsRevs(entries, 1, 2, 3));
    }

    @Bug(18099)
    public void testGlobalExclusionRevprop() throws Exception {
        SubversionSCM scm = new SubversionSCM(
                Arrays.asList(new SubversionSCM.ModuleLocation("file://some/repo", ".")),
                new UpdateUpdater(), null, null, null, null, null, null, false);
        scm.getDescriptor().setGlobalExcludedRevprop("ignoreme");

        SVNProperties p = new SVNProperties();
        p.put("ignoreme", "*");

        Map<String, SVNLogEntryPath> paths = new HashMap<String, SVNLogEntryPath>();
        paths.put("/foo", new SVNLogEntryPath("/foo", SVNLogEntryPath.TYPE_MODIFIED, null, -1));
        SVNLogEntry e = new SVNLogEntry(paths, 1234L, p, false);

        SVNLogFilter filter = scm.createSVNLogFilter();
        assertFalse(filter.isIncluded(e));
    }

}
TOP

Related Classes of hudson.scm.DefaultSVNLogFilterTest

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.