/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.services.backend.whitelist; import java.util.ArrayList; import java.util.Set; import org.guvnor.common.services.project.model.POM; import org.guvnor.common.services.shared.metadata.model.Metadata; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.services.shared.project.KieProject; import org.kie.workbench.common.services.shared.project.KieProjectService; import org.kie.workbench.common.services.shared.whitelist.PackageNameWhiteListService; import org.kie.workbench.common.services.shared.whitelist.WhiteList; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.backend.vfs.Path; import org.uberfire.io.IOService; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * Test splitting text into lines originating from different platforms. * <p/> * A line is considered to be terminated by any one of a line feed ('\n'), * a carriage return ('\r'), or a carriage return followed immediately by * a linefeed. * <p/> * See See https://en.wikipedia.org/wiki/Newline#Representations **/ @RunWith(MockitoJUnitRunner.class) public class PackageNameWhiteListServiceImplTest { @Mock PackageNameSearchProvider packageNameSearchProvider; @Mock PackageNameWhiteListSaver saver; @Before public void setUp() throws Exception { when( packageNameSearchProvider.newTopLevelPackageNamesSearch( any( POM.class ) ) ).thenReturn( mock( PackageNameSearchProvider.PackageNameSearch.class ) ); } @Test public void ifWhiteListIsEmptyWhiteListEverything() throws Exception { final PackageNameWhiteListService packageNameWhiteListService = makeService( "" ); WhiteList filterPackageNames = packageNameWhiteListService.filterPackageNames( mock( KieProject.class ), new ArrayList<String> () {{ add( "a" ); add( "b" ); add( "c" ); }} ); assertEquals( 3, filterPackageNames.size() ); assertTrue( filterPackageNames.contains( "a" ) ); assertTrue( filterPackageNames.contains( "b" ) ); assertTrue( filterPackageNames.contains( "c" ) ); } @Test public void testWindowsEncoding() { final PackageNameWhiteListService packageNameWhiteListService = makeService( "a.**\r\nb\r\n" ); final Set<String> results = packageNameWhiteListService.filterPackageNames( mock( KieProject.class ), new ArrayList<String>() {{ add( "a" ); add( "b" ); add( "a.b" ); }} ); assertEquals( 3, results.size() ); assertContains( "a", results ); assertContains( "b", results ); assertContains( "a.b", results ); } @Test public void testSave() throws Exception { final PackageNameWhiteListService service = makeService( "" ); final Path path = mock( Path.class ); final WhiteList whiteList = new WhiteList(); final Metadata metadata = new Metadata(); final String comment = "comment"; service.save( path, whiteList, metadata, comment ); verify( saver ).save( path, whiteList, metadata, comment ); } @Test public void testUnixEncoding() { final PackageNameWhiteListService packageNameWhiteListService = makeService( "a.**\nb\n" ); final Set<String> results = packageNameWhiteListService.filterPackageNames( mock( KieProject.class ), new ArrayList<String>() {{ add( "a" ); add( "b" ); add( "a.b" ); }} ); assertEquals( 3, results.size() ); assertContains( "a", results ); assertContains( "b", results ); assertContains( "a.b", results ); } private void assertContains( final String expected, final Set<String> actual ) { for ( String a : actual ) { if ( expected.equals( a ) ) { return; } } fail( "Expected pattern '" + expected + "' was not found in actual." ); } private PackageNameWhiteListService makeService( final String content ) { return new PackageNameWhiteListServiceImpl( mock( IOService.class ), mock( KieProjectService.class ), new PackageNameWhiteListLoader( packageNameSearchProvider, mock( IOService.class ) ) { @Override protected String loadContent( final Path packageNamesWhiteListPath ) { return content; } }, saver ); } }