/* * Copyright (C) 2014 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package lombok.core.configuration; import static lombok.ConfigurationKeys.*; import static org.junit.Assert.assertEquals; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.PrintStream; import java.util.Arrays; import java.util.Collection; import java.util.regex.Pattern; import org.junit.Test; public class TestConfiguration { @Test public void testDisplayVerbose() throws Exception { @SuppressWarnings("unchecked") Collection<ConfigurationKey<?>> keys = Arrays.asList(ACCESSORS_FLAG_USAGE, ACCESSORS_CHAIN, ACCESSORS_PREFIX, LOG_ANY_FIELD_NAME); String baseName = "test/configuration/resource/configurationRoot/"; File directory = new File(baseName); String normalizedName = new File(directory.getAbsoluteFile().toURI().normalize()).toString().replace('\\', '/') + "/"; Collection<String> paths = Arrays.asList(normalizedName + "d1/d11", normalizedName + "d1/d12", normalizedName + "d1/d11/d111", normalizedName + "d1/d11/d111/f1.txt"); ByteArrayOutputStream rawOut = new ByteArrayOutputStream(); ByteArrayOutputStream rawErr = new ByteArrayOutputStream(); PrintStream outStream = new PrintStream(rawOut); PrintStream errStream = new PrintStream(rawErr); int result = new ConfigurationApp().redirectOutput(outStream, errStream).display(keys, true, paths, true); outStream.flush(); errStream.flush(); String out = new String(rawOut.toByteArray()).replace("\r\n", "\n").replace('\\', '/').replaceAll(Pattern.quote(normalizedName) + "|" + Pattern.quote(baseName), "BASE/").trim(); String err = new String(rawErr.toByteArray()).replace("\r\n", "\n").replace('\\', '/').replaceAll(Pattern.quote(normalizedName) + "|" + Pattern.quote(baseName), "BASE/").trim(); checkContent(directory, out, "out"); checkContent(directory, err, "err"); assertEquals(0, result); } private void checkContent(File dir, String actual, String type) throws Exception { String expected = fileToString(new File(dir, type + ".txt")).trim(); if (!expected.equals(actual)) { System.out.printf("**** Expected %s:\n", type); System.out.println(expected); System.out.printf("**** Actual %s:\n", type); System.out.println(actual); System.out.println("****"); } assertEquals(expected, actual); } static String fileToString(File configFile) throws Exception { byte[] b = new byte[65536]; FileInputStream fis = new FileInputStream(configFile); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); while (true) { int r = fis.read(b); if (r == -1) break; out.write(b, 0, r); } return new String(out.toByteArray(), "UTF-8"); } finally { fis.close(); } } }