001package org.apache.maven.scm;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import static org.hamcrest.Matchers.any;
023import static org.hamcrest.Matchers.is;
024
025import java.io.File;
026
027import org.hamcrest.Description;
028import org.hamcrest.Matcher;
029import org.hamcrest.TypeSafeMatcher;
030
031public class ChangeFileMatcher
032    extends TypeSafeMatcher<ChangeFile>
033{
034
035    private String fileName;
036
037    private Matcher<String> versionMatcher;
038
039    public ChangeFileMatcher( String fileName, Matcher<String> versionMatcher )
040    {
041        this.fileName = new File( fileName ).getPath();
042        this.versionMatcher = versionMatcher;
043    }
044
045    @Override
046    public boolean matchesSafely( ChangeFile changeFile )
047    {
048        return is( fileName ).matches( new File( changeFile.getName() ).getPath() );
049    }
050
051    public void describeTo( Description desc )
052    {
053        desc.appendText( "ChangeFile with name=" );
054        desc.appendValue( fileName );
055        desc.appendText( " and version matching " );
056        desc.appendDescriptionOf( versionMatcher );
057
058    }
059
060    public static Matcher<ChangeFile> changeFile( String fileName )
061    {
062        return new ChangeFileMatcher( fileName, any( String.class ) );
063    }
064
065    public static Matcher<ChangeFile> changeFile( String fileName, Matcher<String> versionMatcher )
066    {
067        return new ChangeFileMatcher( fileName, versionMatcher );
068    }
069}