Skip to content

Commit bb4cae1

Browse files
committed
SingleLineProgressConsole added
Coords: toStringNoComent() added Progress: startTrace() added
1 parent d6ccaa6 commit bb4cae1

File tree

7 files changed

+223
-30
lines changed

7 files changed

+223
-30
lines changed

src/main/java/org/scm4j/commons/Coords.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,8 @@ public String getExtension() {
139139
public String getClassifier() {
140140
return classifier;
141141
}
142+
143+
public String toStringNoComment() {
144+
return coordsStringNoComment;
145+
}
142146
}

src/main/java/org/scm4j/commons/progress/IProgress.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public interface IProgress extends AutoCloseable {
55

66
void reportStatus(String status);
77

8-
void trace(String message);
9-
108
void error(String message);
9+
10+
IProgress startTrace(String startMessage, String endMessage);
1111
}

src/main/java/org/scm4j/commons/progress/ProgressConsole.java

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ public class ProgressConsole implements IProgress {
1111
private int level;
1212
private String name;
1313
private String indent;
14+
private String outdent;
15+
private PrintStream out;
1416

1517
public int getLevel() {
1618
return level;
@@ -28,9 +30,6 @@ public String getOutdent() {
2830
return outdent;
2931
}
3032

31-
private String outdent;
32-
private PrintStream out;
33-
3433
public PrintStream getOut() {
3534
return out;
3635
}
@@ -42,6 +41,10 @@ public ProgressConsole(String name, String indent, String outdent) {
4241
public ProgressConsole(String name) {
4342
this(System.out, 0, name, "", "");
4443
}
44+
45+
public ProgressConsole() {
46+
this(System.out, 0, "", "", "");
47+
}
4548

4649
public ProgressConsole(PrintStream out, int level, String name, String indent, String outdent) {
4750
this.out = out;
@@ -50,12 +53,9 @@ public ProgressConsole(PrintStream out, int level, String name, String indent, S
5053
this.indent = indent;
5154
this.outdent = outdent;
5255
indent(level);
53-
print(indent + name);
54-
}
55-
56-
protected void print(Object s) {
57-
out.print(s.toString());
58-
out.println();
56+
if (!(indent + name).isEmpty()) {
57+
out.println(indent + name);
58+
}
5959
}
6060

6161
protected void indent(int level) {
@@ -66,27 +66,32 @@ protected void indent(int level) {
6666
public IProgress createNestedProgress(String name) {
6767
return new ProgressConsole(out, level + 1, name, indent, outdent);
6868
}
69-
69+
7070
@Override
7171
public void reportStatus(String status) {
7272
indent(level + 1);
73-
print(status.replace("\r\n", "\r\n" + Strings.repeat("\t", level + 2)));
73+
out.println(status);
7474
}
7575

7676
@Override
7777
public void close() {
7878
level--;
79-
reportStatus(outdent + name);
79+
if (!(outdent + name).isEmpty()) {
80+
reportStatus(outdent + name);
81+
}
8082
}
8183

82-
@Override
8384
public void trace(String message) {
84-
85+
8586
}
8687

8788
@Override
8889
public void error(String message) {
89-
indent(level + 1);
90-
print(ansi().fg(RED).a(message).reset());
90+
reportStatus(ansi().fg(RED).a(message).reset().toString());
91+
}
92+
93+
@Override
94+
public IProgress startTrace(String startMessage, String endMessage) {
95+
return new SingleLineProgressConsole(level + 1, out, startMessage, endMessage);
9196
}
9297
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.scm4j.commons.progress;
2+
3+
import static org.fusesource.jansi.Ansi.ansi;
4+
import static org.fusesource.jansi.Ansi.Color.RED;
5+
6+
import java.io.PrintStream;
7+
8+
import com.google.common.base.Strings;
9+
10+
public class SingleLineProgressConsole implements IProgress {
11+
12+
private final String endMessage;
13+
private final PrintStream out;
14+
15+
16+
17+
public SingleLineProgressConsole(PrintStream out, String startMessage, String endMessage) {
18+
this(0, out, startMessage, endMessage);
19+
}
20+
21+
public SingleLineProgressConsole(Integer level, PrintStream out, String startMessage, String endMessage) {
22+
this.endMessage = endMessage;
23+
this.out = out;
24+
out.print(Strings.repeat("\t", level));
25+
reportStatus(startMessage);
26+
}
27+
28+
public SingleLineProgressConsole(String startMessage, String endMessage) {
29+
this(0, System.out, startMessage, endMessage);
30+
}
31+
32+
@Override
33+
public void close() throws Exception {
34+
getOut().println(getEndMessage());
35+
}
36+
37+
@Override
38+
public IProgress createNestedProgress(String name) {
39+
return new SingleLineProgressConsole(getOut(), name, getEndMessage());
40+
}
41+
42+
@Override
43+
public void reportStatus(String status) {
44+
getOut().print(status);
45+
getOut().flush();
46+
}
47+
48+
@Override
49+
public void error(String message) {
50+
getOut().print(ansi().fg(RED).a(message).reset().toString());
51+
getOut().flush();
52+
}
53+
54+
@Override
55+
public IProgress startTrace(String startMessage, String endMessage) {
56+
return new SingleLineProgressConsole(getOut(), startMessage, endMessage);
57+
}
58+
59+
public String getEndMessage() {
60+
return endMessage;
61+
}
62+
63+
public PrintStream getOut() {
64+
return out;
65+
}
66+
}

src/test/java/org/scm4j/commons/CoordsTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,12 @@ public void testVersionChange() {
9696
assertEquals("eu.untill:JTerminal # comment", new Coords("eu.untill:JTerminal # comment").toString(""));
9797
assertEquals("eu.untill:JTerminal:12.13 # comment", new Coords("eu.untill:JTerminal # comment").toString("12.13"));
9898
}
99+
100+
@Test
101+
public void testToStringNoComment() {
102+
assertEquals("com.myproject:c1:1.0.0", dc("com.myproject:c1:1.0.0#comment").toStringNoComment());
103+
assertEquals("com.myproject:c1:1.0.0@ext", dc("com.myproject:c1:1.0.0@ext # comment").toStringNoComment());
104+
assertEquals("com.myproject:c1::dfgd@ext", dc("com.myproject:c1::dfgd@ext # comment").toStringNoComment());
105+
assertEquals("com.myproject:c1:", dc("com.myproject:c1: # comment").toStringNoComment());
106+
}
99107
}

src/test/java/org/scm4j/commons/progress/ProgressConsoleTest.java

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
public class ProgressConsoleTest extends TestCase {
1414

15+
private static final String TRACE = "trace";
16+
private static final String END_MESSAGE = "endMessage";
17+
private static final String START_MESSAGE = "start message";
18+
1519
public void testMultiline() throws Exception{
1620
System.out.println("***Multiline:");
1721
ProgressConsole rpc1 = new ProgressConsole("Progress 1");
@@ -38,34 +42,29 @@ public void testPrinting() throws Exception {
3842
PrintStream mockedOut = Mockito.mock(PrintStream.class);
3943
try (IProgress pc = new ProgressConsole(mockedOut, 0, "Progress 1", ">>> ", "<<< ")) {
4044
Mockito.verify(mockedOut).print("");
41-
Mockito.verify(mockedOut).print(">>> Progress 1");
42-
Mockito.verify(mockedOut).println();
45+
Mockito.verify(mockedOut).println(">>> Progress 1");
4346
Mockito.reset(mockedOut);
4447
try (IProgress nestedPc = pc.createNestedProgress("Progress 2")) {
4548
Mockito.verify(mockedOut).print("\t");
46-
Mockito.verify(mockedOut).print(">>> Progress 2");
47-
Mockito.verify(mockedOut).println();
49+
Mockito.verify(mockedOut).println(">>> Progress 2");
4850
Mockito.reset(mockedOut);
4951
}
5052
Mockito.verify(mockedOut).print("\t");
51-
Mockito.verify(mockedOut).print("<<< Progress 2");
52-
Mockito.verify(mockedOut).println();
53+
Mockito.verify(mockedOut).println("<<< Progress 2");
5354
Mockito.reset(mockedOut);
5455
}
5556
Mockito.verify(mockedOut).print("");
56-
Mockito.verify(mockedOut).print("<<< Progress 1");
57-
Mockito.verify(mockedOut).println();
57+
Mockito.verify(mockedOut).println("<<< Progress 1");
5858
}
5959

60-
public void testColoring() throws Exception {
60+
public void testError() throws Exception {
6161
PrintStream mockedOut = Mockito.mock(PrintStream.class);
6262
Ansi.setEnabled(true);
6363
try (IProgress pc = new ProgressConsole(mockedOut, 0, "Progress 1", ">>> ", "<<< ")) {
6464
pc.error("error");
6565
Mockito.verify(mockedOut).print("\t");
6666
String test = ansi().fg(RED).a("error").reset().toString();
67-
Mockito.verify(mockedOut).print(test);
68-
Mockito.verify(mockedOut, Mockito.times(2)).println();
67+
Mockito.verify(mockedOut).println(test);
6968
}
7069
}
7170

@@ -80,7 +79,40 @@ public void testConstructor() {
8079

8180
public void testTrace() {
8281
ProgressConsole pc = new ProgressConsole("Progress 1", ">>> ", "<<< ");
83-
pc.trace("trace");
82+
pc.trace(TRACE);
83+
pc.close();
84+
}
85+
86+
public void testStartTrace() throws Exception {
87+
PrintStream mockedOut = Mockito.mock(PrintStream.class);
88+
ProgressConsole pc = new ProgressConsole(mockedOut, 0, "Progress 1", ">>> ", "<<< ");
89+
try (IProgress pcTrace = pc.startTrace(START_MESSAGE, END_MESSAGE)) {
90+
pcTrace.reportStatus(TRACE);
91+
92+
Mockito.verify(mockedOut).print("");
93+
Mockito.verify(mockedOut).print("\t");
94+
Mockito.verify(mockedOut).print(START_MESSAGE);
95+
Mockito.verify(mockedOut).print(TRACE);
96+
assertTrue(pcTrace instanceof SingleLineProgressConsole);
97+
}
98+
Mockito.verify(mockedOut).println(END_MESSAGE);
99+
pc.close();
100+
}
101+
102+
public void testEmpty() throws Exception {
103+
PrintStream mockedOut = Mockito.mock(PrintStream.class);
104+
try (IProgress pc = new ProgressConsole(mockedOut, 0, "", "", "")) {
105+
Mockito.verify(mockedOut).print("");
106+
107+
}
108+
Mockito.verifyNoMoreInteractions(mockedOut);
109+
110+
ProgressConsole pc = new ProgressConsole();
111+
assertEquals("", pc.getIndent());
112+
assertEquals(0, pc.getLevel());
113+
assertEquals("", pc.getName());
114+
assertEquals(System.out, pc.getOut());
115+
assertEquals("", pc.getOutdent());
84116
pc.close();
85117
}
86118
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package org.scm4j.commons.progress;
2+
3+
import static org.fusesource.jansi.Ansi.ansi;
4+
import static org.fusesource.jansi.Ansi.Color.RED;
5+
import static org.junit.Assert.assertEquals;
6+
import static org.mockito.Mockito.*;
7+
8+
import java.io.PrintStream;
9+
10+
import org.fusesource.jansi.Ansi;
11+
import org.junit.Test;
12+
import org.mockito.Mockito;
13+
14+
import com.google.common.base.Strings;
15+
16+
public class SingleLineProgressConsoleTest {
17+
18+
private static final String END_2 = "end 2";
19+
private static final String START_2 = "start 2";
20+
private static final String ERROR = "error";
21+
private static final String TRACE = "trace";
22+
private static final String END_MESSAGE = "end message";
23+
private static final String START_MESSAGE = "startMessage";
24+
private static final String START_3 = "start 3";
25+
26+
@Test
27+
public void testSingleLineTrace() throws Exception {
28+
PrintStream mockedOut = Mockito.mock(PrintStream.class);
29+
try (IProgress pc = new SingleLineProgressConsole(mockedOut, START_MESSAGE, END_MESSAGE)) {
30+
verify(mockedOut).print("");
31+
verify(mockedOut).print(START_MESSAGE);
32+
pc.reportStatus(TRACE);
33+
verify(mockedOut).print(TRACE);
34+
try (IProgress pcNested = pc.createNestedProgress(START_2)) {
35+
verify(mockedOut, times(2)).print("");
36+
verify(mockedOut).print(START_2);
37+
}
38+
verify(mockedOut).println(END_MESSAGE);
39+
40+
try (IProgress pcNested = pc.startTrace(START_3, END_2)) {
41+
verify(mockedOut, times(3)).print("");
42+
verify(mockedOut).print(START_3);
43+
}
44+
verify(mockedOut).println(END_2);
45+
46+
}
47+
verify(mockedOut, times(2)).println(END_MESSAGE);
48+
}
49+
50+
@Test
51+
public void testIndents() throws Exception {
52+
PrintStream mockedOut = Mockito.mock(PrintStream.class);
53+
try (IProgress pc = new SingleLineProgressConsole(3, mockedOut, START_MESSAGE, END_MESSAGE)) {
54+
Mockito.verify(mockedOut).print(Strings.repeat("\t", 3));
55+
Mockito.verify(mockedOut).print(START_MESSAGE);
56+
}
57+
}
58+
59+
@Test
60+
public void testError() throws Exception {
61+
PrintStream mockedOut = Mockito.mock(PrintStream.class);
62+
Ansi.setEnabled(true);
63+
try (IProgress pc = new SingleLineProgressConsole(mockedOut, START_MESSAGE, END_MESSAGE)) {
64+
pc.error(ERROR);
65+
Mockito.verify(mockedOut).print("");
66+
String test = ansi().fg(RED).a(ERROR).reset().toString();
67+
Mockito.verify(mockedOut).print(test);
68+
}
69+
}
70+
71+
@Test
72+
public void testConstructorDefaults() throws Exception {
73+
SingleLineProgressConsole pc = new SingleLineProgressConsole(START_MESSAGE, END_MESSAGE);
74+
assertEquals(System.out, pc.getOut());
75+
assertEquals(END_MESSAGE, pc.getEndMessage());
76+
pc.close();
77+
}
78+
}

0 commit comments

Comments
 (0)