All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.izforge.izpack.matcher.ZipMatcher Maven / Gradle / Ivy

There is a newer version: 5.2.3
Show newest version
package com.izforge.izpack.matcher;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.hamcrest.collection.IsCollectionContaining;
import org.hamcrest.core.Is;

/**
 * Matcher for zip files
 *
 * @author Anthonin Bonnefoy
 */
public class ZipMatcher extends TypeSafeMatcher
{
    private static final Logger logger = Logger.getLogger(ZipMatcher.class.getName());

    private Matcher> listMatcher;

    ZipMatcher(Matcher> matcher)
    {
        this.listMatcher = matcher;
    }

    @Override
    public boolean matchesSafely(ZipFile file)
    {
        try
        {
            List fileList = getFileNameListFromZip(file);
            // MatcherAssert.assertThat(fileList, listMatcher); // This prevents the use of IsNot. TODO
            boolean match = listMatcher.matches(fileList);
            if (logger.isLoggable(Level.FINE) && !match)
            {
                logger.fine("++++++++++++++++++++++++++++++++++++++");
                logger.fine("\nContents of zip file " + file.getName() + ":\n");
                for (String f : fileList) {
                  logger.fine("\t" + f);
                }
                logger.fine("\nMATCH: " + match + "\n");
                logger.fine("++++++++++++++++++++++++++++++++++++++");
            }
            return match;
        }
        catch (IOException e)
        {
            throw new AssertionError(e);
        }
    }


    public static List getFileNameListFromZip(ZipFile file)
            throws IOException
    {
        List entryList = new ArrayList();
        Enumeration zipEntries = file.entries();
        while (zipEntries.hasMoreElements()) {
          ZipEntry zipEntry = zipEntries.nextElement();
          entryList.add(zipEntry.getName());
        }
        return entryList;
    }

    @Override
    public void describeTo(Description description)
    {
        description.appendText("Expecting ").appendValue(listMatcher);
    }

    @Factory
    public static Matcher isZipContainingFile(String fileName)
    {
        return new ZipMatcher(IsCollectionContaining.hasItem(Is.is(fileName)));
    }

    @Factory
    public static Matcher isZipContainingFiles(String... fileNames)
    {
        return new ZipMatcher(IsCollectionContaining.hasItems(fileNames));
    }

    @Factory
    public static Matcher isZipMatching(Matcher> matcher)
    {
        return new ZipMatcher(matcher);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy