/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.tools.codegen; import static org.hamcrest.Matchers.*; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.SystemUtils; import org.ebayopensource.turmeric.junit.asserts.PathAssert; import org.junit.Assert; /** * @author arajmony */ public class CodegenTestUtils { /** * Assertion that tests a generated file contents against a template file containing a snippet of generated code * that is tested for in the actual file contents. * * @param generatedFile * @param targetArtifactFile * @param svcNameFromWSDL * @param serviceNamethruCodegen * @param operationName * @throws IOException */ public static void assertGeneratedContent(File generatedFile, File targetArtifactFile, String svcNameFromWSDL, String serviceNamethruCodegen, String operationName) throws IOException { PathAssert.assertFileExists(targetArtifactFile); PathAssert.assertFileExists(generatedFile); Map<String, String> filters = new HashMap<String, String>(); filters.put("@@SVC_ADMIN_NAME@@", svcNameFromWSDL); filters.put("@@SVC_NAME@@", svcNameFromWSDL); filters.put("@@OPERATION_NAME@@", operationName); String expectedContents = readTargetWithFiltering(targetArtifactFile, filters); Assert.assertThat("File Content", notNullValue()); Assert.assertThat("File Content.length: " + expectedContents, expectedContents.length(), greaterThan(0)); String actualContents = readFileToStringTrimmed(generatedFile); Assert.assertThat(actualContents, containsString(expectedContents)); } private static String readFileToStringTrimmed(File file) throws IOException { StringBuilder contents = new StringBuilder(); FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(file); br = new BufferedReader(fr); String tmpStr = null; while ((tmpStr = br.readLine()) != null) { if (tmpStr.startsWith("#")) { // a comment: skip continue; } if (StringUtils.isBlank(tmpStr)) { // empty line: skip continue; } contents.append(tmpStr.trim()).append( SystemUtils.LINE_SEPARATOR); } } finally { IOUtils.closeQuietly(br); IOUtils.closeQuietly(fr); } return contents.toString(); } private static String readTargetWithFiltering(File file, Map<String, String> filters) throws IOException { StringBuilder contents = new StringBuilder(); FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(file); br = new BufferedReader(fr); String tmpStr = null; while ((tmpStr = br.readLine()) != null) { if (tmpStr.startsWith("#")) { // a comment: skip continue; } for (String key : filters.keySet()) { if (tmpStr.contains(key)) { tmpStr = tmpStr.replace(key, filters.get(key)); } } if (StringUtils.isBlank(tmpStr)) { // empty line: skip continue; } contents.append(tmpStr.trim()).append( SystemUtils.LINE_SEPARATOR); } } finally { IOUtils.closeQuietly(br); IOUtils.closeQuietly(fr); } return contents.toString(); } }