Package sharpen.ui.tests

Source Code of sharpen.ui.tests.AbstractConversionTestCase

/* Copyright (C) 2004 - 2008  Versant Inc.  http://www.db4o.com

This file is part of the sharpen open source java to c# translator.

sharpen is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published
by the Free Software Foundation and as clarified by db4objects' GPL
interpretation policy, available at
http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
Suite 350, San Mateo, CA 94403, USA.

sharpen is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */

package sharpen.ui.tests;

import java.io.*;

import junit.framework.*;

import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jdt.core.*;

import sharpen.core.*;
import sharpen.core.framework.resources.SimpleProject;
import sharpen.core.framework.resources.WorkspaceUtilities;

public abstract class AbstractConversionTestCase extends TestCase {

  protected JavaProject _project;

  protected void setUp() throws Exception {
    Sharpen.getDefault().configuration(configuration());
    _project = new JavaProject();   
  }

  protected void tearDown() throws Exception {
    _project.dispose();
  }
 
  protected Configuration configuration() {
    return ConfigurationFactory.defaultConfiguration();
  }

  /**
   * @param resource
   * @return
   * @throws CoreException
   * @throws IOException
   */
  protected ICompilationUnit createCompilationUnit(TestCaseResource resource) throws CoreException, IOException {
    return _project.createCompilationUnit(resource.packageName(), resource.javaFileName(), resource.actualStringContents());
  }
 
  protected ICompilationUnit createCompilationUnit(IPackageFragmentRoot srcFolder, TestCaseResource resource) throws CoreException, IOException {
    return _project.createCompilationUnit(srcFolder, resource.packageName(), resource.javaFileName(), resource.actualStringContents());
  }
 
  protected void runResourceTestCase(String resourceName) throws Throwable {   
    runResourceTestCase(getConfiguration(), resourceName);
  }

  protected void runResourceTestCase(final Configuration configuration, String resourceName) throws CoreException, IOException {
    runResourceTestCase(configuration, resourceName, resourceName);
  }
 
  protected void runResourceTestCase(final Configuration configuration, String originalResourceName, String expectedResourceName) throws CoreException, IOException {
    TestCaseResource resource = new TestCaseResource(originalResourceName, expectedResourceName);   
    resource.assertExpectedContent(sharpenResource(configuration, resource));
  }

  protected String sharpenResource(final Configuration configuration,
      TestCaseResource resource) throws CoreException, IOException {
    ICompilationUnit cu = createCompilationUnit(resource);
 
    StandaloneConverter converter = new StandaloneConverter(configuration);
    converter.setSource(cu);
    converter.setTargetWriter(new StringWriter());
    converter.run();
   
    return converter.getTargetWriter().toString();
  }
 
  protected Configuration getConfiguration() {
    return newConfiguration();
  }

  private Configuration newConfiguration() {
    return ConfigurationFactory.defaultConfiguration();
  }

  protected Configuration newPascalCaseIdentifiersConfiguration() {
    Configuration configuration = newConfiguration();
    configuration.setNamingStrategy(new PascalCaseIdentifiersNamingStrategy());
    return configuration;
  }
 
  protected Configuration newPascalCasePlusConfiguration() {
    Configuration configuration = newConfiguration();
    configuration.setNamingStrategy(new PascalCaseNamingStrategy());
    return configuration;
  }

  protected void runBatchConverterTestCase(Configuration configuration, String... resourceNames) throws CoreException, IOException, Throwable {
    runBatchConverterTestCase(configuration, toTestCaseResources(resourceNames));
  }

  private TestCaseResource[] toTestCaseResources(String... resourceNames) {
    final TestCaseResource[] resources = new TestCaseResource[resourceNames.length];
    for (int i=0; i<resourceNames.length; ++i) {
      resources[i] = new TestCaseResource(resourceNames[i]);
    }
    return resources;
  }

  protected void runBatchConverterTestCase(Configuration configuration,
      TestCaseResource... resources) throws CoreException,
      IOException, Throwable {
    final SimpleProject targetProject = new SimpleProject("converted");
    try {
      runBatchConverterTestCaseWithTargetProject(targetProject, configuration, resources);
    } finally {
      targetProject.dispose();
    }
  }

  private void runBatchConverterTestCaseWithTargetProject(final SimpleProject targetProject,
            Configuration configuration, TestCaseResource... resources) throws CoreException, IOException, Throwable {
      final ICompilationUnit[] units = createCompilationUnits(resources);
   
    final SharpenConversionBatch converter = new SharpenConversionBatch(configuration);
    converter.setSource(units);
    converter.setTargetProject(targetProject.getProject());
    converter.run();
 
    for (int i=0; i<resources.length; ++i) {
      final TestCaseResource resource = resources[i];
      if (resource.isSupportingLibrary()) {
        continue;
      }
      checkConversionResult(configuration, targetProject.getFolder("src"), units[i], resource);
    }
    }

  private ICompilationUnit[] createCompilationUnits(
      TestCaseResource... resources) throws CoreException, IOException {
    final ICompilationUnit[] units = new ICompilationUnit[resources.length];
    for (int i=0; i<resources.length; ++i) {   
      units[i] = createCompilationUnit(resources[i]);
    }
    return units;
  }

  /**
   * @param configuration
   * @param targetFolder
   * @param cu
   * @param resource
   * @throws JavaModelException
   * @throws IOException
   * @throws Throwable
   */
  private void checkConversionResult(Configuration configuration, IFolder targetFolder, ICompilationUnit cu, TestCaseResource resource) throws Throwable {
    String path = pathFromNamespace(configuration.mappedNamespace(getNamespace(cu)));
    IFile file = targetFolder.getFile(path + "/" + resource.targetSimpleName() + ".cs");
    assertFile(resource, file);
  }

  private String pathFromNamespace(String s) {
    return SharpenConversionBatch.cleanupNamespace(s).replace('.', '/');
  }

  private String getNamespace(ICompilationUnit cu) throws CoreException {
    IPackageDeclaration[] packages = cu.getPackageDeclarations();
    return packages.length > 0 ? packages[0].getElementName() : "";
  }

  protected void assertFile(TestCaseResource expectedResource, IFile actualFile) throws Throwable {
    expectedResource.assertFile(actualFile);
  }

  protected IProject getConvertedProject() {
    return getProject(_project.getName() + SharpenConstants.SHARPENED_PROJECT_SUFFIX);
  }

  IProject getProject(String name) {
    return WorkspaceUtilities.getProject(name);
  }

  protected void delete(IProject convertedProject) throws CoreException {
    convertedProject.delete(true, true, null);
  }
}
TOP

Related Classes of sharpen.ui.tests.AbstractConversionTestCase

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.