/* * 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.drools.workbench.services.verifier.core.checks; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Set; import com.google.gwtmockito.GwtMockitoTestRunner; import org.drools.workbench.services.verifier.api.client.configuration.AnalyzerConfiguration; import org.drools.workbench.services.verifier.api.client.configuration.RunnerType; import org.drools.workbench.services.verifier.api.client.index.Rule; import org.drools.workbench.services.verifier.api.client.reporting.CheckType; import org.drools.workbench.services.verifier.api.client.reporting.Issue; import org.drools.workbench.services.verifier.api.client.reporting.Severity; import org.drools.workbench.services.verifier.core.cache.RuleInspectorCache; import org.drools.workbench.services.verifier.core.cache.inspectors.RuleInspector; import org.drools.workbench.services.verifier.core.checks.base.Check; import org.drools.workbench.services.verifier.core.checks.base.CheckFactory; import org.drools.workbench.services.verifier.core.checks.base.CheckRunManager; import org.drools.workbench.services.verifier.core.checks.base.CheckStorage; import org.drools.workbench.services.verifier.core.checks.base.SingleCheck; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class CheckRunManagerTest { @Spy private CheckRunManager checkRunManager = new CheckRunManager( RunnerType.JAVA ); @Mock private RuleInspectorCache cache; private RuleInspector ruleInspector1; private RuleInspector ruleInspector2; private RuleInspector ruleInspector3; private ArrayList<RuleInspector> ruleInspectors; private CheckStorage checkStorage; private AnalyzerConfiguration configuration; @Before public void setUp() throws Exception { configuration = new AnalyzerConfigurationMock(); checkStorage = new CheckStorage( new CheckFactory( configuration ) { @Override public HashSet<Check> makeSingleChecks( final RuleInspector ruleInspector ) { final HashSet<Check> result = new HashSet<>(); result.add( new MockSingleCheck( ruleInspector ) ); return result; } } ); ruleInspectors = new ArrayList<>(); when( cache.all() ).thenReturn( ruleInspectors ); ruleInspector1 = mockRowInspector( 1 ); ruleInspectors.add( ruleInspector1 ); ruleInspector2 = mockRowInspector( 2 ); ruleInspectors.add( ruleInspector2 ); ruleInspector3 = mockRowInspector( 3 ); ruleInspectors.add( ruleInspector3 ); checkRunManager.addChecks( ruleInspector1.getChecks() ); checkRunManager.addChecks( ruleInspector2.getChecks() ); checkRunManager.addChecks( ruleInspector3.getChecks() ); } @Test public void testChecksGetGenerated() throws Exception { assertEquals( 5, ruleInspector1.getChecks() .size() ); assertEquals( 5, ruleInspector2.getChecks() .size() ); assertEquals( 5, ruleInspector3.getChecks() .size() ); } @Test public void testRemove() throws Exception { this.checkRunManager.remove( ruleInspector2 ); final Set<Check> checks = ruleInspector1.getChecks(); assertEquals( 3, checks.size() ); assertTrue( ruleInspector2.getChecks() .isEmpty() ); assertEquals( 3, ruleInspector3.getChecks() .size() ); } @Test public void testRunTests() throws Exception { for ( RuleInspector ruleInspector : cache.all() ) { assertNoIssues( ruleInspector ); } this.checkRunManager.run( null, null ); for ( RuleInspector ruleInspector : cache.all() ) { assertHasIssues( ruleInspector ); } } @Test public void testOnlyTestChanges() throws Exception { // First run this.checkRunManager.run( null, null ); RuleInspector newRuleInspector = mockRowInspector( 3 ); ruleInspectors.add( newRuleInspector ); this.checkRunManager.addChecks( newRuleInspector.getChecks() ); assertNoIssues( newRuleInspector ); // Second run this.checkRunManager.run( null, null ); assertHasIssues( newRuleInspector ); assertEquals( 7, ruleInspector1.getChecks() .size() ); assertEquals( 7, newRuleInspector.getChecks() .size() ); } private RuleInspector mockRowInspector( final int rowNumber ) { return new RuleInspector( new Rule( rowNumber, configuration ), checkStorage, cache, mock( AnalyzerConfiguration.class ) ); } private void assertHasIssues( final RuleInspector ruleInspector ) { for ( final Check check : ruleInspector.getChecks() ) { assertTrue( check.hasIssues() ); } } private void assertNoIssues( final RuleInspector ruleInspector ) { for ( final Check check : ( ruleInspector.getChecks() ) ) { assertFalse( check.hasIssues() ); } } private class MockSingleCheck extends SingleCheck { public MockSingleCheck( RuleInspector ruleInspector ) { super( ruleInspector, CheckRunManagerTest.this.configuration, CheckType.REDUNDANT_ROWS ); } @Override public boolean check() { return hasIssues = true; } @Override protected Severity getDefaultSeverity() { return Severity.NOTE; } @Override protected Issue makeIssue( final Severity severity, final CheckType checkType ) { return new Issue( severity, checkType, Collections.emptySet() ); } } }