001    package org.apache.maven.project;
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    
022    import java.io.File;
023    import java.util.ArrayList;
024    import java.util.Arrays;
025    import java.util.List;
026    import java.util.Map;
027    import java.util.Properties;
028    
029    import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
030    import org.apache.maven.model.Plugin;
031    import org.apache.maven.model.PluginExecution;
032    import org.apache.maven.model.building.ModelBuildingRequest;
033    import org.apache.maven.project.harness.PomTestWrapper;
034    import org.apache.maven.repository.RepositorySystem;
035    import org.apache.maven.repository.internal.MavenRepositorySystemSession;
036    import org.codehaus.plexus.PlexusTestCase;
037    import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
038    
039    public class PomConstructionTest
040        extends PlexusTestCase
041    {
042        private static String BASE_DIR = "src/test";
043    
044        private static String BASE_POM_DIR = BASE_DIR + "/resources-project-builder";
045    
046        private static String BASE_MIXIN_DIR = BASE_DIR + "/resources-mixins";
047    
048        private DefaultProjectBuilder projectBuilder;
049        
050        private RepositorySystem repositorySystem;
051        
052        private File testDirectory;
053    
054        protected void setUp()
055            throws Exception
056        {
057            testDirectory = new File( getBasedir(), BASE_POM_DIR );
058            new File( getBasedir(), BASE_MIXIN_DIR );
059            projectBuilder = (DefaultProjectBuilder) lookup( ProjectBuilder.class );
060            repositorySystem = lookup( RepositorySystem.class );
061        }
062        
063        @Override
064        protected void tearDown()
065            throws Exception
066        {
067            projectBuilder = null;
068    
069            super.tearDown();
070        }
071        
072        /**
073         * Will throw exception if url is empty. MNG-4050 
074         *
075         * @throws Exception
076         */
077     
078        public void testEmptyUrl()
079            throws Exception
080        {
081            buildPom( "empty-distMng-repo-url" );
082        }
083    
084        /**
085         * Tests that modules is not overriden by profile
086         * 
087         * @throws Exception
088         */
089        /* MNG-786*/
090        public void testProfileModules()
091            throws Exception
092        {
093            PomTestWrapper pom = buildPom( "profile-module", "a" );
094            assertEquals( "test-prop", pom.getValue( "properties[1]/b" ) );// verifies profile applied
095            assertEquals( 4, ( (List<?>) pom.getValue( "modules" ) ).size() );
096            assertEquals( "module-2", pom.getValue( "modules[1]" ) );
097            assertEquals( "module-1", pom.getValue( "modules[2]" ) );
098            assertEquals( "module-3", pom.getValue( "modules[3]" ) );
099            assertEquals( "module-4", pom.getValue( "modules[4]" ) );
100        }
101    
102        /**
103         * Will throw exception if doesn't find parent(s) in build
104         *
105         * @throws Exception
106         */
107        public void testParentInheritance()
108            throws Exception
109        {
110            buildPom( "parent-inheritance/sub" );
111        }
112    
113        /*MNG-3995*/
114        public void testExecutionConfigurationJoin()
115           throws Exception
116        {
117            PomTestWrapper pom = buildPom( "execution-configuration-join" );
118            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/fileset[1]" ) ).size() );
119        }
120    
121        /*MNG-3803*/
122        public void testPluginConfigProperties()
123           throws Exception
124        {
125            PomTestWrapper pom = buildPom( "plugin-config-properties" );
126            assertEquals( "my.property", pom.getValue( "build/plugins[1]/configuration[1]/systemProperties[1]/property[1]/name" ) );
127        }
128        
129        /*MNG-3900*/
130        public void testProfilePropertiesInterpolation()
131            throws Exception 
132        {
133            PomTestWrapper pom = buildPom( "profile-properties-interpolation", "interpolation-profile" );
134            assertEquals( "PASSED", pom.getValue( "properties[1]/test" ) );
135            assertEquals( "PASSED", pom.getValue( "properties[1]/property" ) );
136        }
137    
138    
139        // Some better conventions for the test poms needs to be created and each of these tests
140        // that represent a verification of a specification item needs to be a couple lines at most.
141        // The expressions help a lot, but we need a clean to pick up a directory of POMs, automatically load
142        // them into a resolver, create the expression to extract the data to validate the Model, and the URI
143        // to validate the properties. We also need a way to navigate from the Tex specification documents to
144        // the test in question and vice versa. A little Eclipse plugin would do the trick.
145        public void testThatExecutionsWithoutIdsAreMergedAndTheChildWins()
146            throws Exception
147        {
148            PomTestWrapper tester = buildPom( "micromailer" );
149            assertModelEquals( tester, "child-descriptor", "build/plugins[1]/executions[1]/goals[1]" );
150        }
151    
152        /*MNG-
153        public void testDependencyScope()
154            throws Exception
155        {
156            PomTestWrapper pom = buildPom( "dependency-scope/sub" );
157    
158        }
159    
160        /*MNG- 4010*/
161        public void testDuplicateExclusionsDependency()
162            throws Exception
163        {
164            PomTestWrapper pom = buildPom( "duplicate-exclusions-dependency/sub" );
165            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies[1]/exclusions" ) ).size() );
166    
167        }
168    
169        /*MNG- 4008*/
170        public void testMultipleFilters()
171            throws Exception
172        {
173            PomTestWrapper pom = buildPom( "multiple-filters" );
174            assertEquals( 4, ( (List<?>) pom.getValue( "build/filters" ) ).size() );
175    
176        }
177    
178        /** MNG-4005: postponed to 3.1
179        public void testValidationErrorUponNonUniqueDependencyKey()
180            throws Exception
181        {
182            try
183            {
184                buildPom( "unique-dependency-key/deps" );
185                fail( "Non-unique dependency keys did not cause validation error" );
186            }
187            catch ( ProjectBuildingException e )
188            {
189                // expected
190            }
191        }
192    
193        public void testValidationErrorUponNonUniqueDependencyManagementKey()
194            throws Exception
195        {
196            try
197            {
198                buildPom( "unique-dependency-key/dep-mngt" );
199                fail( "Non-unique dependency keys did not cause validation error" );
200            }
201            catch ( ProjectBuildingException e )
202            {
203                // expected
204            }
205        }
206    
207        public void testValidationErrorUponNonUniqueDependencyKeyInProfile()
208            throws Exception
209        {
210            try
211            {
212                buildPom( "unique-dependency-key/deps-in-profile" );
213                fail( "Non-unique dependency keys did not cause validation error" );
214            }
215            catch ( ProjectBuildingException e )
216            {
217                // expected
218            }
219        }
220    
221        public void testValidationErrorUponNonUniqueDependencyManagementKeyInProfile()
222            throws Exception
223        {
224            try
225            {
226                buildPom( "unique-dependency-key/dep-mngt-in-profile" );
227                fail( "Non-unique dependency keys did not cause validation error" );
228            }
229            catch ( ProjectBuildingException e )
230            {
231                // expected
232            }
233        }
234        */
235    
236        public void testDuplicateDependenciesCauseLastDeclarationToBePickedInLenientMode()
237            throws Exception
238        {
239            PomTestWrapper pom = buildPom( "unique-dependency-key/deps", true, null );
240            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
241            assertEquals( "0.2", pom.getValue( "dependencies[1]/version" ) );
242        }
243    
244        /* MNG-3567*/
245        public void testParentInterpolation()
246            throws Exception
247        {
248            PomTestWrapper pom = buildPom( "parent-interpolation/sub" );
249            pom = new PomTestWrapper( pom.getMavenProject().getParent() );
250            assertEquals( "1.3.0-SNAPSHOT", pom.getValue( "build/plugins[1]/version" ) );
251        }
252    
253    /*
254        public void testMaven()
255            throws Exception
256        {
257            PomTestWrapper pom =  buildPomFromMavenProject( "maven-build/sub/pom.xml", null );
258      
259            for( String s: pom.getMavenProject().getTestClasspathElements() ) 
260            {
261                System.out.println( s );
262            }
263            
264        }
265        */
266        
267        /* MNG-3567*/
268        public void testPluginManagementInherited()
269            throws Exception
270        {
271            PomTestWrapper pom = buildPom( "pluginmanagement-inherited/sub" );
272            assertEquals( "1.0-alpha-21", pom.getValue( "build/plugins[1]/version" ) );
273        }
274    
275         /* MNG-2174*/
276        public void testPluginManagementDependencies()
277            throws Exception
278        {
279            PomTestWrapper pom = buildPom( "plugin-management-dependencies/sub", "test" );
280            assertEquals( "1.0-alpha-21", pom.getValue( "build/plugins[1]/version" ) );
281            assertEquals( "1.0", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
282        }
283    
284    
285        /* MNG-3877*/
286        public void testReportingInterpolation()
287            throws Exception
288        {
289            PomTestWrapper pom = buildPom( "reporting-interpolation" );
290            assertEquals( createPath( Arrays.asList( System.getProperty( "user.dir" ), "src", "test",
291                                                     "resources-project-builder", "reporting-interpolation", "target",
292                                                     "site" ) ), pom.getValue( "reporting/outputDirectory" ) );
293        }
294    
295    
296        public void testPluginOrder()
297            throws Exception
298        {
299            PomTestWrapper pom = buildPom( "plugin-order" );
300            assertEquals( "plexus-component-metadata", pom.getValue( "build/plugins[1]/artifactId" ) );
301            assertEquals( "maven-surefire-plugin", pom.getValue( "build/plugins[2]/artifactId" ) );
302        }
303    
304        public void testErroneousJoiningOfDifferentPluginsWithEqualDependencies()
305            throws Exception
306        {
307            PomTestWrapper pom = buildPom( "equal-plugin-deps" );
308            assertEquals( "maven-it-plugin-a", pom.getValue( "build/plugins[1]/artifactId" ) );
309            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
310            assertEquals( "maven-it-plugin-b", pom.getValue( "build/plugins[2]/artifactId" ) );
311            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
312        }
313    
314        /** MNG-3821 */
315        public void testErroneousJoiningOfDifferentPluginsWithEqualExecutionIds()
316            throws Exception
317        {
318            PomTestWrapper pom = buildPom( "equal-plugin-exec-ids" );
319            assertEquals( "maven-it-plugin-a", pom.getValue( "build/plugins[1]/artifactId" ) );
320            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
321            assertEquals( "maven-it-plugin-b", pom.getValue( "build/plugins[2]/artifactId" ) );
322            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
323            assertEquals( "maven-it-plugin-a", pom.getValue( "reporting/plugins[1]/artifactId" ) );
324            assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets" ) ).size() );
325            assertEquals( "maven-it-plugin-b", pom.getValue( "reporting/plugins[2]/artifactId" ) );
326            assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets" ) ).size() );
327        }
328    
329         /** MNG-3998 */
330        public void testExecutionConfiguration()
331            throws Exception
332        {
333            PomTestWrapper pom = buildPom( "execution-configuration" );
334            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
335            assertEquals( "src/main/mdo/nexus.xml",
336                          ( pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/model" ) ) );
337            assertEquals( "src/main/mdo/security.xml",
338                          ( pom.getValue( "build/plugins[1]/executions[2]/configuration[1]/model" ) ) );
339        }
340        
341        /*
342        public void testPluginConfigDuplicate()
343        throws Exception
344    {
345        PomTestWrapper pom = buildPom( "plugin-config-duplicate/dup" );
346    } 
347    */
348    
349    
350        public void testSingleConfigurationInheritance()
351            throws Exception
352        {
353            PomTestWrapper pom = buildPom( "single-configuration-inheritance" );
354    
355            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules" ) ).size() );
356            assertEquals( "2.0.6",
357                          pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules[1]/requireMavenVersion[1]/version" ) );
358            assertEquals( "[1.4,)",
359                          pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules[1]/requireJavaVersion[1]/version" ) );
360        }
361    
362        public void testConfigWithPluginManagement()
363            throws Exception
364        {
365            PomTestWrapper pom = buildPom( "config-with-plugin-mng" );
366            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
367            assertEquals( "src/main/mdo/security.xml", pom.getValue( "build/plugins[1]/executions[2]/configuration[1]/model" ) );
368            assertEquals( "1.0.8", pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/version" ) );
369        }
370    
371        /** MNG-3965 */
372        public void testExecutionConfigurationSubcollections()
373            throws Exception
374        {
375            PomTestWrapper pom = buildPom( "execution-configuration-subcollections" );
376            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules[1]/bannedDependencies" ) ).size() );
377        }
378    
379        /** MNG-3985 */
380        public void testMultipleRepositories()
381            throws Exception
382        {
383            PomTestWrapper pom = buildPom( "multiple-repos/sub" );
384            assertEquals( 3, ( (List<?>) pom.getValue( "repositories" ) ).size() );
385        }
386    
387        /** MNG-3965 */
388        public void testMultipleExecutionIds()
389            throws Exception
390        {
391            PomTestWrapper pom = buildPom( "dual-execution-ids/sub" );
392            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
393        }
394    
395        /** MNG-3997 */
396        public void testConsecutiveEmptyElements()
397            throws Exception
398        {
399            PomTestWrapper pom = buildPom( "consecutive_empty_elements" );
400        }
401    
402        public void testOrderOfGoalsFromPluginExecutionWithoutPluginManagement()
403            throws Exception
404        {
405            PomTestWrapper pom = buildPom( "plugin-exec-goals-order/wo-plugin-mngt" );
406            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
407            assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
408            assertEquals( "a", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
409            assertEquals( "d", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
410            assertEquals( "c", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
411            assertEquals( "e", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
412        }
413    
414        /* MNG-3886*/
415        public void testOrderOfGoalsFromPluginExecutionWithPluginManagement()
416            throws Exception
417        {
418            PomTestWrapper pom = buildPom( "plugin-exec-goals-order/w-plugin-mngt" );
419            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
420            assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
421            assertEquals( "a", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
422            assertEquals( "d", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
423            assertEquals( "c", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
424            assertEquals( "e", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
425        }
426    
427        public void testOrderOfPluginExecutionsWithoutPluginManagement()
428            throws Exception
429        {
430            PomTestWrapper pom = buildPom( "plugin-exec-order/wo-plugin-mngt" );
431            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
432            assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
433            assertEquals( "a", pom.getValue( "build/plugins[1]/executions[2]/id" ) );
434            assertEquals( "d", pom.getValue( "build/plugins[1]/executions[3]/id" ) );
435            assertEquals( "c", pom.getValue( "build/plugins[1]/executions[4]/id" ) );
436            assertEquals( "e", pom.getValue( "build/plugins[1]/executions[5]/id" ) );
437        }
438    
439        /* MNG-3887 */
440        public void testOrderOfPluginExecutionsWithPluginManagement()
441            throws Exception
442        {
443            PomTestWrapper pom = buildPom( "plugin-exec-order/w-plugin-mngt" );
444            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
445            assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
446            assertEquals( "a", pom.getValue( "build/plugins[1]/executions[2]/id" ) );
447            assertEquals( "d", pom.getValue( "build/plugins[1]/executions[3]/id" ) );
448            assertEquals( "c", pom.getValue( "build/plugins[1]/executions[4]/id" ) );
449            assertEquals( "e", pom.getValue( "build/plugins[1]/executions[5]/id" ) );
450        }
451    
452        public void testMergeOfPluginExecutionsWhenChildInheritsPluginVersion()
453            throws Exception
454        {
455            PomTestWrapper pom = buildPom( "plugin-exec-merging-wo-version/sub" );
456            assertEquals( 4, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
457        }
458    
459        /* MNG-3943*/
460        public void testMergeOfPluginExecutionsWhenChildAndParentUseDifferentPluginVersions()
461            throws Exception
462        {
463            PomTestWrapper pom = buildPom( "plugin-exec-merging-version-insensitive/sub" );
464            assertEquals( 4, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
465        }
466    
467    
468        public void testInterpolationWithXmlMarkup()
469            throws Exception
470        {
471            PomTestWrapper pom = buildPom( "xml-markup-interpolation" );
472            assertEquals( "<?xml version='1.0'?>Tom&Jerry", pom.getValue( "properties/xmlTest" ) );
473        }
474    
475        /* MNG-3925 */
476        public void testOrderOfMergedPluginExecutionsWithoutPluginManagement()
477            throws Exception
478        {
479            PomTestWrapper pom = buildPom( "merged-plugin-exec-order/wo-plugin-mngt/sub" );
480            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
481            assertEquals( "parent-1", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
482            assertEquals( "parent-2", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
483            assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[3]/goals[1]" ) );
484            assertEquals( "child-1", pom.getValue( "build/plugins[1]/executions[4]/goals[1]" ) );
485            assertEquals( "child-2", pom.getValue( "build/plugins[1]/executions[5]/goals[1]" ) );
486        }
487    
488        public void testOrderOfMergedPluginExecutionsWithPluginManagement()
489            throws Exception
490        {
491            PomTestWrapper pom = buildPom( "merged-plugin-exec-order/w-plugin-mngt/sub" );
492            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
493            assertEquals( "parent-1", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
494            assertEquals( "parent-2", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
495            assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[3]/goals[1]" ) );
496            assertEquals( "child-1", pom.getValue( "build/plugins[1]/executions[4]/goals[1]" ) );
497            assertEquals( "child-2", pom.getValue( "build/plugins[1]/executions[5]/goals[1]" ) );
498        }
499    
500        /* MNG-3984*/
501        public void testDifferentContainersWithSameId()
502            throws Exception
503        {
504            PomTestWrapper pom = buildPom( "join-different-containers-same-id" );
505            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
506            assertEquals( 1, ( (List<?>) pom.getValue( "build/pluginManagement/plugins[@artifactId='maven-it-plugin-b']/executions[1]/goals" ) ).size() );
507        }
508    
509        /* MNG-3937*/
510        public void testOrderOfMergedPluginExecutionGoalsWithoutPluginManagement()
511            throws Exception
512        {
513            PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/wo-plugin-mngt/sub" );
514    
515            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
516            assertEquals( "child-a", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
517            assertEquals( "merged", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
518            assertEquals( "child-b", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
519            assertEquals( "parent-b", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
520            assertEquals( "parent-a", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
521        }
522    
523        public void testOrderOfMergedPluginExecutionGoalsWithPluginManagement()
524            throws Exception
525        {
526            PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/w-plugin-mngt/sub" );
527            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
528            assertEquals( "child-a", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
529            assertEquals( "merged", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
530            assertEquals( "child-b", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
531            assertEquals( "parent-b", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
532            assertEquals( "parent-a", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
533        }
534    
535        /*MNG-3938*/
536        public void testOverridingOfInheritedPluginExecutionsWithoutPluginManagement()
537            throws Exception
538        {
539            PomTestWrapper pom = buildPom( "plugin-exec-merging/wo-plugin-mngt/sub" );
540            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
541            assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[@id='default']/phase" ) );
542            assertEquals( "child-non-default", pom.getValue( "build/plugins[1]/executions[@id='non-default']/phase" ) );
543        }
544    
545        /* MNG-3938 */
546        public void testOverridingOfInheritedPluginExecutionsWithPluginManagement()
547            throws Exception
548        {
549            PomTestWrapper pom = buildPom( "plugin-exec-merging/w-plugin-mngt/sub" );
550            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
551            assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[@id='default']/phase" ) );
552            assertEquals( "child-non-default", pom.getValue( "build/plugins[1]/executions[@id='non-default']/phase" ) );
553        }
554    
555    
556        /* MNG-3906*/
557        public void testOrderOfMergedPluginDependenciesWithoutPluginManagement()
558            throws Exception
559        {
560            PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/wo-plugin-mngt/sub" );
561    
562            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
563            assertNotNull( pom.getValue( "build/plugins[1]/dependencies[1]" ) );
564            assertEquals( "c", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
565            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
566            assertEquals( "a", pom.getValue( "build/plugins[1]/dependencies[2]/artifactId" ) );
567            assertEquals( "2", pom.getValue( "build/plugins[1]/dependencies[2]/version" ) );
568            assertEquals( "b", pom.getValue( "build/plugins[1]/dependencies[3]/artifactId" ) );
569            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[3]/version" ) );
570            assertEquals( "e", pom.getValue( "build/plugins[1]/dependencies[4]/artifactId" ) );
571            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[4]/version" ) );
572            assertEquals( "d", pom.getValue( "build/plugins[1]/dependencies[5]/artifactId" ) );
573            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[5]/version" ) );
574        }
575    
576        public void testOrderOfMergedPluginDependenciesWithPluginManagement()
577            throws Exception
578        {
579            PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/w-plugin-mngt/sub" );
580            assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
581            assertEquals( "c", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
582            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
583            assertEquals( "a", pom.getValue( "build/plugins[1]/dependencies[2]/artifactId" ) );
584            assertEquals( "2", pom.getValue( "build/plugins[1]/dependencies[2]/version" ) );
585            assertEquals( "b", pom.getValue( "build/plugins[1]/dependencies[3]/artifactId" ) );
586            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[3]/version" ) );
587            assertEquals( "e", pom.getValue( "build/plugins[1]/dependencies[4]/artifactId" ) );
588            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[4]/version" ) );
589            assertEquals( "d", pom.getValue( "build/plugins[1]/dependencies[5]/artifactId" ) );
590            assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[5]/version" ) );
591        }
592    
593        public void testInterpolationOfNestedBuildDirectories()
594            throws Exception
595        {
596            PomTestWrapper pom = buildPom( "nested-build-dir-interpolation" );
597            assertEquals( new File( pom.getBasedir(), "target/classes/dir0" ),
598                          new File( (String) pom.getValue( "properties/dir0" ) ) );
599            assertEquals( new File( pom.getBasedir(), "src/test/dir1" ),
600                          new File( (String) pom.getValue( "properties/dir1" ) ) );
601            assertEquals( new File( pom.getBasedir(), "target/site/dir2" ),
602                          new File( (String) pom.getValue( "properties/dir2" ) ) );
603        }
604    
605        public void testAppendArtifactIdOfChildToInheritedUrls()
606            throws Exception
607        {
608            PomTestWrapper pom = buildPom( "url-inheritance/sub" );
609            assertEquals( "http://parent.url/child", pom.getValue( "url" ) );
610            assertEquals( "http://parent.url/org", pom.getValue( "organization/url" ) );
611            assertEquals( "http://parent.url/license.txt", pom.getValue( "licenses[1]/url" ) );
612            assertEquals( "http://parent.url/viewvc/child", pom.getValue( "scm/url" ) );
613            assertEquals( "http://parent.url/scm/child", pom.getValue( "scm/connection" ) );
614            assertEquals( "https://parent.url/scm/child", pom.getValue( "scm/developerConnection" ) );
615            assertEquals( "http://parent.url/issues", pom.getValue( "issueManagement/url" ) );
616            assertEquals( "http://parent.url/ci", pom.getValue( "ciManagement/url" ) );
617            assertEquals( "http://parent.url/dist", pom.getValue( "distributionManagement/repository/url" ) );
618            assertEquals( "http://parent.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
619            assertEquals( "http://parent.url/site/child", pom.getValue( "distributionManagement/site/url" ) );
620            assertEquals( "http://parent.url/download", pom.getValue( "distributionManagement/downloadUrl" ) );
621        }
622    
623        /* MNG-3846*/
624        public void testAppendArtifactIdOfParentAndChildToInheritedUrls()
625            throws Exception
626        {
627            PomTestWrapper pom = buildPom( "url-inheritance/another-parent/sub" );
628            assertEquals( "http://parent.url/ap/child", pom.getValue( "url" ) );
629            assertEquals( "http://parent.url/org", pom.getValue( "organization/url" ) );
630            assertEquals( "http://parent.url/license.txt", pom.getValue( "licenses[1]/url" ) );
631            assertEquals( "http://parent.url/viewvc/ap/child", pom.getValue( "scm/url" ) );
632            assertEquals( "http://parent.url/scm/ap/child", pom.getValue( "scm/connection" ) );
633            assertEquals( "https://parent.url/scm/ap/child", pom.getValue( "scm/developerConnection" ) );
634            assertEquals( "http://parent.url/issues", pom.getValue( "issueManagement/url" ) );
635            assertEquals( "http://parent.url/ci", pom.getValue( "ciManagement/url" ) );
636            assertEquals( "http://parent.url/dist", pom.getValue( "distributionManagement/repository/url" ) );
637            assertEquals( "http://parent.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
638            assertEquals( "http://parent.url/site/ap/child", pom.getValue( "distributionManagement/site/url" ) );
639            assertEquals( "http://parent.url/download", pom.getValue( "distributionManagement/downloadUrl" ) );
640        }
641        //*/
642    
643        public void testNonInheritedElementsInSubtreesOverriddenByChild()
644            throws Exception
645        {
646            PomTestWrapper pom = buildPom( "limited-inheritance/child" );
647            assertEquals( null, pom.getValue( "organization/url" ) );
648            assertEquals( null, pom.getValue( "issueManagement/system" ) );
649            assertEquals( 0, ( (List<?>) pom.getValue( "ciManagement/notifiers" ) ).size() );
650            assertEquals( "child-distros", pom.getValue( "distributionManagement/repository/id" ) );
651            assertEquals( "ssh://child.url/distros", pom.getValue( "distributionManagement/repository/url" ) );
652            assertEquals( null, pom.getValue( "distributionManagement/repository/name" ) );
653            assertEquals( true, pom.getValue( "distributionManagement/repository/uniqueVersion" ) );
654            assertEquals( "default", pom.getValue( "distributionManagement/repository/layout" ) );
655            assertEquals( "child-snaps", pom.getValue( "distributionManagement/snapshotRepository/id" ) );
656            assertEquals( "ssh://child.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
657            assertEquals( null, pom.getValue( "distributionManagement/snapshotRepository/name" ) );
658            assertEquals( true, pom.getValue( "distributionManagement/snapshotRepository/uniqueVersion" ) );
659            assertEquals( "default", pom.getValue( "distributionManagement/snapshotRepository/layout" ) );
660            assertEquals( "child-site", pom.getValue( "distributionManagement/site/id" ) );
661            assertEquals( "scp://child.url/site", pom.getValue( "distributionManagement/site/url" ) );
662            assertEquals( null, pom.getValue( "distributionManagement/site/name" ) );
663        }
664    
665        public void testXmlTextCoalescing()
666            throws Exception
667        {
668            PomTestWrapper pom = buildPom( "xml-coalesce-text" );
669            assertEquals( "A  Test  Project Property", pom.getValue( "properties/prop0" ) );
670            assertEquals( "That's a test!", pom.getValue( "properties/prop1" ) );
671            assertEquals( 32 * 1024,
672                          pom.getValue( "properties/prop2" ).toString().trim().replaceAll( "[\n\r]", "" ).length() );
673        }
674    
675        public void testFullInterpolationOfNestedExpressions()
676            throws Exception
677        {
678            PomTestWrapper pom = buildPom( "full-interpolation" );
679            for ( int i = 0; i < 24; i++ )
680            {
681                String index = ( ( i < 10 ) ? "0" : "" ) + i;
682                assertEquals( "PASSED", pom.getValue( "properties/property" + index ) );
683            }
684        }
685    
686        public void testInterpolationOfLegacyExpressionsThatDontIncludeTheProjectPrefix()
687            throws Exception
688        {
689            PomTestWrapper pom = buildPom( "unprefixed-expression-interpolation/child" );
690    
691            assertEquals( pom.getBasedir(), new File( pom.getValue( "properties/projectDir" ).toString() ) );
692    
693            assertEquals( "org.apache.maven.its.mng3831.child", pom.getValue( "properties/projectGroupId" ) );
694            assertEquals( "child", pom.getValue( "properties/projectArtifactId" ) );
695            assertEquals( "2.0-alpha-1", pom.getValue( "properties/projectVersion" ) );
696            assertEquals( "jar", pom.getValue( "properties/projectPackaging" ) );
697    
698            assertEquals( "child-name", pom.getValue( "properties/projectName" ) );
699            assertEquals( "child-desc", pom.getValue( "properties/projectDesc" ) );
700            assertEquals( "http://child.org/", pom.getValue( "properties/projectUrl" ) );
701            assertEquals( "2008", pom.getValue( "properties/projectYear" ) );
702            assertEquals( "child-org-name", pom.getValue( "properties/projectOrgName" ) );
703    
704            assertEquals( "2.0.0", pom.getValue( "properties/projectPrereqMvn" ) );
705            assertEquals( "http://scm.org/", pom.getValue( "properties/projectScmUrl" ) );
706            assertEquals( "http://issue.org/", pom.getValue( "properties/projectIssueUrl" ) );
707            assertEquals( "http://ci.org/", pom.getValue( "properties/projectCiUrl" ) );
708            assertEquals( "child-dist-repo", pom.getValue( "properties/projectDistRepoName" ) );
709            assertEquals( "http://dist.org/", pom.getValue( "properties/projectDistRepoUrl" ) );
710            assertEquals( "http://site.org/", pom.getValue( "properties/projectDistSiteUrl" ) );
711    
712            assertEquals( "org.apache.maven.its.mng3831", pom.getValue( "properties/parentGroupId" ) );
713            assertEquals( "parent", pom.getValue( "properties/parentArtifactId" ) );
714            assertEquals( "1.0", pom.getValue( "properties/parentVersion" ) );
715    
716            assertTrue( pom.getValue( "properties/projectBuildOut" ).toString().endsWith( "bin" ) );
717            assertTrue( pom.getValue( "properties/projectSiteOut" ).toString().endsWith( "doc" ) );
718        }
719    
720        public void testInterpolationWithBasedirAlignedDirectories()
721            throws Exception
722        {
723            PomTestWrapper pom = buildPom( "basedir-aligned-interpolation" );
724            assertEquals( new File( pom.getBasedir(), "src/main/java" ),
725                          new File( pom.getValue( "properties/buildMainSrc" ).toString() ) );
726            assertEquals( new File( pom.getBasedir(), "src/test/java" ),
727                          new File( pom.getValue( "properties/buildTestSrc" ).toString() ) );
728            assertEquals( new File( pom.getBasedir(), "src/main/scripts" ),
729                          new File( pom.getValue( "properties/buildScriptSrc" ).toString() ) );
730            assertEquals( new File( pom.getBasedir(), "target" ),
731                          new File( pom.getValue( "properties/buildOut" ).toString() ) );
732            assertEquals( new File( pom.getBasedir(), "target/classes" ),
733                          new File( pom.getValue( "properties/buildMainOut" ).toString() ) );
734            assertEquals( new File( pom.getBasedir(), "target/test-classes" ),
735                          new File( pom.getValue( "properties/buildTestOut" ).toString() ) );
736            assertEquals( new File( pom.getBasedir(), "target/site" ),
737                          new File( pom.getValue( "properties/siteOut" ).toString() ) );
738        }
739    
740        /* MNG-3944*/
741        public void testInterpolationOfBasedirInPomWithUnusualName()
742            throws Exception
743        {
744            PomTestWrapper pom = buildPom( "basedir-interpolation/pom-with-unusual-name.xml" );
745            assertEquals( pom.getBasedir(), new File( pom.getValue( "properties/prop0" ).toString() ) );
746            assertEquals( pom.getBasedir(), new File( pom.getValue( "properties/prop1" ).toString() ) );
747        }
748    
749        /* MNG-3979 */
750        public void testJoiningOfContainersWhenChildHasEmptyElements()
751            throws Exception
752        {
753            PomTestWrapper pom = buildPom( "id-container-joining-with-empty-elements/sub" );
754            assertNotNull( pom );
755        }
756    
757        public void testOrderOfPluginConfigurationElementsWithoutPluginManagement()
758            throws Exception
759        {
760            PomTestWrapper pom = buildPom( "plugin-config-order/wo-plugin-mngt" );
761            assertEquals( "one", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[1]" ) );
762            assertEquals( "two", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[2]" ) );
763            assertEquals( "three", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[3]" ) );
764            assertEquals( "four", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[4]" ) );
765        }
766    
767        /* MNG-3827*/
768        public void testOrderOfPluginConfigurationElementsWithPluginManagement()
769            throws Exception
770        {
771            PomTestWrapper pom = buildPom( "plugin-config-order/w-plugin-mngt" );
772            assertEquals( "one", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[1]" ) );
773            assertEquals( "two", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[2]" ) );
774            assertEquals( "three", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[3]" ) );
775            assertEquals( "four", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[4]" ) );
776        }
777    
778        public void testOrderOfPluginExecutionConfigurationElementsWithoutPluginManagement()
779            throws Exception
780        {
781            PomTestWrapper pom = buildPom( "plugin-exec-config-order/wo-plugin-mngt" );
782            String prefix = "build/plugins[1]/executions[1]/configuration/";
783            assertEquals( "one", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
784            assertEquals( "two", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
785            assertEquals( "three", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
786            assertEquals( "four", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
787            assertEquals( "key1", pom.getValue( prefix + "propertiesParam/property[1]/name" ) );
788            assertEquals( "key2", pom.getValue( prefix + "propertiesParam/property[2]/name" ) );
789        }
790    
791        /* MNG-3864*/
792        public void testOrderOfPluginExecutionConfigurationElementsWithPluginManagement()
793            throws Exception
794        {
795            PomTestWrapper pom = buildPom( "plugin-exec-config-order/w-plugin-mngt" );
796            String prefix = "build/plugins[1]/executions[1]/configuration/";
797            assertEquals( "one", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
798            assertEquals( "two", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
799            assertEquals( "three", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
800            assertEquals( "four", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
801            assertEquals( "key1", pom.getValue( prefix + "propertiesParam/property[1]/name" ) );
802            assertEquals( "key2", pom.getValue( prefix + "propertiesParam/property[2]/name" ) );
803        }
804    
805        /* MNG-3836*/
806        public void testMergeOfInheritedPluginConfiguration()
807            throws Exception
808        {
809            PomTestWrapper pom = buildPom( "plugin-config-merging/child" );
810    
811            String prefix = "build/plugins[1]/configuration/";
812            assertEquals( "PASSED", pom.getValue( prefix + "propertiesFile" ) );
813            assertEquals( "PASSED", pom.getValue( prefix + "parent" ) );
814            assertEquals( "PASSED-1", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
815            assertEquals( "PASSED-3", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
816            assertEquals( "PASSED-2", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
817            assertEquals( "PASSED-4", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
818            assertEquals( "PASSED-1", pom.getValue( prefix + "listParam/listParam[1]" ) );
819            assertEquals( "PASSED-3", pom.getValue( prefix + "listParam/listParam[2]" ) );
820            assertEquals( "PASSED-2", pom.getValue( prefix + "listParam/listParam[3]" ) );
821            assertEquals( "PASSED-4", pom.getValue( prefix + "listParam/listParam[4]" ) );
822        }
823    
824        /* MNG-2591 */
825        public void testAppendOfInheritedPluginConfigurationWithNoProfile()
826            throws Exception
827        {
828            testAppendOfInheritedPluginConfiguration( "no-profile" );
829        }
830        
831        /* MNG-2591*/
832        public void testAppendOfInheritedPluginConfigurationWithActiveProfile()
833            throws Exception
834        {
835            testAppendOfInheritedPluginConfiguration( "with-profile" );
836        }
837     
838        private void testAppendOfInheritedPluginConfiguration( String test )
839            throws Exception
840        {
841            PomTestWrapper pom = buildPom( "plugin-config-append/" + test + "/subproject" );
842            String prefix = "build/plugins[1]/configuration/";
843            assertEquals( "PARENT-1", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
844            assertEquals( "PARENT-3", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
845            assertEquals( "PARENT-2", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
846            assertEquals( "PARENT-4", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
847            assertEquals( "CHILD-1", pom.getValue( prefix + "stringParams/stringParam[5]" ) );
848            assertEquals( "CHILD-3", pom.getValue( prefix + "stringParams/stringParam[6]" ) );
849            assertEquals( "CHILD-2", pom.getValue( prefix + "stringParams/stringParam[7]" ) );
850            assertEquals( "CHILD-4", pom.getValue( prefix + "stringParams/stringParam[8]" ) );
851            assertEquals( null, pom.getValue( prefix + "stringParams/stringParam[9]" ) );
852            assertEquals( "PARENT-1", pom.getValue( prefix + "listParam/listParam[1]" ) );
853            assertEquals( "PARENT-3", pom.getValue( prefix + "listParam/listParam[2]" ) );
854            assertEquals( "PARENT-2", pom.getValue( prefix + "listParam/listParam[3]" ) );
855            assertEquals( "PARENT-4", pom.getValue( prefix + "listParam/listParam[4]" ) );
856            assertEquals( "CHILD-1", pom.getValue( prefix + "listParam/listParam[5]" ) );
857            assertEquals( "CHILD-3", pom.getValue( prefix + "listParam/listParam[6]" ) );
858            assertEquals( "CHILD-2", pom.getValue( prefix + "listParam/listParam[7]" ) );
859            assertEquals( "CHILD-4", pom.getValue( prefix + "listParam/listParam[8]" ) );
860            assertEquals( null, pom.getValue( prefix + "listParam/listParam[9]" ) );
861        }
862    
863        /* MNG-4000 */
864        public void testMultiplePluginExecutionsWithAndWithoutIdsWithoutPluginManagement()
865            throws Exception
866        {
867            PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/wo-plugin-mngt" );
868            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
869            assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
870            assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
871        }
872    
873        public void testMultiplePluginExecutionsWithAndWithoutIdsWithPluginManagement()
874            throws Exception
875        {
876            PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/w-plugin-mngt" );
877            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
878            assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
879            assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
880        }
881    
882        public void testDependencyOrderWithoutPluginManagement()
883            throws Exception
884        {
885            PomTestWrapper pom = buildPom( "dependency-order/wo-plugin-mngt" );
886            assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
887            assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
888            assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
889            assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
890            assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
891        }
892    
893        public void testDependencyOrderWithPluginManagement()
894            throws Exception
895        {
896            PomTestWrapper pom = buildPom( "dependency-order/w-plugin-mngt" );
897            assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
898            assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
899            assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
900            assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
901            assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
902        }
903    
904        public void testBuildDirectoriesUsePlatformSpecificFileSeparator()
905            throws Exception
906        {
907            PomTestWrapper pom = buildPom( "platform-file-separator" );
908            assertPathWithNormalizedFileSeparators( pom.getValue( "build/directory" ) );
909            assertPathWithNormalizedFileSeparators( pom.getValue( "build/outputDirectory" ) );
910            assertPathWithNormalizedFileSeparators( pom.getValue( "build/testOutputDirectory" ) );
911            assertPathWithNormalizedFileSeparators( pom.getValue( "build/sourceDirectory" ) );
912            assertPathWithNormalizedFileSeparators( pom.getValue( "build/testSourceDirectory" ) );
913            assertPathWithNormalizedFileSeparators( pom.getValue( "build/resources[1]/directory" ) );
914            assertPathWithNormalizedFileSeparators( pom.getValue( "build/testResources[1]/directory" ) );
915            assertPathWithNormalizedFileSeparators( pom.getValue( "build/filters[1]" ) );
916            assertPathWithNormalizedFileSeparators( pom.getValue( "reporting/outputDirectory" ) );
917        }
918    
919        /* MNG-4008 */
920        public void testMergedFilterOrder()
921            throws Exception
922        {
923            PomTestWrapper pom = buildPom( "merged-filter-order/sub" );
924    
925            assertEquals( 7, ( (List<?>) pom.getValue( "build/filters" ) ).size() );
926            assertTrue( pom.getValue( "build/filters[1]" ).toString().endsWith( "child-a.properties" ) );
927            assertTrue( pom.getValue( "build/filters[2]" ).toString().endsWith( "child-c.properties" ) );
928            assertTrue( pom.getValue( "build/filters[3]" ).toString().endsWith( "child-b.properties" ) );
929            assertTrue( pom.getValue( "build/filters[4]" ).toString().endsWith( "child-d.properties" ) );
930            assertTrue( pom.getValue( "build/filters[5]" ).toString().endsWith( "parent-c.properties" ) );
931            assertTrue( pom.getValue( "build/filters[6]" ).toString().endsWith( "parent-b.properties" ) );
932            assertTrue( pom.getValue( "build/filters[7]" ).toString().endsWith( "parent-d.properties" ) );
933        }
934    
935        /** MNG-4027*/
936        public void testProfileInjectedDependencies()
937            throws Exception
938        {
939            PomTestWrapper pom = buildPom( "profile-injected-dependencies" );
940            assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
941            assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
942            assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
943            assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
944            assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
945        }
946        
947        /** IT-0021*/
948        public void testProfileDependenciesMultipleProfiles()
949            throws Exception
950        {
951            PomTestWrapper pom = buildPom( "profile-dependencies-multiple-profiles", "profile-1", "profile-2" );
952            assertEquals(2,  ( (List<?>) pom.getValue( "dependencies" ) ).size() );
953        }    
954    
955        public void testDependencyInheritance()
956            throws Exception
957        {
958            PomTestWrapper pom = buildPom( "dependency-inheritance/sub" );
959            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
960            assertEquals( "4.4", pom.getValue( "dependencies[1]/version" ) );
961        }
962    
963        /** MNG-4034 */
964        public void testManagedProfileDependency()
965            throws Exception
966        {
967            PomTestWrapper pom = this.buildPom( "managed-profile-dependency/sub", "maven-core-it" );
968            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
969            assertEquals( "org.apache.maven.its", pom.getValue( "dependencies[1]/groupId" ) );
970            assertEquals( "maven-core-it-support", pom.getValue( "dependencies[1]/artifactId" ) );
971            assertEquals( "1.3", pom.getValue( "dependencies[1]/version" ) );
972            assertEquals( "runtime", pom.getValue( "dependencies[1]/scope" ) );
973            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies[1]/exclusions" ) ).size() );
974            assertEquals( "commons-lang", pom.getValue( "dependencies[1]/exclusions[1]/groupId" ) );
975        }
976    
977        /** MNG-4040 */
978        public void testProfileModuleInheritance()
979            throws Exception
980        {
981            PomTestWrapper pom = this.buildPom( "profile-module-inheritance/sub", "dist" );
982            assertEquals( 0, ( (List<?>) pom.getValue( "modules" ) ).size() );
983        }
984        
985        /** MNG-3621 */
986        public void testUncPath()
987            throws Exception
988        {
989            PomTestWrapper pom = this.buildPom( "unc-path/sub" );
990            assertEquals( "file:////host/site/test-child", pom.getValue( "distributionManagement/site/url" ) );
991        }
992        
993        /** MNG-2006 */
994        public void testUrlAppendWithChildPathAdjustment()
995            throws Exception
996        {
997            PomTestWrapper pom = this.buildPom( "url-append/child" );
998            assertEquals( "http://project.url/child", pom.getValue( "url" ) );
999            assertEquals( "http://viewvc.project.url/child", pom.getValue( "scm/url" ) );
1000            assertEquals( "http://scm.project.url/child", pom.getValue( "scm/connection" ) );
1001            assertEquals( "https://scm.project.url/child", pom.getValue( "scm/developerConnection" ) );
1002            assertEquals( "http://site.project.url/child", pom.getValue( "distributionManagement/site/url" ) );
1003        } 
1004    
1005        /** MNG-0479 */
1006        public void testRepoInheritance()
1007            throws Exception
1008        {
1009            PomTestWrapper pom = this.buildPom( "repo-inheritance" );
1010            assertEquals( 1, ( (List<?>) pom.getValue( "repositories" ) ).size() );
1011            assertEquals( "it0043", pom.getValue( "repositories[1]/name" ) );
1012        }   
1013        
1014        public void testEmptyScm()
1015            throws Exception
1016        {
1017            PomTestWrapper pom = this.buildPom( "empty-scm" );
1018            assertNull( pom.getValue( "scm" ) );
1019        }       
1020        
1021        public void testPluginConfigurationUsingAttributesWithoutPluginManagement()
1022            throws Exception
1023        {
1024            PomTestWrapper pom = buildPom( "plugin-config-attributes/wo-plugin-mngt" );
1025            assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
1026            assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
1027            assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
1028            assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@todir" ) );
1029            assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@overwrite" ) );
1030        }
1031    
1032        /** MNG-4053*/
1033        public void testPluginConfigurationUsingAttributesWithPluginManagement()
1034            throws Exception
1035        {
1036            PomTestWrapper pom = buildPom( "plugin-config-attributes/w-plugin-mngt" );
1037            assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
1038            assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
1039            assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
1040            assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@todir" ) );
1041            assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@overwrite" ) );
1042        }
1043    
1044        public void testPluginConfigurationUsingAttributesWithPluginManagementAndProfile()
1045            throws Exception
1046        {
1047            PomTestWrapper pom = buildPom( "plugin-config-attributes/w-profile", "maven-core-it" );
1048            assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
1049            assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
1050            assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
1051            assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@todir" ) );
1052            assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@overwrite" ) );
1053        }
1054    
1055        public void testPomEncoding()
1056            throws Exception
1057        {
1058            PomTestWrapper pom = buildPom( "pom-encoding/utf-8" );
1059            assertEquals( "TEST-CHARS: \u00DF\u0131\u03A3\u042F\u05D0\u20AC", pom.getValue( "description" ) );
1060            pom = buildPom( "pom-encoding/latin-1" );
1061            assertEquals( "TEST-CHARS: \u00C4\u00D6\u00DC\u00E4\u00F6\u00FC\u00DF", pom.getValue( "description" ) );
1062        }
1063    
1064        /* MNG-4070 */
1065        public void testXmlWhitespaceHandling()
1066            throws Exception
1067        {
1068            PomTestWrapper pom = buildPom( "xml-whitespace/sub" );
1069            assertEquals( "org.apache.maven.its.mng4070", pom.getValue( "groupId" ) );
1070        }
1071    
1072        /* MNG-3760*/
1073        public void testInterpolationOfBaseUrl()
1074            throws Exception
1075        {
1076            PomTestWrapper pom = buildPom( "baseurl-interpolation/pom.xml" );
1077            assertEquals( pom.getBasedir().toURI().toString(), pom.getValue( "properties/prop1" ).toString() );
1078        }
1079    
1080        /* MNG-3811*/
1081        public void testReportingPluginConfig()
1082            throws Exception
1083        {
1084            PomTestWrapper pom = buildPom( "reporting-plugin-config/sub" );
1085    
1086            assertEquals( 2, ( (List<?>) pom.getValue( "reporting/plugins[1]/configuration/stringParams" ) ).size() );
1087            assertEquals( "parentParam", pom.getValue( "reporting/plugins[1]/configuration/stringParams[1]/stringParam[1]" ) );
1088            assertEquals( "childParam", pom.getValue( "reporting/plugins[1]/configuration/stringParams[1]/stringParam[2]" ) );
1089            assertEquals( "true", pom.getValue( "reporting/plugins[1]/configuration/booleanParam" ) );
1090        }    
1091        
1092        public void testPropertiesNoDuplication()
1093            throws Exception
1094        {
1095            PomTestWrapper pom = buildPom( "properties-no-duplication/sub" );       
1096            assertEquals( 1, ( (Properties) pom.getValue( "properties" ) ).size() );
1097            assertEquals( "child", pom.getValue( "properties/pomProfile" ) );
1098        }
1099    
1100        public void testPomInheritance()
1101            throws Exception
1102        {
1103            PomTestWrapper pom = buildPom( "pom-inheritance/sub" );
1104            assertEquals( "parent-description", pom.getValue( "description" ) );
1105            assertEquals( "jar", pom.getValue( "packaging" ) );
1106        }
1107    
1108        public void testCompleteModelWithoutParent()
1109            throws Exception
1110        {
1111            PomTestWrapper pom = buildPom( "complete-model/wo-parent" );
1112    
1113            testCompleteModel( pom );
1114        }
1115    
1116        public void testCompleteModelWithParent()
1117            throws Exception
1118        {
1119            PomTestWrapper pom = buildPom( "complete-model/w-parent/sub" );
1120    
1121            testCompleteModel( pom );
1122        }
1123    
1124        private void testCompleteModel( PomTestWrapper pom )
1125            throws Exception
1126        {
1127            assertEquals( "4.0.0", pom.getValue( "modelVersion" ) );
1128    
1129            assertEquals( "org.apache.maven.its.mng", pom.getValue( "groupId" ) );
1130            assertEquals( "test", pom.getValue( "artifactId" ) );
1131            assertEquals( "0.2", pom.getValue( "version" ) );
1132            assertEquals( "pom", pom.getValue( "packaging" ) );
1133    
1134            assertEquals( "project-name", pom.getValue( "name" ) );
1135            assertEquals( "project-description", pom.getValue( "description" ) );
1136            assertEquals( "http://project.url/", pom.getValue( "url" ) );
1137            assertEquals( "2009", pom.getValue( "inceptionYear" ) );
1138    
1139            assertEquals( "project-org", pom.getValue( "organization/name" ) );
1140            assertEquals( "http://project-org.url/", pom.getValue( "organization/url" ) );
1141    
1142            assertEquals( 1, ( (List<?>) pom.getValue( "licenses" ) ).size() );
1143            assertEquals( "project-license", pom.getValue( "licenses[1]/name" ) );
1144            assertEquals( "http://project.url/license", pom.getValue( "licenses[1]/url" ) );
1145            assertEquals( "repo", pom.getValue( "licenses[1]/distribution" ) );
1146            assertEquals( "free", pom.getValue( "licenses[1]/comments" ) );
1147    
1148            assertEquals( 1, ( (List<?>) pom.getValue( "developers" ) ).size() );
1149            assertEquals( "dev", pom.getValue( "developers[1]/id" ) );
1150            assertEquals( "project-developer", pom.getValue( "developers[1]/name" ) );
1151            assertEquals( "developer@", pom.getValue( "developers[1]/email" ) );
1152            assertEquals( "http://developer", pom.getValue( "developers[1]/url" ) );
1153            assertEquals( "developer", pom.getValue( "developers[1]/organization" ) );
1154            assertEquals( "http://devel.org", pom.getValue( "developers[1]/organizationUrl" ) );
1155            assertEquals( "-1", pom.getValue( "developers[1]/timezone" ) );
1156            assertEquals( "yes", pom.getValue( "developers[1]/properties/developer" ) );
1157            assertEquals( 1, ( (List<?>) pom.getValue( "developers[1]/roles" ) ).size() );
1158            assertEquals( "devel", pom.getValue( "developers[1]/roles[1]" ) );
1159    
1160            assertEquals( 1, ( (List<?>) pom.getValue( "contributors" ) ).size() );
1161            assertEquals( "project-contributor", pom.getValue( "contributors[1]/name" ) );
1162            assertEquals( "contributor@", pom.getValue( "contributors[1]/email" ) );
1163            assertEquals( "http://contributor", pom.getValue( "contributors[1]/url" ) );
1164            assertEquals( "contributor", pom.getValue( "contributors[1]/organization" ) );
1165            assertEquals( "http://contrib.org", pom.getValue( "contributors[1]/organizationUrl" ) );
1166            assertEquals( "+1", pom.getValue( "contributors[1]/timezone" ) );
1167            assertEquals( "yes", pom.getValue( "contributors[1]/properties/contributor" ) );
1168            assertEquals( 1, ( (List<?>) pom.getValue( "contributors[1]/roles" ) ).size() );
1169            assertEquals( "contrib", pom.getValue( "contributors[1]/roles[1]" ) );
1170    
1171            assertEquals( 1, ( (List<?>) pom.getValue( "mailingLists" ) ).size() );
1172            assertEquals( "project-mailing-list", pom.getValue( "mailingLists[1]/name" ) );
1173            assertEquals( "subscribe@", pom.getValue( "mailingLists[1]/subscribe" ) );
1174            assertEquals( "unsubscribe@", pom.getValue( "mailingLists[1]/unsubscribe" ) );
1175            assertEquals( "post@", pom.getValue( "mailingLists[1]/post" ) );
1176            assertEquals( "mail-archive", pom.getValue( "mailingLists[1]/archive" ) );
1177            assertEquals( 1, ( (List<?>) pom.getValue( "mailingLists[1]/otherArchives" ) ).size() );
1178            assertEquals( "other-archive", pom.getValue( "mailingLists[1]/otherArchives[1]" ) );
1179    
1180            assertEquals( "2.0.1", pom.getValue( "prerequisites/maven" ) );
1181    
1182            assertEquals( "http://project.url/trunk", pom.getValue( "scm/url" ) );
1183            assertEquals( "http://project.url/scm", pom.getValue( "scm/connection" ) );
1184            assertEquals( "https://project.url/scm", pom.getValue( "scm/developerConnection" ) );
1185            assertEquals( "TAG", pom.getValue( "scm/tag" ) );
1186    
1187            assertEquals( "issues", pom.getValue( "issueManagement/system" ) );
1188            assertEquals( "http://project.url/issues", pom.getValue( "issueManagement/url" ) );
1189    
1190            assertEquals( "ci", pom.getValue( "ciManagement/system" ) );
1191            assertEquals( "http://project.url/ci", pom.getValue( "ciManagement/url" ) );
1192            assertEquals( 1, ( (List<?>) pom.getValue( "ciManagement/notifiers" ) ).size() );
1193            assertEquals( "irc", pom.getValue( "ciManagement/notifiers[1]/type" ) );
1194            assertEquals( "ci@", pom.getValue( "ciManagement/notifiers[1]/address" ) );
1195            assertEquals( Boolean.TRUE, pom.getValue( "ciManagement/notifiers[1]/sendOnError" ) );
1196            assertEquals( Boolean.FALSE, pom.getValue( "ciManagement/notifiers[1]/sendOnFailure" ) );
1197            assertEquals( Boolean.FALSE, pom.getValue( "ciManagement/notifiers[1]/sendOnWarning" ) );
1198            assertEquals( Boolean.FALSE, pom.getValue( "ciManagement/notifiers[1]/sendOnSuccess" ) );
1199            assertEquals( "ci", pom.getValue( "ciManagement/notifiers[1]/configuration/ciProp" ) );
1200    
1201            assertEquals( "project.distros", pom.getValue( "distributionManagement/repository/id" ) );
1202            assertEquals( "distros", pom.getValue( "distributionManagement/repository/name" ) );
1203            assertEquals( "http://project.url/dist", pom.getValue( "distributionManagement/repository/url" ) );
1204            assertEquals( Boolean.TRUE, pom.getValue( "distributionManagement/repository/uniqueVersion" ) );
1205    
1206            assertEquals( "project.snaps", pom.getValue( "distributionManagement/snapshotRepository/id" ) );
1207            assertEquals( "snaps", pom.getValue( "distributionManagement/snapshotRepository/name" ) );
1208            assertEquals( "http://project.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
1209            assertEquals( Boolean.FALSE, pom.getValue( "distributionManagement/snapshotRepository/uniqueVersion" ) );
1210    
1211            assertEquals( "project.site", pom.getValue( "distributionManagement/site/id" ) );
1212            assertEquals( "docs", pom.getValue( "distributionManagement/site/name" ) );
1213            assertEquals( "http://project.url/site", pom.getValue( "distributionManagement/site/url" ) );
1214    
1215            assertEquals( "http://project.url/download", pom.getValue( "distributionManagement/downloadUrl" ) );
1216            assertEquals( "reloc-gid", pom.getValue( "distributionManagement/relocation/groupId" ) );
1217            assertEquals( "reloc-aid", pom.getValue( "distributionManagement/relocation/artifactId" ) );
1218            assertEquals( "reloc-version", pom.getValue( "distributionManagement/relocation/version" ) );
1219            assertEquals( "project-reloc-msg", pom.getValue( "distributionManagement/relocation/message" ) );
1220    
1221            assertEquals( 1, ( (List<?>) pom.getValue( "modules" ) ).size() );
1222            assertEquals( "sub", pom.getValue( "modules[1]" ) );
1223    
1224            assertEquals( 1, ( (Map<?, ?>) pom.getValue( "properties" ) ).size() );
1225            assertEquals( "project-property", pom.getValue( "properties[1]/itProperty" ) );
1226    
1227            assertEquals( 1, ( (List<?>) pom.getValue( "dependencyManagement/dependencies" ) ).size() );
1228            assertEquals( "org.apache.maven.its", pom.getValue( "dependencyManagement/dependencies[1]/groupId" ) );
1229            assertEquals( "managed-dep", pom.getValue( "dependencyManagement/dependencies[1]/artifactId" ) );
1230            assertEquals( "0.1", pom.getValue( "dependencyManagement/dependencies[1]/version" ) );
1231            assertEquals( "war", pom.getValue( "dependencyManagement/dependencies[1]/type" ) );
1232            assertEquals( "runtime", pom.getValue( "dependencyManagement/dependencies[1]/scope" ) );
1233            assertEquals( Boolean.FALSE, pom.getValue( "dependencyManagement/dependencies[1]/optional" ) );
1234            assertEquals( 1, ( (List<?>) pom.getValue( "dependencyManagement/dependencies[1]/exclusions" ) ).size() );
1235            assertEquals( "org.apache.maven.its",
1236                          pom.getValue( "dependencyManagement/dependencies[1]/exclusions[1]/groupId" ) );
1237            assertEquals( "excluded-managed-dep",
1238                          pom.getValue( "dependencyManagement/dependencies[1]/exclusions[1]/artifactId" ) );
1239    
1240            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
1241            assertEquals( "org.apache.maven.its", pom.getValue( "dependencies[1]/groupId" ) );
1242            assertEquals( "dep", pom.getValue( "dependencies[1]/artifactId" ) );
1243            assertEquals( "0.2", pom.getValue( "dependencies[1]/version" ) );
1244            assertEquals( "ejb", pom.getValue( "dependencies[1]/type" ) );
1245            assertEquals( "test", pom.getValue( "dependencies[1]/scope" ) );
1246            assertEquals( Boolean.TRUE, pom.getValue( "dependencies[1]/optional" ) );
1247            assertEquals( 1, ( (List<?>) pom.getValue( "dependencies[1]/exclusions" ) ).size() );
1248            assertEquals( "org.apache.maven.its", pom.getValue( "dependencies[1]/exclusions[1]/groupId" ) );
1249            assertEquals( "excluded-dep", pom.getValue( "dependencies[1]/exclusions[1]/artifactId" ) );
1250    
1251            assertEquals( 2, ( (List<?>) pom.getValue( "repositories" ) ).size() );
1252            assertEquals( "project-remote-repo", pom.getValue( "repositories[1]/id" ) );
1253            assertEquals( "http://project.url/remote", pom.getValue( "repositories[1]/url" ) );
1254            assertEquals( "repo", pom.getValue( "repositories[1]/name" ) );
1255            assertEquals( RepositorySystem.DEFAULT_REMOTE_REPO_ID, pom.getValue( "repositories[2]/id" ) );
1256            assertEquals( RepositorySystem.DEFAULT_REMOTE_REPO_URL, pom.getValue( "repositories[2]/url" ) );
1257    
1258            assertEquals( "test", pom.getValue( "build/defaultGoal" ) );
1259            assertEquals( "coreit", pom.getValue( "build/finalName" ) );
1260    
1261            assertPathSuffixEquals( "build", pom.getValue( "build/directory" ) );
1262            assertPathSuffixEquals( "build/main", pom.getValue( "build/outputDirectory" ) );
1263            assertPathSuffixEquals( "build/test", pom.getValue( "build/testOutputDirectory" ) );
1264            assertPathSuffixEquals( "sources/main", pom.getValue( "build/sourceDirectory" ) );
1265            assertPathSuffixEquals( "sources/test", pom.getValue( "build/testSourceDirectory" ) );
1266            assertPathSuffixEquals( "sources/scripts", pom.getValue( "build/scriptSourceDirectory" ) );
1267    
1268            assertEquals( 1, ( (List<?>) pom.getValue( "build/filters" ) ).size() );
1269            assertPathSuffixEquals( "src/main/filter/it.properties", pom.getValue( "build/filters[1]" ) );
1270    
1271            assertEquals( 1, ( (List<?>) pom.getValue( "build/resources" ) ).size() );
1272            assertPathSuffixEquals( "res/main", pom.getValue( "build/resources[1]/directory" ) );
1273            assertPathSuffixEquals( "main", pom.getValue( "build/resources[1]/targetPath" ) );
1274            assertEquals( Boolean.TRUE, pom.getValue( "build/resources[1]/filtering" ) );
1275            assertEquals( 1, ( (List<?>) pom.getValue( "build/resources[1]/includes" ) ).size() );
1276            assertPathSuffixEquals( "main.included", pom.getValue( "build/resources[1]/includes[1]" ) );
1277            assertEquals( 1, ( (List<?>) pom.getValue( "build/resources[1]/excludes" ) ).size() );
1278            assertPathSuffixEquals( "main.excluded", pom.getValue( "build/resources[1]/excludes[1]" ) );
1279    
1280            assertEquals( 1, ( (List<?>) pom.getValue( "build/testResources" ) ).size() );
1281            assertPathSuffixEquals( "res/test", pom.getValue( "build/testResources[1]/directory" ) );
1282            assertPathSuffixEquals( "test", pom.getValue( "build/testResources[1]/targetPath" ) );
1283            assertEquals( Boolean.TRUE, pom.getValue( "build/testResources[1]/filtering" ) );
1284            assertEquals( 1, ( (List<?>) pom.getValue( "build/testResources[1]/includes" ) ).size() );
1285            assertPathSuffixEquals( "test.included", pom.getValue( "build/testResources[1]/includes[1]" ) );
1286            assertEquals( 1, ( (List<?>) pom.getValue( "build/testResources[1]/excludes" ) ).size() );
1287            assertPathSuffixEquals( "test.excluded", pom.getValue( "build/testResources[1]/excludes[1]" ) );
1288    
1289            assertEquals( 1, ( (List<?>) pom.getValue( "build/extensions" ) ).size() );
1290            assertEquals( "org.apache.maven.its.ext", pom.getValue( "build/extensions[1]/groupId" ) );
1291            assertEquals( "ext", pom.getValue( "build/extensions[1]/artifactId" ) );
1292            assertEquals( "3.0", pom.getValue( "build/extensions[1]/version" ) );
1293    
1294            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
1295            assertEquals( "org.apache.maven.its.plugins", pom.getValue( "build/plugins[1]/groupId" ) );
1296            assertEquals( "maven-it-plugin-build", pom.getValue( "build/plugins[1]/artifactId" ) );
1297            assertEquals( "2.1-SNAPSHOT", pom.getValue( "build/plugins[1]/version" ) );
1298            assertEquals( "test.properties", pom.getValue( "build/plugins[1]/configuration/outputFile" ) );
1299            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
1300            assertEquals( "test", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
1301            assertEquals( "validate", pom.getValue( "build/plugins[1]/executions[1]/phase" ) );
1302            assertEquals( "pom.properties", pom.getValue( "build/plugins[1]/executions[1]/configuration/outputFile" ) );
1303            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
1304            assertEquals( "eval", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
1305            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
1306            assertEquals( "org.apache.maven.its", pom.getValue( "build/plugins[1]/dependencies[1]/groupId" ) );
1307            assertEquals( "build-plugin-dep", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
1308            assertEquals( "0.3", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
1309            assertEquals( "zip", pom.getValue( "build/plugins[1]/dependencies[1]/type" ) );
1310            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies[1]/exclusions" ) ).size() );
1311            assertEquals( "org.apache.maven.its", pom.getValue( "build/plugins[1]/dependencies[1]/exclusions[1]/groupId" ) );
1312            assertEquals( "excluded-build-plugin-dep",
1313                          pom.getValue( "build/plugins[1]/dependencies[1]/exclusions[1]/artifactId" ) );
1314    
1315            assertEquals( Boolean.TRUE, pom.getValue( "reporting/excludeDefaults" ) );
1316            assertPathSuffixEquals( "docs", pom.getValue( "reporting/outputDirectory" ) );
1317    
1318            assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins" ) ).size() );
1319            assertEquals( "org.apache.maven.its.plugins", pom.getValue( "reporting/plugins[1]/groupId" ) );
1320            assertEquals( "maven-it-plugin-reporting", pom.getValue( "reporting/plugins[1]/artifactId" ) );
1321            assertEquals( "2.0-SNAPSHOT", pom.getValue( "reporting/plugins[1]/version" ) );
1322            assertEquals( "test.html", pom.getValue( "reporting/plugins[1]/configuration/outputFile" ) );
1323            assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets" ) ).size() );
1324            assertEquals( "it", pom.getValue( "reporting/plugins[1]/reportSets[1]/id" ) );
1325            assertEquals( "index.html", pom.getValue( "reporting/plugins[1]/reportSets[1]/configuration/outputFile" ) );
1326            assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets[1]/reports" ) ).size() );
1327            assertEquals( "run", pom.getValue( "reporting/plugins[1]/reportSets[1]/reports[1]" ) );
1328        }
1329    
1330        /* MNG-2309*/
1331    
1332        public void testProfileInjectionOrder()
1333            throws Exception
1334        {
1335            PomTestWrapper pom =
1336                buildPom( "profile-injection-order", "pom-a", "pom-b", "pom-e", "pom-c", "pom-d" );
1337            assertEquals( "e", pom.getValue( "properties[1]/pomProperty" ) );
1338        }
1339    
1340        public void testPropertiesInheritance()
1341            throws Exception
1342        {
1343            PomTestWrapper pom = buildPom( "properties-inheritance/sub" );
1344            assertEquals( "parent-property", pom.getValue( "properties/parentProperty" ) );
1345            assertEquals( "child-property", pom.getValue( "properties/childProperty" ) );
1346            assertEquals( "child-override", pom.getValue( "properties/overriddenProperty" ) );
1347        }
1348    
1349        /* MNG-4102*/
1350        public void testInheritedPropertiesInterpolatedWithValuesFromChildWithoutProfiles()
1351            throws Exception
1352        {
1353            PomTestWrapper pom = buildPom( "inherited-properties-interpolation/no-profile/sub" );
1354    
1355            assertEquals( "CHILD", pom.getValue( "properties/overridden" ) );
1356            assertEquals( "CHILD", pom.getValue( "properties/interpolated" ) );
1357        }
1358    
1359        /* MNG-4102 */
1360        public void testInheritedPropertiesInterpolatedWithValuesFromChildWithActiveProfiles()
1361            throws Exception
1362        {
1363            PomTestWrapper pom = buildPom( "inherited-properties-interpolation/active-profile/sub" );
1364    
1365            assertEquals( 1, pom.getMavenProject().getModel().getProfiles().size() );
1366    
1367            buildPom( "inherited-properties-interpolation/active-profile/sub", "it-parent", "it-child" );
1368            assertEquals( "CHILD", pom.getValue( "properties/overridden" ) );
1369            assertEquals( "CHILD", pom.getValue( "properties/interpolated" ) );
1370        }
1371        
1372        /* MNG-3545 */
1373        public void testProfileDefaultActivation()
1374            throws Exception
1375        {
1376            PomTestWrapper pom = buildPom( "profile-default-deactivation", "profile4" );
1377            assertEquals( 1, pom.getMavenProject().getActiveProfiles().size() );
1378            assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
1379            assertEquals( "2.1", pom.getValue( "build/plugins[1]/version" ) );
1380        }    
1381        
1382        /* MNG-1995 */
1383        public void testBooleanInterpolation()
1384            throws Exception
1385        {
1386            PomTestWrapper pom = buildPom( "boolean-interpolation" );
1387            assertTrue ((Boolean) pom.getValue( "repositories[1]/releases/enabled" ) );     
1388            assertTrue((Boolean) pom.getValue( "build/resources[1]/filtering" ) ); 
1389        }    
1390    
1391        
1392        /* MNG-3899 */
1393        public void testBuildExtensionInheritance()
1394            throws Exception
1395        {
1396            PomTestWrapper pom = buildPom( "build-extension-inheritance/sub" ); 
1397            assertEquals( 3, ( (List<?>) pom.getValue( "build/extensions" ) ).size() );
1398            assertEquals( "b", pom.getValue( "build/extensions[1]/artifactId" ) );
1399            assertEquals( "a", pom.getValue( "build/extensions[2]/artifactId" ) );
1400            assertEquals( "0.2", pom.getValue( "build/extensions[2]/version" ) );
1401            assertEquals( "c", pom.getValue( "build/extensions[3]/artifactId" ) );
1402        }
1403        
1404        /*MNG-1957*/
1405        public void testJdkActivation()
1406            throws Exception
1407            {
1408            Properties props = new Properties();
1409            props.put( "java.version", "1.5.0_15" );
1410    
1411            PomTestWrapper pom = buildPom( "jdk-activation", props );
1412            assertEquals( 3, pom.getMavenProject().getActiveProfiles().size() );
1413            assertEquals( "PASSED", pom.getValue( "properties/jdkProperty3" ) );
1414            assertEquals( "PASSED", pom.getValue( "properties/jdkProperty2" ) );
1415            assertEquals( "PASSED", pom.getValue( "properties/jdkProperty1" ) );
1416            }   
1417        
1418        /* MNG-2174 */
1419        public void testProfilePluginMngDependencies()
1420            throws Exception
1421        {
1422            PomTestWrapper pom = buildPom( "profile-plugin-mng-dependencies/sub", "maven-core-it" );
1423            assertEquals( "a", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
1424        }    
1425        
1426        /** MNG-4116 */
1427        public void testPercentEncodedUrlsMustNotBeDecoded()
1428            throws Exception
1429        {
1430            PomTestWrapper pom = this.buildPom( "url-no-decoding" );
1431            assertEquals( "http://maven.apache.org/spacy%20path", pom.getValue( "url" ) );
1432            assertEquals( "http://svn.apache.org/viewvc/spacy%20path", pom.getValue( "scm/url" ) );
1433            assertEquals( "scm:svn:svn+ssh://svn.apache.org/spacy%20path", pom.getValue( "scm/connection" ) );
1434            assertEquals( "scm:svn:svn+ssh://svn.apache.org/spacy%20path", pom.getValue( "scm/developerConnection" ) );
1435            assertEquals( "http://issues.apache.org/spacy%20path", pom.getValue( "issueManagement/url" ) );
1436            assertEquals( "http://ci.apache.org/spacy%20path", pom.getValue( "ciManagement/url" ) );
1437            assertEquals( "scm:svn:svn+ssh://dist.apache.org/spacy%20path",
1438                          pom.getValue( "distributionManagement/repository/url" ) );
1439            assertEquals( "scm:svn:svn+ssh://snap.apache.org/spacy%20path",
1440                          pom.getValue( "distributionManagement/snapshotRepository/url" ) );
1441            assertEquals( "scm:svn:svn+ssh://site.apache.org/spacy%20path",
1442                          pom.getValue( "distributionManagement/site/url" ) );
1443        }    
1444    
1445        public void testPluginManagementInheritance()
1446            throws Exception
1447        {
1448            PomTestWrapper pom = this.buildPom( "plugin-management-inheritance" );
1449            assertEquals( "0.1-stub-SNAPSHOT",
1450                          pom.getValue( "build/pluginManagement/plugins[@artifactId='maven-compiler-plugin']/version" ) );
1451        }   
1452        
1453        public void testProfilePlugins()
1454                throws Exception
1455            {
1456            PomTestWrapper pom = this.buildPom( "profile-plugins", "standard" );
1457            assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
1458            assertEquals( "maven-assembly2-plugin", pom.getValue( "build/plugins[2]/artifactId" ) );
1459            }       
1460        
1461        public void testPluginInheritanceSimple()
1462                throws Exception
1463            {
1464            PomTestWrapper pom = this.buildPom( "plugin-inheritance-simple/sub" );
1465                assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );   
1466            } 
1467        
1468        public void testPluginManagementDuplicate()
1469                throws Exception
1470            {
1471            PomTestWrapper pom = this.buildPom( "plugin-management-duplicate/sub" );
1472            assertEquals( 12, ( (List<?>) pom.getValue( "build/pluginManagement/plugins" ) ).size() );
1473            } 
1474        
1475        public void testDistributionManagement()
1476                throws Exception
1477            {
1478            PomTestWrapper pom = this.buildPom( "distribution-management" );
1479            assertEquals( "legacy", pom.getValue( "distributionManagement/repository/layout" ) );
1480            }      
1481        
1482        public void testDependencyScopeInheritance()
1483                throws Exception
1484            {
1485            PomTestWrapper pom = buildPom( "dependency-scope-inheritance/sub" );
1486            String scope = (String) pom.getValue( "dependencies[1]/scope" );
1487            assertEquals( "compile", scope );
1488            }   
1489        
1490        public void testDependencyScope()
1491                throws Exception
1492            {
1493                PomTestWrapper pom = buildPom( "dependency-scope/sub" );
1494            }   
1495     
1496        //This will fail on a validation error if incorrect
1497        public void testDependencyManagementWithInterpolation()
1498                throws Exception
1499            {
1500                PomTestWrapper pom = buildPom( "dependency-management-with-interpolation/sub" );
1501            }   
1502    
1503        public void testInterpolationWithSystemProperty()
1504            throws Exception
1505        {
1506            Properties sysProps = new Properties();
1507            sysProps.setProperty( "system.property", "PASSED" );
1508            PomTestWrapper pom = buildPom( "sytem-property-interpolation", sysProps );
1509            assertEquals( "PASSED", pom.getValue( "name" ) );
1510        }    
1511    
1512        /* MNG-4129 */
1513        public void testPluginExecutionInheritanceWhenChildDoesNotDeclarePlugin()
1514            throws Exception
1515        {
1516            PomTestWrapper pom = buildPom( "plugin-exec-inheritance/wo-merge" );
1517            List<PluginExecution> executions =
1518                (List<PluginExecution>) pom.getValue( "build/pluginsAsMap[@name='org.apache.maven.its.plugins:maven-it-plugin-log-file']/executions" );
1519            assertEquals( 1, executions.size() );
1520            assertEquals( "inherited-execution", executions.get( 0 ).getId() );
1521        }
1522    
1523        public void testPluginExecutionInheritanceWhenChildDoesDeclarePluginAsWell()
1524            throws Exception
1525        {
1526            PomTestWrapper pom = buildPom( "plugin-exec-inheritance/w-merge" );
1527            List<PluginExecution> executions =
1528                (List<PluginExecution>) pom.getValue( "build/pluginsAsMap[@name='org.apache.maven.its.plugins:maven-it-plugin-log-file']/executions" );
1529            assertEquals( 1, executions.size() );
1530            assertEquals( "inherited-execution", executions.get( 0 ).getId() );
1531        }    
1532        
1533        /* MNG-4193 */
1534        public void testValidationErrorUponNonUniqueArtifactRepositoryId()
1535            throws Exception
1536        {
1537            try
1538            {
1539                buildPom( "unique-repo-id/artifact-repo" );
1540                fail( "Non-unique repository ids did not cause validation error" );
1541            }
1542            catch ( ProjectBuildingException e )
1543            {
1544                // expected
1545            }
1546        }
1547    
1548        /* MNG-4193 */
1549        public void testValidationErrorUponNonUniquePluginRepositoryId()
1550            throws Exception
1551        {
1552            try
1553            {
1554                buildPom( "unique-repo-id/plugin-repo" );
1555                fail( "Non-unique repository ids did not cause validation error" );
1556            }
1557            catch ( ProjectBuildingException e )
1558            {
1559                // expected
1560            }
1561        }
1562        
1563        /* MNG-4193 */
1564        public void testValidationErrorUponNonUniqueArtifactRepositoryIdInProfile()
1565            throws Exception
1566        {
1567            try
1568            {
1569                buildPom( "unique-repo-id/artifact-repo-in-profile" );
1570                fail( "Non-unique repository ids did not cause validation error" );
1571            }
1572            catch ( ProjectBuildingException e )
1573            {
1574                // expected
1575            }
1576        }
1577    
1578        /* MNG-4193 */
1579        public void testValidationErrorUponNonUniquePluginRepositoryIdInProfile()
1580            throws Exception
1581        {
1582            try
1583            {
1584                buildPom( "unique-repo-id/plugin-repo-in-profile" );
1585                fail( "Non-unique repository ids did not cause validation error" );
1586            }
1587            catch ( ProjectBuildingException e )
1588            {
1589                // expected
1590            }
1591        }
1592    
1593        /** MNG-3843 */
1594        public void testPrerequisitesAreNotInherited()
1595            throws Exception
1596        {
1597            PomTestWrapper pom = buildPom( "prerequisites-inheritance/child" );
1598            assertSame( null, pom.getValue( "prerequisites" ) );
1599        }    
1600    
1601        public void testLicensesAreInheritedButNotAggregated()
1602            throws Exception
1603        {
1604            PomTestWrapper pom = buildPom( "licenses-inheritance/child-2" );
1605            assertEquals( 1, ( (List<?>) pom.getValue( "licenses" ) ).size() );
1606            assertEquals( "child-license", pom.getValue( "licenses[1]/name" ) );
1607            assertEquals( "http://child.url/license", pom.getValue( "licenses[1]/url" ) );
1608        }    
1609    
1610        public void testDevelopersAreInheritedButNotAggregated()
1611            throws Exception
1612        {
1613            PomTestWrapper pom = buildPom( "developers-inheritance/child-2" );
1614            assertEquals( 1, ( (List<?>) pom.getValue( "developers" ) ).size() );
1615            assertEquals( "child-developer", pom.getValue( "developers[1]/name" ) );
1616        }
1617    
1618        public void testContributorsAreInheritedButNotAggregated()
1619            throws Exception
1620        {
1621            PomTestWrapper pom = buildPom( "contributors-inheritance/child-2" );
1622            assertEquals( 1, ( (List<?>) pom.getValue( "contributors" ) ).size() );
1623            assertEquals( "child-contributor", pom.getValue( "contributors[1]/name" ) );
1624        }    
1625    
1626        public void testMailingListsAreInheritedButNotAggregated()
1627            throws Exception
1628        {
1629            PomTestWrapper pom = buildPom( "mailing-lists-inheritance/child-2" );
1630            assertEquals( 1, ( (List<?>) pom.getValue( "mailingLists" ) ).size() );
1631            assertEquals( "child-mailing-list", pom.getValue( "mailingLists[1]/name" ) );
1632        }    
1633    
1634        public void testPluginInheritanceOrder()
1635            throws Exception
1636        {
1637            PomTestWrapper pom = buildPom( "plugin-inheritance-order/child" );
1638    
1639            assertEquals( "maven-it-plugin-log-file", pom.getValue( "build/plugins[1]/artifactId" ) );
1640            assertEquals( "maven-it-plugin-expression", pom.getValue( "build/plugins[2]/artifactId" ) );
1641            assertEquals( "maven-it-plugin-configuration", pom.getValue( "build/plugins[3]/artifactId" ) );
1642    
1643            assertEquals( "maven-it-plugin-log-file", pom.getValue( "reporting/plugins[1]/artifactId" ) );
1644            assertEquals( "maven-it-plugin-expression", pom.getValue( "reporting/plugins[2]/artifactId" ) );
1645            assertEquals( "maven-it-plugin-configuration", pom.getValue( "reporting/plugins[3]/artifactId" ) );
1646        }
1647    
1648        public void testCliPropsDominateProjectPropsDuringInterpolation()
1649            throws Exception
1650        {
1651            Properties props = new Properties();
1652            props.setProperty( "testProperty", "PASSED" );
1653            PomTestWrapper pom = buildPom( "interpolation-cli-wins", props );
1654    
1655            assertEquals( "PASSED", pom.getValue( "properties/interpolatedProperty" ) );
1656        }
1657    
1658        public void testParentPomPackagingMustBePom()
1659            throws Exception
1660        {
1661            try
1662            {
1663                buildPom( "parent-pom-packaging/sub" );
1664                fail( "Wrong packaging of parent POM was not rejected" );
1665            }
1666            catch ( ProjectBuildingException e )
1667            {
1668                // expected
1669            }
1670        }
1671    
1672        /** MNG-522, MNG-3018 */
1673        public void testManagedPluginConfigurationAppliesToImplicitPluginsIntroducedByPackaging()
1674            throws Exception
1675        {
1676            PomTestWrapper pom = buildPom( "plugin-management-for-implicit-plugin/child" );
1677            assertEquals( "passed.txt",
1678                          pom.getValue( "build/plugins[@artifactId='maven-resources-plugin']/configuration/pathname" ) );
1679            assertEquals( "passed.txt",
1680                          pom.getValue( "build/plugins[@artifactId='maven-it-plugin-log-file']/configuration/logFile" ) );
1681        }
1682    
1683        public void testDefaultPluginsExecutionContributedByPackagingExecuteBeforeUserDefinedExecutions()
1684            throws Exception
1685        {
1686            PomTestWrapper pom = buildPom( "plugin-exec-order-and-default-exec" );
1687            List<PluginExecution> executions =
1688                (List<PluginExecution>) pom.getValue( "build/plugins[@artifactId='maven-resources-plugin']/executions" );
1689            assertNotNull( executions );
1690            assertEquals( 4, executions.size() );
1691            assertEquals( "default-resources", executions.get( 0 ).getId() );
1692            assertEquals( "default-testResources", executions.get( 1 ).getId() );
1693            assertEquals( "test-1", executions.get( 2 ).getId() );
1694            assertEquals( "test-2", executions.get( 3 ).getId() );
1695        }
1696    
1697        public void testPluginDeclarationsRetainPomOrderAfterInjectionOfDefaultPlugins()
1698            throws Exception
1699        {
1700            PomTestWrapper pom = buildPom( "plugin-exec-order-with-lifecycle" );
1701            List<Plugin> plugins = (List<Plugin>) pom.getValue( "build/plugins" );
1702            int resourcesPlugin = -1;
1703            int customPlugin = -1;
1704            for ( int i = 0; i < plugins.size(); i++ )
1705            {
1706                Plugin plugin = plugins.get( i );
1707                if ( "maven-resources-plugin".equals( plugin.getArtifactId() ) )
1708                {
1709                    assertTrue( resourcesPlugin < 0 );
1710                    resourcesPlugin = i;
1711                }
1712                else if ( "maven-it-plugin-log-file".equals( plugin.getArtifactId() ) )
1713                {
1714                    assertTrue( customPlugin < 0 );
1715                    customPlugin = i;
1716                }
1717            }
1718            assertTrue( plugins.toString(), customPlugin == resourcesPlugin - 1 );
1719        }
1720    
1721        /** MNG-4415 */
1722        public void testPluginOrderAfterMergingWithInheritedPlugins()
1723            throws Exception
1724        {
1725            PomTestWrapper pom = buildPom( "plugin-inheritance-merge-order/sub" );
1726    
1727            List<String> expected = new ArrayList<String>();
1728            expected.add( "maven-it-plugin-error" );
1729            expected.add( "maven-it-plugin-configuration" );
1730            expected.add( "maven-it-plugin-dependency-resolution" );
1731            expected.add( "maven-it-plugin-packaging" );
1732            expected.add( "maven-it-plugin-log-file" );
1733            expected.add( "maven-it-plugin-expression" );
1734            expected.add( "maven-it-plugin-fork" );
1735            expected.add( "maven-it-plugin-touch" );
1736    
1737            List<String> actual = new ArrayList<String>();
1738            for ( Plugin plugin : (List<Plugin>) pom.getValue( "build/plugins" ) )
1739            {
1740                actual.add( plugin.getArtifactId() );
1741            }
1742    
1743            actual.retainAll( expected );
1744    
1745            assertEquals( actual, expected );
1746        }
1747    
1748        /** MNG-4416 */
1749        public void testPluginOrderAfterMergingWithInjectedPlugins()
1750            throws Exception
1751        {
1752            PomTestWrapper pom = buildPom( "plugin-injection-merge-order" );
1753    
1754            List<String> expected = new ArrayList<String>();
1755            expected.add( "maven-it-plugin-error" );
1756            expected.add( "maven-it-plugin-configuration" );
1757            expected.add( "maven-it-plugin-dependency-resolution" );
1758            expected.add( "maven-it-plugin-packaging" );
1759            expected.add( "maven-it-plugin-log-file" );
1760            expected.add( "maven-it-plugin-expression" );
1761            expected.add( "maven-it-plugin-fork" );
1762            expected.add( "maven-it-plugin-touch" );
1763    
1764            List<String> actual = new ArrayList<String>();
1765            for ( Plugin plugin : (List<Plugin>) pom.getValue( "build/plugins" ) )
1766            {
1767                actual.add( plugin.getArtifactId() );
1768            }
1769    
1770            actual.retainAll( expected );
1771    
1772            assertEquals( actual, expected );
1773        }
1774    
1775        public void testProjectArtifactIdIsNotInheritedButMandatory()
1776            throws Exception
1777        {
1778            try
1779            {
1780                buildPom( "artifact-id-inheritance/child" );
1781                fail( "Missing artifactId did not cause validation error" );
1782            }
1783            catch ( ProjectBuildingException e )
1784            {
1785                // expected
1786            }
1787        }
1788    
1789        private void assertPathSuffixEquals( String expected, Object actual )
1790        {
1791            String a = actual.toString();
1792            a = a.substring( a.length() - expected.length() ).replace( '\\', '/' );
1793            assertEquals( expected, a );
1794        }
1795    
1796        private void assertPathWithNormalizedFileSeparators( Object value )
1797        {
1798            assertEquals( new File( value.toString() ).getPath(), value.toString() );
1799        }
1800        
1801        private PomTestWrapper buildPom( String pomPath, String... profileIds )
1802            throws ProjectBuildingException
1803        {
1804            return buildPom( pomPath, null, profileIds );
1805        }
1806    
1807        private PomTestWrapper buildPom( String pomPath, Properties executionProperties, String... profileIds )
1808            throws ProjectBuildingException
1809        {
1810            return buildPom( pomPath, false, executionProperties, profileIds );
1811        }
1812    
1813        private PomTestWrapper buildPom( String pomPath, boolean lenientValidation, Properties executionProperties,
1814                                         String... profileIds )
1815            throws ProjectBuildingException
1816        {
1817            File pomFile = new File( testDirectory, pomPath );
1818            if ( pomFile.isDirectory() )
1819            {
1820                pomFile = new File( pomFile, "pom.xml" );
1821            }
1822    
1823            ProjectBuildingRequest config = new DefaultProjectBuildingRequest();
1824    
1825            String localRepoUrl =
1826                System.getProperty( "maven.repo.local", System.getProperty( "user.home" ) + "/.m2/repository" );
1827            localRepoUrl = "file://" + localRepoUrl;
1828            config.setLocalRepository( repositorySystem.createArtifactRepository( "local", localRepoUrl, new DefaultRepositoryLayout(), null, null ) );
1829            config.setActiveProfileIds( Arrays.asList( profileIds ) );
1830            config.setSystemProperties( executionProperties );
1831            config.setUserProperties( executionProperties );
1832            config.setValidationLevel( lenientValidation ? ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0
1833                            : ModelBuildingRequest.VALIDATION_LEVEL_STRICT );
1834            MavenRepositorySystemSession repoSession = new MavenRepositorySystemSession();
1835            repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManager(
1836                                                                                     new File(
1837                                                                                               config.getLocalRepository().getBasedir() ) ) );
1838            config.setRepositorySession( repoSession );
1839    
1840            return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ).getProject() );
1841        }
1842    
1843        protected void assertModelEquals( PomTestWrapper pom, Object expected, String expression )
1844        {
1845            assertEquals( expected, pom.getValue( expression ) );        
1846        }
1847    
1848        private static String createPath( List<String> elements )
1849        {
1850            StringBuilder buffer = new StringBuilder( 256 );
1851            for ( String s : elements )
1852            {
1853                buffer.append( s ).append( File.separator );
1854            }
1855            return buffer.toString().substring( 0, buffer.toString().length() - 1 );
1856        }
1857    }