Package org.sonatype.maven.polyglot.ruby

Source Code of org.sonatype.maven.polyglot.ruby.AbstractInjectedTestCase

/**
* Copyright (c) 2012 to original author or authors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.sonatype.maven.polyglot.ruby;

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.maven.model.Model;
import org.apache.maven.model.building.ModelProcessor;
import org.apache.maven.model.io.ModelWriter;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
import org.eclipse.sisu.launch.InjectedTestCase;
import org.sonatype.maven.polyglot.PolyglotModelManager;
import org.sonatype.maven.polyglot.execute.ExecuteManagerImpl;
import org.sonatype.maven.polyglot.mapping.Mapping;

public abstract class AbstractInjectedTestCase extends InjectedTestCase {
   
  @Inject
  @Named("${basedir}/target/rubygems-provided/gems")
  protected File gems;

    @Inject
    @Named("${basedir}/src/test/poms")
    protected File poms;

  private File specs;
  private File specs()
  {
      if( specs == null)
      {
          File mavenTools = gems.listFiles( new FileFilter() {
       
                @Override
                public boolean accept( File f )
                {
                    return f.getName().startsWith( "maven-tools-" );
                }
            } )[ 0 ];
          specs = new File( mavenTools, "spec" );
      }
      return specs;
  }
 
    protected void assertModels( String pomRuby, boolean debug ) throws Exception {
               
        File dir = new File( specs(), pomRuby ).getParentFile();
        File pom = new File( dir, "pom.xml" );
        if( !pom.exists() ){
            pom = new File( dir.getParentFile(), "pom.xml" );
        }

        assertModels( pom, pomRuby, debug );
    }

    protected void assertModels( String pomXml, String pomRuby, boolean debug ) throws Exception {
        assertModels( new File( specs(), pomXml ), pomRuby, debug );
    }
   
    protected void assertModels( File pom, String pomRuby, boolean debug ) throws Exception {
        MavenXpp3Reader xmlModelReader = new MavenXpp3Reader();
        Model xmlModel = xmlModelReader.read(new FileInputStream( pom ));
               
        //
        // Read in the Ruby POM
        //
        RubyModelReader rubyModelReader = new RubyModelReader();
        final PolyglotModelManager modelManager = new PolyglotModelManager() {
            {
               mappings = new ArrayList<Mapping>();
            }
        };
        modelManager.addMapping( new RubyMapping() );
        rubyModelReader.executeManager = new ExecuteManagerImpl() {
            {
                log = new ConsoleLogger( Logger.LEVEL_INFO, "test" );
                manager = modelManager;
            }
        };
        rubyModelReader.setupManager = new SetupClassRealmRuby();

        File pomRubyFile =  new File( specs(), pomRuby );
        Reader reader = new FileReader( pomRubyFile );
        Map<String, Object> options = new HashMap<String, Object>();
        options.put( ModelProcessor.SOURCE, pomRubyFile.toURI().toURL() );
        Model rubyModel = rubyModelReader.read( reader, options );
       
        assertModels( xmlModel, rubyModel, debug );
    }

  protected void assertRoundtrip( String pomName, boolean debug ) throws Exception {
      File pom = new File( poms, pomName );
      MavenXpp3Reader xmlModelReader = new MavenXpp3Reader();
      Model xmlModel = xmlModelReader.read(new FileInputStream( pom ));
     
      //
      // Write out the Ruby POM
      //
      ModelWriter writer = new RubyModelWriter();
      StringWriter w = new StringWriter();
      writer.write( w, new HashMap<String, Object>(), xmlModel );
 
      if ( debug ){
        // Let's take a look at see what's there
        System.out.println(w.toString());
      }
     
      //
      // Read in the Ruby POM
      //
      RubyModelReader rubyModelReader = new RubyModelReader();
        final PolyglotModelManager modelManager = new PolyglotModelManager() {
            {
               mappings = new ArrayList<Mapping>();
            }
        };
        modelManager.addMapping( new RubyMapping() );
        rubyModelReader.executeManager = new ExecuteManagerImpl() {
            {
                log = new ConsoleLogger( Logger.LEVEL_INFO, "test" );
                manager = modelManager;
            }
        };
    rubyModelReader.setupManager = new SetupClassRealmRuby();
   
      StringReader reader = new StringReader( w.toString() );
      Model rubyModel = rubyModelReader.read( reader, new HashMap<String, Object>() );
     
      //
      // Test for fidelity
      //
      assertNotNull( rubyModel );
 
      assertModels( xmlModel, rubyModel, debug );
  }

  private void assertModels( Model xmlModel, Model rubyModel, boolean debug )
      throws IOException
  {
    MavenXpp3Writer xmlWriter = new MavenXpp3Writer();
      StringWriter ruby = new StringWriter();
      xmlWriter.write(ruby, rubyModel);
      StringWriter xml = new StringWriter();
      xmlWriter.write(xml, xmlModel);
     
      if ( debug )
      {
        // Let's take a look at see what's there
        System.out.println(xml.toString());
            System.out.println(ruby.toString());
      }
     
      assertEquals( simplify( xml, debug ), simplify( ruby, debug ) );
  }
 
  private String simplify( StringWriter xml, boolean debug )
  {
    String x = xml.toString().replaceAll( "\\s", "").replaceFirst("<\\?.*\\?>", "").replaceAll("<properties>.*?</properties>", "").replaceAll( "></(arg|chmod)>", "/>" );
        if ( debug )
        {
            System.out.println(x);
        }
    return x;
 
}
TOP

Related Classes of org.sonatype.maven.polyglot.ruby.AbstractInjectedTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.