mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 20:17:25 +00:00
[configuration] Added first automated test for the configuration framework. For now, it fails.
This commit is contained in:
1 parent
0293e13fed
commit
2934228033
12 files changed
+265
-18
No files matched your search
@@ -247,6 +247,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
|
||||
<srcdir dir="test/transform/src" test="true" />
|
||||
<srcdir dir="test/core/src" test="true" />
|
||||
<srcdir dir="test/bytecode/src" test="true" />
|
||||
<srcdir dir="test/configuration/src" test="true" />
|
||||
</module>
|
||||
<settings>
|
||||
<url url="http://projectlombok.org/downloads/lombok.intellij.settings" />
|
||||
@@ -267,6 +268,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
|
||||
<srcdir dir="test/transform/src" />
|
||||
<srcdir dir="test/core/src" />
|
||||
<srcdir dir="test/bytecode/src" />
|
||||
<srcdir dir="test/configuration/src" />
|
||||
<conf name="build" sources="contrib" />
|
||||
<conf name="test" sources="contrib" />
|
||||
<settings>
|
||||
@@ -292,10 +294,12 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
|
||||
<src path="test/core/src" />
|
||||
<src path="test/transform/src" />
|
||||
<src path="test/bytecode/src" />
|
||||
<src path="test/configuration/src" />
|
||||
</ivy:compile>
|
||||
<copy todir="build/tests">
|
||||
<fileset dir="test/pretty/resource" />
|
||||
<fileset dir="test/transform/resource" />
|
||||
<fileset dir="test/configuration/resource" />
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
@@ -426,6 +430,9 @@ You can also create your own by writing a 'testenvironment.properties' file. The
|
||||
<fileset dir="test/bytecode/src">
|
||||
<include name="**/Test*.java" />
|
||||
</fileset>
|
||||
<fileset dir="test/configuration/src">
|
||||
<include name="**/Test*.java" />
|
||||
</fileset>
|
||||
</batchtest>
|
||||
</junit>
|
||||
<echo level="info">All tests successful.</echo>
|
||||
|
||||
@@ -58,6 +58,9 @@ import com.zwitserloot.cmdreader.Shorthand;
|
||||
public class ConfigurationApp extends LombokApp {
|
||||
private static final URI NO_CONFIG = URI.create("");
|
||||
|
||||
private PrintStream out = System.out;
|
||||
private PrintStream err = System.err;
|
||||
|
||||
@Override public String getAppName() {
|
||||
return "config";
|
||||
}
|
||||
@@ -100,12 +103,12 @@ public class ConfigurationApp extends LombokApp {
|
||||
try {
|
||||
args = reader.make(raw.toArray(new String[0]));
|
||||
if (args.help) {
|
||||
System.out.println(reader.generateCommandLineHelp("java -jar lombok.jar configuration"));
|
||||
out.println(reader.generateCommandLineHelp("java -jar lombok.jar configuration"));
|
||||
return 0;
|
||||
}
|
||||
} catch (InvalidCommandLineException e) {
|
||||
System.err.println(e.getMessage());
|
||||
System.err.println(reader.generateCommandLineHelp("java -jar lombok.jar configuration"));
|
||||
err.println(e.getMessage());
|
||||
err.println(reader.generateCommandLineHelp("java -jar lombok.jar configuration"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -113,17 +116,21 @@ public class ConfigurationApp extends LombokApp {
|
||||
Collection<ConfigurationKey<?>> keys = checkKeys(args.key);
|
||||
if (keys == null) return 1;
|
||||
|
||||
boolean verbose = args.verbose;
|
||||
if (args.generate) {
|
||||
return generate(System.out, args.verbose, keys);
|
||||
return generate(keys, verbose);
|
||||
}
|
||||
|
||||
TreeMap<URI, Set<String>> sharedDirectories = findSharedDirectories(args.paths);
|
||||
if (sharedDirectories == null) return 1;
|
||||
|
||||
return display(System.out, args.verbose, sharedDirectories, keys, args.paths.size() == 1, !args.key.isEmpty());
|
||||
return display(keys, verbose, args.paths, !args.key.isEmpty());
|
||||
}
|
||||
|
||||
private int generate(PrintStream out, boolean verbose, Collection<ConfigurationKey<?>> keys) {
|
||||
public ConfigurationApp redirectOutput(PrintStream out, PrintStream err) {
|
||||
if (out != null) this.out = out;
|
||||
if (err != null) this.err = err;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int generate(Collection<ConfigurationKey<?>> keys, boolean verbose) {
|
||||
for (ConfigurationKey<?> key : keys) {
|
||||
String keyName = key.getKeyName();
|
||||
ConfigurationDataType type = key.getType();
|
||||
@@ -159,7 +166,11 @@ public class ConfigurationApp extends LombokApp {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int display(PrintStream out, boolean verbose, TreeMap<URI, Set<String>> sharedDirectories, Collection<ConfigurationKey<?>> keys, boolean onlyOne, boolean explicitKeys) throws Exception {
|
||||
public int display(Collection<ConfigurationKey<?>> keys, boolean verbose, Collection<String> argsPaths, boolean explicitKeys) throws Exception {
|
||||
TreeMap<URI, Set<String>> sharedDirectories = findSharedDirectories(argsPaths);
|
||||
|
||||
if (sharedDirectories == null) return 1;
|
||||
|
||||
Set<String> none = sharedDirectories.remove(NO_CONFIG);
|
||||
if (none != null) {
|
||||
if (none.size() == 1) {
|
||||
@@ -185,7 +196,7 @@ public class ConfigurationApp extends LombokApp {
|
||||
}
|
||||
Set<String> paths = entry.getValue();
|
||||
if (paths.size() == 1) {
|
||||
if (!onlyOne) out.printf("Configuration for '%s'.\n\n", paths.iterator().next());
|
||||
if (!(argsPaths.size() == 1)) out.printf("Configuration for '%s'.\n\n", paths.iterator().next());
|
||||
} else {
|
||||
out.printf("Configuration for:\n", paths.iterator().next());
|
||||
for (String path : paths) out.printf("- %s\n", path);
|
||||
@@ -200,7 +211,7 @@ public class ConfigurationApp extends LombokApp {
|
||||
Collection<String> modifications = traces.get(key);
|
||||
if (!modifications.isEmpty() || explicitKeys) {
|
||||
if (printed && verbose) out.println();
|
||||
printValue(out, key, value, verbose, modifications);
|
||||
printValue(key, value, verbose, modifications);
|
||||
printed = true;
|
||||
}
|
||||
}
|
||||
@@ -216,7 +227,7 @@ public class ConfigurationApp extends LombokApp {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void printValue(PrintStream out, ConfigurationKey<?> key, Object value, boolean verbose, Collection<String> history) {
|
||||
private void printValue(ConfigurationKey<?> key, Object value, boolean verbose, Collection<String> history) {
|
||||
if (verbose) out.printf("# %s\n", key.getDescription());
|
||||
if (value == null) {
|
||||
out.printf("clear %s\n", key.getKeyName());
|
||||
@@ -319,7 +330,7 @@ public class ConfigurationApp extends LombokApp {
|
||||
for (String keyName : keyList) {
|
||||
ConfigurationKey<?> key = registeredKeys.get(keyName);
|
||||
if (key == null) {
|
||||
System.err.printf("Unknown key '%s'\n", keyName);
|
||||
err.printf("Unknown key '%s'\n", keyName);
|
||||
return null;
|
||||
}
|
||||
keys.remove(key);
|
||||
@@ -328,7 +339,7 @@ public class ConfigurationApp extends LombokApp {
|
||||
return keys;
|
||||
}
|
||||
|
||||
private TreeMap<URI, Set<String>> findSharedDirectories(List<String> paths) {
|
||||
private TreeMap<URI, Set<String>> findSharedDirectories(Collection<String> paths) {
|
||||
TreeMap<URI,Set<String>> sharedDirectories = new TreeMap<URI, Set<String>>(new Comparator<URI>() {
|
||||
@Override public int compare(URI o1, URI o2) {
|
||||
return o1.toString().compareTo(o2.toString());
|
||||
@@ -337,7 +348,7 @@ public class ConfigurationApp extends LombokApp {
|
||||
for (String path : paths) {
|
||||
File file = new File(path);
|
||||
if (!file.exists()) {
|
||||
System.err.printf("File not found: '%s'\n", path);
|
||||
err.printf("File not found: '%s'\n", path);
|
||||
return null;
|
||||
}
|
||||
URI first = findFirstLombokDirectory(file);
|
||||
|
||||
Whitespace-only changes.
@@ -0,0 +1,2 @@
|
||||
clear lombok.Accessors.chain
|
||||
lombok.Accessors.prefix += m_
|
||||
@@ -0,0 +1,5 @@
|
||||
stop-bubbling=true
|
||||
|
||||
lombok.Accessors.chain = false
|
||||
lombok.Accessors.flagUsage = ERROR
|
||||
lombok.Accessors.prefix += f
|
||||
@@ -0,0 +1,3 @@
|
||||
stop-bubbling=true
|
||||
|
||||
lombok.Accessors.chain = true
|
||||
@@ -0,0 +1,3 @@
|
||||
stop-bubbling=true
|
||||
# this file shouldn't be read
|
||||
no error expected
|
||||
Whitespace-only changes.
@@ -0,0 +1,90 @@
|
||||
Configuration for 'BASE/d1/d11'.
|
||||
|
||||
# Emit a warning or error if @Accessors is used.
|
||||
lombok.Accessors.flagUsage = ERROR
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.flagUsage' not mentioned>
|
||||
#
|
||||
# BASE/d1/d11/lombok.config:
|
||||
# 3: lombok.Accessors.flagUsage = ERROR
|
||||
|
||||
# Generate setters that return 'this' instead of 'void'.
|
||||
lombok.Accessors.chain = false
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.chain' not mentioned>
|
||||
#
|
||||
# BASE/d1/d11/lombok.config:
|
||||
# 2: lombok.Accessors.chain = false
|
||||
|
||||
# Strip this field prefix, like 'f' or 'm_', from the names of generated getters and setters.
|
||||
lombok.Accessors.prefix += f
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.prefix' not mentioned>
|
||||
#
|
||||
# BASE/d1/d11/lombok.config:
|
||||
# 4: lombok.Accessors.prefix += f
|
||||
|
||||
# Use this name for the generated logger fields (default: 'log')
|
||||
clear lombok.log.fieldName
|
||||
|
||||
|
||||
Configuration for:
|
||||
- BASE/d1/d11/d111
|
||||
- BASE/d1/d11/d111/f1.txt
|
||||
|
||||
# Emit a warning or error if @Accessors is used.
|
||||
lombok.Accessors.flagUsage = ERROR
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.flagUsage' not mentioned>
|
||||
#
|
||||
# BASE/d1/d11/lombok.config:
|
||||
# 3: lombok.Accessors.flagUsage = ERROR
|
||||
#
|
||||
# BASE/d1/d11/d111/lombok.config:
|
||||
# <'lombok.Accessors.flagUsage' not mentioned>
|
||||
|
||||
# Generate setters that return 'this' instead of 'void'.
|
||||
clear lombok.Accessors.chain
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.chain' not mentioned>
|
||||
#
|
||||
# BASE/d1/d11/lombok.config:
|
||||
# 2: lombok.Accessors.chain = false
|
||||
#
|
||||
# BASE/d1/d11/d111/lombok.config:
|
||||
# 1: clear lombok.Accessors.chain
|
||||
|
||||
# Strip this field prefix, like 'f' or 'm_', from the names of generated getters and setters.
|
||||
lombok.Accessors.prefix += f
|
||||
lombok.Accessors.prefix += m_
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.prefix' not mentioned>
|
||||
#
|
||||
# BASE/d1/d11/lombok.config:
|
||||
# 4: lombok.Accessors.prefix += f
|
||||
#
|
||||
# BASE/d1/d11/d111/lombok.config:
|
||||
# 2: lombok.Accessors.prefix += m_
|
||||
|
||||
# Use this name for the generated logger fields (default: 'log')
|
||||
clear lombok.log.fieldName
|
||||
|
||||
|
||||
Configuration for 'BASE/d1/d12'.
|
||||
|
||||
# Emit a warning or error if @Accessors is used.
|
||||
clear lombok.Accessors.flagUsage
|
||||
|
||||
# Generate setters that return 'this' instead of 'void'.
|
||||
lombok.Accessors.chain = true
|
||||
# BASE/d1/lombok.config:
|
||||
# <'lombok.Accessors.chain' not mentioned>
|
||||
#
|
||||
# BASE/d1/d12/lombok.config:
|
||||
# 2: lombok.Accessors.chain = true
|
||||
|
||||
# Strip this field prefix, like 'f' or 'm_', from the names of generated getters and setters.
|
||||
clear lombok.Accessors.prefix
|
||||
|
||||
# Use this name for the generated logger fields (default: 'log')
|
||||
clear lombok.log.fieldName
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* 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 org.junit.runner.RunWith;
|
||||
import org.junit.runners.Suite;
|
||||
import org.junit.runners.Suite.SuiteClasses;
|
||||
|
||||
@RunWith(Suite.class)
|
||||
@SuiteClasses({TestConfiguration.class})
|
||||
public class RunConfigurationTests {
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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 testIt() 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Project Lombok Authors.
|
||||
* Copyright (C) 2011-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
|
||||
@@ -26,6 +26,6 @@ import org.junit.runners.Suite;
|
||||
import org.junit.runners.Suite.SuiteClasses;
|
||||
|
||||
@RunWith(Suite.class)
|
||||
@SuiteClasses({lombok.transform.RunTransformTests.class, lombok.bytecode.RunBytecodeTests.class})
|
||||
@SuiteClasses({lombok.transform.RunTransformTests.class, lombok.bytecode.RunBytecodeTests.class, lombok.core.configuration.RunConfigurationTests.class})
|
||||
public class RunAllTests {
|
||||
}
|
||||
Reference in new issue
Block a user