summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md5
-rw-r--r--cmd2/utils.py11
-rw-r--r--tests/test_utils.py2
3 files changed, 11 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 559014e8..58813e41 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.9.8 (TBD, 2019)
+* Bug Fixes
+ * Fixed issue with echoing strings in StdSim. Because they were being sent to a binary buffer, line buffering
+ was being ignored.
+
## 0.9.7 (January 08, 2019)
* Bug Fixes
* Fixed bug when user chooses a zero or negative index when calling ``Cmd.select()``
diff --git a/cmd2/utils.py b/cmd2/utils.py
index a09e8785..ae172fa4 100644
--- a/cmd2/utils.py
+++ b/cmd2/utils.py
@@ -281,10 +281,7 @@ class StdSim(object):
raise TypeError('a bytes-like object is required, not {}'.format(type(b)))
self.byte_buf += b
if self.echo:
- if hasattr(self.inner_stream, 'buffer'):
- self.inner_stream.buffer.write(b)
- else:
- self.inner_stream.write(b.decode(encoding=self.encoding, errors=self.errors))
+ self.inner_stream.buffer.write(b)
def __init__(self, inner_stream, echo: bool = False,
encoding: str='utf-8', errors: str='replace') -> None:
@@ -297,6 +294,7 @@ class StdSim(object):
"""
self.buffer = self.ByteBuf(inner_stream, echo)
self.inner_stream = inner_stream
+ self.echo = echo
self.encoding = encoding
self.errors = errors
@@ -304,8 +302,9 @@ class StdSim(object):
"""Add str to internal bytes buffer and if echo is True, echo contents to inner stream"""
if not isinstance(s, str):
raise TypeError('write() argument must be str, not {}'.format(type(s)))
- b = s.encode(encoding=self.encoding, errors=self.errors)
- self.buffer.write(b)
+ self.buffer.byte_buf += s.encode(encoding=self.encoding, errors=self.errors)
+ if self.echo:
+ self.inner_stream.write(s)
def getvalue(self) -> str:
"""Get the internal contents as a str"""
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 2f727aaf..75d4479a 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -122,7 +122,7 @@ def test_quot_string_if_needed_no():
@pytest.fixture
def stdout_sim():
- stdsim = cu.StdSim(sys.stdout)
+ stdsim = cu.StdSim(sys.stdout, echo=True)
return stdsim
@pytest.fixture