diff --git a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
index 799101486e8..f57b8277b8d 100644
--- a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
+++ b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
@@ -277,6 +277,22 @@ abstract public class AbstractTextCanvasModel implements ITextCanvasModel {
public String getSelectedText() {
return fCurrentSelection;
}
+
+ // helper to sanitize text copied out of a snapshot
+ private static String scrubLine(String text) {
+ // get rid of the empty space at the end of the lines
+ // text=text.replaceAll("\000+$",""); //$NON-NLS-1$//$NON-NLS-2$
+ //
+ int i = text.length() - 1;
+ while (i >= 0 && text.charAt(i) == '\000') {
+ i--;
+ }
+ text = text.substring(0, i + 1);
+ //
+ // null means space
+ return text.replace('\000', ' ');
+ }
+
/**
* Calculates the currently selected text
* @return the currently selected text
@@ -294,17 +310,7 @@ abstract public class AbstractTextCanvasModel implements ITextCanvasModel {
text=text.substring(0, Math.min(fSelectionEndColumn+1,text.length()));
if(line==fSelectionStartLine)
text=text.substring(Math.min(fSelectionStartCoumn,text.length()));
- // get rid of the empty space at the end of the lines
- // text=text.replaceAll("\000+$",""); //$NON-NLS-1$//$NON-NLS-2$
- //
- int i = text.length() - 1;
- while (i >= 0 && text.charAt(i) == '\000') {
- i--;
- }
- text = text.substring(0, i + 1);
- //
- // null means space
- text=text.replace('\000', ' ');
+ text=scrubLine(text);
} else {
text=""; //$NON-NLS-1$
}
@@ -345,4 +351,30 @@ abstract public class AbstractTextCanvasModel implements ITextCanvasModel {
}
}
+ @Override
+ public String getAllText() {
+
+ // Make a snapshot of the whole text data
+ ITerminalTextDataSnapshot snapshot = fSnapshot.getTerminalTextData().makeSnapshot();
+ snapshot.updateSnapshot(true);
+ snapshot.detach();
+
+ // Extract the data
+ StringBuffer sb = new StringBuffer();
+ for (int line = 0; line < snapshot.getHeight(); line++) {
+ char[] chars = snapshot.getChars(line);
+ String text;
+ if (chars != null) {
+ text = scrubLine(new String(chars)); // take care of NULs
+ } else {
+ text = ""; //$NON-NLS-1$ null arrays represent empty lines
+ }
+ sb.append(text);
+ // terminate lines except (1) the last one and (2) wrapped lines
+ if ((line < snapshot.getHeight() - 1) && !snapshot.isWrappedLine(line)) {
+ sb.append('\n');
+ }
+ }
+ return sb.toString();
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
index 1891c6079f3..2ecb84a30f7 100644
--- a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
+++ b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
@@ -81,4 +81,15 @@ public interface ITextCanvasModel {
boolean hasLineSelection(int line);
String getSelectedText();
+
+ /**
+ * Collect and return all text present in the model.
+ *
+ *
Individual lines of the returned text are separated by '\n'.
+ *
+ *
The method is primarily designed for test automation.
+ *
+ * @since 4.3
+ */
+ String getAllText();
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
index a8b950820c1..02c60640634 100644
--- a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
+++ b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
@@ -382,6 +382,22 @@ public class TextCanvas extends GridCanvas {
fCellCanvasModel.setSelection(-1,-1,-1,-1);
}
+ /**
+ * Collect and return all text present in the widget.
+ *
+ *
Individual lines of the returned text are separated by '\n'.
+ *
+ *
The method is primarily designed for test automation. Tests need
+ * to check what happens in a terminal (e.g. if and how a CDT Debugger
+ * Console reacts in a GDB session) and this method allows to read the
+ * text present in the terminal.
+ *
+ * @since 4.3
+ */
+ public String getAllText() {
+ return fCellCanvasModel.getAllText();
+ }
+
public boolean isEmpty() {
return false;
}