001/*
002 *   Copyright (C) Christian Schulte, 2005-206
003 *   All rights reserved.
004 *
005 *   Redistribution and use in source and binary forms, with or without
006 *   modification, are permitted provided that the following conditions
007 *   are met:
008 *
009 *     o Redistributions of source code must retain the above copyright
010 *       notice, this list of conditions and the following disclaimer.
011 *
012 *     o Redistributions in binary form must reproduce the above copyright
013 *       notice, this list of conditions and the following disclaimer in
014 *       the documentation and/or other materials provided with the
015 *       distribution.
016 *
017 *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
018 *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
019 *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
020 *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
021 *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
022 *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
023 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
024 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
026 *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027 *
028 *   $JOMC: MergeModulesTaskTest.java 4613 2012-09-22 10:07:08Z schulte $
029 *
030 */
031package org.jomc.ant.test;
032
033import org.apache.tools.ant.BuildException;
034import org.apache.tools.ant.Project;
035import org.jomc.ant.MergeModulesTask;
036import org.jomc.ant.test.support.AntExecutionResult;
037import static org.jomc.ant.test.support.Assert.assertException;
038import static org.jomc.ant.test.support.Assert.assertExceptionMessage;
039import static org.jomc.ant.test.support.Assert.assertExceptionMessageContaining;
040import static org.jomc.ant.test.support.Assert.assertMessageLogged;
041import static org.jomc.ant.test.support.Assert.assertMessageLoggedContaining;
042import static org.jomc.ant.test.support.Assert.assertNoException;
043import org.junit.Test;
044import static org.junit.Assert.assertNotNull;
045import static org.junit.Assert.fail;
046
047/**
048 * Test cases for class {@code org.jomc.ant.MergeModulesTask}.
049 *
050 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
051 * @version $JOMC: MergeModulesTaskTest.java 4613 2012-09-22 10:07:08Z schulte $
052 */
053public class MergeModulesTaskTest extends JomcModelTaskTest
054{
055
056    /** Creates a new {@code MergeModulesTaskTest} instance. */
057    public MergeModulesTaskTest()
058    {
059        super();
060    }
061
062    /** {@inheritDoc} */
063    @Override
064    public MergeModulesTask getJomcTask()
065    {
066        return (MergeModulesTask) super.getJomcTask();
067    }
068
069    /** {@inheritDoc} */
070    @Override
071    protected MergeModulesTask newJomcTask()
072    {
073        return new MergeModulesTask();
074    }
075
076    /** {@inheritDoc} */
077    @Override
078    protected String getBuildFileName()
079    {
080        return "merge-modules-test.xml";
081    }
082
083    @Test
084    public final void testMissingModuleFile() throws Exception
085    {
086        final AntExecutionResult r = this.executeTarget( "test-missing-module-file" );
087        assertException( r, BuildException.class );
088        assertExceptionMessage( r, "Mandatory attribute 'moduleFile' is missing a value." );
089    }
090
091    @Test
092    public final void testMissingModuleName() throws Exception
093    {
094        final AntExecutionResult r = this.executeTarget( "test-missing-module-name" );
095        assertException( r, BuildException.class );
096        assertExceptionMessage( r, "Mandatory attribute 'moduleName' is missing a value." );
097    }
098
099    @Test
100    public final void testExclusionMissingModuleName() throws Exception
101    {
102        final AntExecutionResult r = this.executeTarget( "test-exclusion-missing-module-name" );
103        assertException( r, BuildException.class );
104        assertExceptionMessage( r, "Mandatory attribute 'name' is missing a value." );
105    }
106
107    @Test
108    public final void testInclusionMissingModuleName() throws Exception
109    {
110        final AntExecutionResult r = this.executeTarget( "test-inclusion-missing-module-name" );
111        assertException( r, BuildException.class );
112        assertExceptionMessage( r, "Mandatory attribute 'name' is missing a value." );
113    }
114
115    @Test
116    public final void testMergeModules() throws Exception
117    {
118        final AntExecutionResult r = this.executeTarget( "test-merge-modules" );
119        assertNoException( r );
120        assertMessageLoggedContaining( r, "Writing", Project.MSG_INFO );
121    }
122
123    @Test
124    public final void testMergeModulesWithNoopStylesheet() throws Exception
125    {
126        final AntExecutionResult r = this.executeTarget( "test-merge-modules-with-no-op-stylesheet" );
127        assertNoException( r );
128        assertMessageLoggedContaining( r, "Writing", Project.MSG_INFO );
129    }
130
131    @Test
132    public final void testMergeModulesWithRedundantResources() throws Exception
133    {
134        final AntExecutionResult r = this.executeTarget( "test-merge-modules-with-redundant-resources" );
135        assertNoException( r );
136        assertMessageLoggedContaining( r, "Writing", Project.MSG_INFO );
137    }
138
139    @Test
140    public final void testMergeModulesWithIllegalTransformationResultStylesheet() throws Exception
141    {
142        final AntExecutionResult r =
143            this.executeTarget( "test-merge-modules-with-illegal-transformation-result-stylesheet" );
144
145        assertException( r, BuildException.class );
146        assertExceptionMessageContaining( r, "Illegal transformation result" );
147    }
148
149    @Test
150    public final void testMergeModulesUnsupportedResource() throws Exception
151    {
152        final AntExecutionResult r = this.executeTarget( "test-merge-modules-unsupported-resource" );
153        assertNoException( r );
154        assertMessageLoggedContaining( r, "not supported.", Project.MSG_WARN );
155    }
156
157    @Test
158    public final void testMergeModulesExclusion() throws Exception
159    {
160        final AntExecutionResult r = this.executeTarget( "test-merge-modules-exclusion" );
161        assertNoException( r );
162        assertMessageLogged( r, "Excluding module 'JOMC Ant Tasks Tests'.", Project.MSG_INFO );
163    }
164
165    @Test
166    public final void testMergeModulesInclusion() throws Exception
167    {
168        final AntExecutionResult r = this.executeTarget( "test-merge-modules-inclusion" );
169        assertNoException( r );
170        assertMessageLogged( r, "Including module 'JOMC Ant Tasks Tests'.", Project.MSG_INFO );
171    }
172
173    @Test
174    public final void testMergeModulesAllAttributes() throws Exception
175    {
176        final AntExecutionResult r = this.executeTarget( "test-merge-modules-all-attributes" );
177        assertNoException( r );
178        assertMessageLoggedContaining( r, "Writing", Project.MSG_INFO );
179    }
180
181    @Test
182    public final void testIsModuleExcluded() throws Exception
183    {
184        try
185        {
186            this.getJomcTask().isModuleExcluded( null );
187            fail( "Expected 'NullPointerException' not thrown." );
188        }
189        catch ( final NullPointerException e )
190        {
191            assertNotNull( e.getMessage() );
192            System.out.println( e );
193        }
194    }
195
196    @Test
197    public final void testIsModuleIncluded() throws Exception
198    {
199        try
200        {
201            this.getJomcTask().isModuleIncluded( null );
202            fail( "Expected 'NullPointerException' not thrown." );
203        }
204        catch ( final NullPointerException e )
205        {
206            assertNotNull( e.getMessage() );
207            System.out.println( e );
208        }
209    }
210
211}