8161969: jshell tool: /var value is not truncated per feedback setting
8166637: jshell tool: confusing truncation of long result values 8154513: JShell tool: welcome message should match feedback mode 8167552: jshell tool: Typo in jshell command '/? /reload' description Reviewed-by: jlahoda
This commit is contained in:
parent
3d46ad34e0
commit
836024d6f9
@ -116,6 +116,10 @@ class Feedback {
|
||||
name, type, value, unresolved, errorLines);
|
||||
}
|
||||
|
||||
public String truncateVarValue(String value) {
|
||||
return mode.truncateVarValue(value);
|
||||
}
|
||||
|
||||
public String getPrompt(String nextId) {
|
||||
return mode.getPrompt(nextId);
|
||||
}
|
||||
@ -416,6 +420,45 @@ class Feedback {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
String truncateVarValue(String value) {
|
||||
return truncateValue(value,
|
||||
bits(FormatCase.VARVALUE, FormatAction.ADDED,
|
||||
FormatWhen.PRIMARY, FormatResolve.OK,
|
||||
FormatUnresolved.UNRESOLVED0, FormatErrors.ERROR0));
|
||||
}
|
||||
|
||||
String truncateValue(String value, long bits) {
|
||||
if (value==null) {
|
||||
return "";
|
||||
} else {
|
||||
// Retrieve the truncation length
|
||||
String truncField = format(TRUNCATION_FIELD, bits);
|
||||
if (truncField.isEmpty()) {
|
||||
// No truncation set, use whole value
|
||||
return value;
|
||||
} else {
|
||||
// Convert truncation length to int
|
||||
// this is safe since it has been tested before it is set
|
||||
int trunc = Integer.parseUnsignedInt(truncField);
|
||||
int len = value.length();
|
||||
if (len > trunc) {
|
||||
if (trunc <= 13) {
|
||||
// Very short truncations have no room for "..."
|
||||
return value.substring(0, trunc);
|
||||
} else {
|
||||
// Normal truncation, make total length equal truncation length
|
||||
int endLen = trunc / 3;
|
||||
int startLen = trunc - 5 - endLen;
|
||||
return value.substring(0, startLen) + " ... " + value.substring(len -endLen);
|
||||
}
|
||||
} else {
|
||||
// Within truncation length, use whole value
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Compute the display output given full context and values
|
||||
String format(FormatCase fc, FormatAction fa, FormatWhen fw,
|
||||
FormatResolve fr, FormatUnresolved fu, FormatErrors fe,
|
||||
@ -425,33 +468,7 @@ class Feedback {
|
||||
String fname = name==null? "" : name;
|
||||
String ftype = type==null? "" : type;
|
||||
// Compute the representation of value
|
||||
String fvalue;
|
||||
if (value==null) {
|
||||
fvalue = "";
|
||||
} else {
|
||||
// Retrieve the truncation length
|
||||
String truncField = format(TRUNCATION_FIELD, bits);
|
||||
if (truncField.isEmpty()) {
|
||||
// No truncation set, use whole value
|
||||
fvalue = value;
|
||||
} else {
|
||||
// Convert truncation length to int
|
||||
// this is safe since it has been tested before it is set
|
||||
int trunc = Integer.parseUnsignedInt(truncField);
|
||||
if (value.length() > trunc) {
|
||||
if (trunc <= 5) {
|
||||
// Very short truncations have no room for "..."
|
||||
fvalue = value.substring(0, trunc);
|
||||
} else {
|
||||
// Normal truncation, make total length equal truncation length
|
||||
fvalue = value.substring(0, trunc - 4) + " ...";
|
||||
}
|
||||
} else {
|
||||
// Within truncation length, use whole value
|
||||
fvalue = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
String fvalue = truncateValue(value, bits);
|
||||
String funresolved = unresolved==null? "" : unresolved;
|
||||
String errors = errorLines.stream()
|
||||
.map(el -> String.format(
|
||||
|
@ -526,7 +526,7 @@ public class JShellTool implements MessageHandler {
|
||||
runFile(loadFile, "jshell");
|
||||
}
|
||||
|
||||
if (regenerateOnDeath) {
|
||||
if (regenerateOnDeath && feedback.shouldDisplayCommandFluff()) {
|
||||
hardmsg("jshell.msg.welcome", version());
|
||||
}
|
||||
|
||||
@ -2240,7 +2240,7 @@ public class JShellTool implements MessageHandler {
|
||||
stream.forEachOrdered(vk ->
|
||||
{
|
||||
String val = state.status(vk) == Status.VALID
|
||||
? state.varValue(vk)
|
||||
? feedback.truncateVarValue(state.varValue(vk))
|
||||
: getResourceString("jshell.msg.vars.not.active");
|
||||
hard(" %s %s = %s", vk.typeName(), vk.name(), val);
|
||||
});
|
||||
|
@ -338,7 +338,7 @@ and any /drop or /classpath commands in the order they were entered.\n\
|
||||
Reset and replay the valid history between the previous and most\n\t\
|
||||
recent time that jshell was entered, or a /reset, or /reload\n\t\
|
||||
command was executed. This can thus be used to restore a previous\n\t\
|
||||
jshell tool sesson.\n\n\
|
||||
jshell tool session.\n\n\
|
||||
/reload [-restore] -quiet\n\t\
|
||||
With the '-quiet' argument the replay is not shown. Errors will display.
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8148316 8148317 8151755 8152246 8153551 8154812 8157261 8163840
|
||||
* @bug 8148316 8148317 8151755 8152246 8153551 8154812 8157261 8163840 8166637 8161969
|
||||
* @summary Tests for output customization
|
||||
* @library /tools/lib
|
||||
* @modules jdk.compiler/com.sun.tools.javac.api
|
||||
@ -220,8 +220,8 @@ public class ToolFormatTest extends ReplToolTesting {
|
||||
test(
|
||||
(a) -> assertCommandOutputStartsWith(a, "/set feedback normal", ""),
|
||||
(a) -> assertCommand(a, "String s = java.util.stream.IntStream.range(65, 74)"+
|
||||
".mapToObj(i -> \"\"+(char)i).reduce((a,b) -> a + b + a).get()",
|
||||
"s ==> \"ABACABADABACABAEABACABADABACABAFABACABADABACABAEABACABADABACABAGABACABADABA ..."),
|
||||
".mapToObj(i -> \"\"+(char)i).reduce((a,b) -> a + b + a).get() + \"XYZ\"",
|
||||
"s ==> \"ABACABADABACABAEABACABADABACABAFABACABADABACABAE ... BACABAEABACABADABACABAXYZ\""),
|
||||
(a) -> assertCommandOutputStartsWith(a, "/set mode test -quiet", ""),
|
||||
(a) -> assertCommandOutputStartsWith(a, "/set feedback test", ""),
|
||||
(a) -> assertCommand(a, "/set format test display '{type}:{value}' primary", ""),
|
||||
@ -234,8 +234,9 @@ public class ToolFormatTest extends ReplToolTesting {
|
||||
"/set truncation test 10 varvalue"),
|
||||
(a) -> assertCommandOutputContains(a, "/set truncation test",
|
||||
"/set truncation test 10 varvalue"),
|
||||
(a) -> assertCommand(a, "String r = s", "String:\"ABACABADABACABA ..."),
|
||||
(a) -> assertCommand(a, "r", "String:\"ABACA ..."),
|
||||
(a) -> assertCommand(a, "/var", "| String s = \"ABACABADA"),
|
||||
(a) -> assertCommand(a, "String r = s", "String:\"ABACABAD ... BAXYZ\""),
|
||||
(a) -> assertCommand(a, "r", "String:\"ABACABADA"),
|
||||
(a) -> assertCommand(a, "r=s", "String:\"AB")
|
||||
);
|
||||
} finally {
|
||||
|
@ -23,13 +23,14 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8157200 8163840
|
||||
* @bug 8157200 8163840 8154513
|
||||
* @summary Tests of what information is retained across jshell tool runs
|
||||
* @modules jdk.jshell/jdk.internal.jshell.tool
|
||||
* @build ToolRetainTest ReplToolTesting
|
||||
* @run testng ToolRetainTest
|
||||
*/
|
||||
|
||||
import java.util.Locale;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
@Test
|
||||
@ -62,14 +63,14 @@ public class ToolRetainTest extends ReplToolTesting {
|
||||
(a) -> assertCommand(a, "/set mode -retain trm1", ""),
|
||||
(a) -> assertCommand(a, "/exit", "")
|
||||
);
|
||||
test(
|
||||
test(Locale.ROOT, true, new String[0], "",
|
||||
(a) -> assertCommand(a, "/set mode trm2 -quiet", ""),
|
||||
(a) -> assertCommand(a, "/set format trm2 display '{name}={value}'", ""),
|
||||
(a) -> assertCommand(a, "int x = 45", "x:45"),
|
||||
(a) -> assertCommand(a, "/set mode -retain trm2", ""),
|
||||
(a) -> assertCommand(a, "/exit", "")
|
||||
);
|
||||
test(
|
||||
test(Locale.ROOT, true, new String[0], "",
|
||||
(a) -> assertCommandOutputContains(a, "/set mode trm1",
|
||||
"/set format trm1 display \"{name}:{value}\""),
|
||||
(a) -> assertCommand(a, "/set format trm2 display",
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128
|
||||
* @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513
|
||||
* @summary Simple jshell tool tests
|
||||
* @modules jdk.compiler/com.sun.tools.javac.api
|
||||
* jdk.compiler/com.sun.tools.javac.main
|
||||
@ -35,6 +35,7 @@
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
@ -465,14 +466,14 @@ public class ToolSimpleTest extends ReplToolTesting {
|
||||
}
|
||||
|
||||
public void testOptionQ() {
|
||||
test(new String[]{"-q", "--no-startup"},
|
||||
test(Locale.ROOT, false, new String[]{"-q", "--no-startup"}, "",
|
||||
(a) -> assertCommand(a, "1+1", "$1 ==> 2"),
|
||||
(a) -> assertCommand(a, "int x = 5", "")
|
||||
);
|
||||
}
|
||||
|
||||
public void testOptionS() {
|
||||
test(new String[]{"-s", "--no-startup"},
|
||||
test(Locale.ROOT, false, new String[]{"-s", "--no-startup"}, "",
|
||||
(a) -> assertCommand(a, "1+1", "")
|
||||
);
|
||||
}
|
||||
@ -486,7 +487,7 @@ public class ToolSimpleTest extends ReplToolTesting {
|
||||
}
|
||||
|
||||
public void testOptionFeedback() {
|
||||
test(new String[]{"--feedback", "concise", "--no-startup"},
|
||||
test(Locale.ROOT, false, new String[]{"--feedback", "concise", "--no-startup"}, "",
|
||||
(a) -> assertCommand(a, "1+1", "$1 ==> 2"),
|
||||
(a) -> assertCommand(a, "int x = 5", "")
|
||||
);
|
||||
@ -498,17 +499,17 @@ public class ToolSimpleTest extends ReplToolTesting {
|
||||
.filter(l -> !l.isEmpty())
|
||||
.count(), "Expected no lines: " + s);
|
||||
};
|
||||
test(new String[]{"-nq"},
|
||||
test(Locale.ROOT, false, new String[]{"-nq"}, "",
|
||||
(a) -> assertCommandCheckOutput(a, "/list -all", confirmNoStartup),
|
||||
(a) -> assertCommand(a, "1+1", "$1 ==> 2"),
|
||||
(a) -> assertCommand(a, "int x = 5", "")
|
||||
);
|
||||
test(new String[]{"-qn"},
|
||||
test(Locale.ROOT, false, new String[]{"-qn"}, "",
|
||||
(a) -> assertCommandCheckOutput(a, "/list -all", confirmNoStartup),
|
||||
(a) -> assertCommand(a, "1+1", "$1 ==> 2"),
|
||||
(a) -> assertCommand(a, "int x = 5", "")
|
||||
);
|
||||
test(new String[]{"-ns"},
|
||||
test(Locale.ROOT, false, new String[]{"-ns"}, "",
|
||||
(a) -> assertCommandCheckOutput(a, "/list -all", confirmNoStartup),
|
||||
(a) -> assertCommand(a, "1+1", "")
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user