class TestElasticLines(unittest.TestCase): def setUp(self): self.el = ElasticLines() def test_empty(self): self.assertEqual(self.el.to_str(), '') def test_add_line(self): self.el.add_line('foo') self.assertEqual(self.el.to_str(), 'foo') def test_add_lines(self): self.el = ElasticLines() self.el.add_lines(['alice', 'bob', 'carol']) self.assertEqual(self.el.to_str(), 'alice\nbob\ncarol') def test_add_separator(self): self.el.add_separator() self.assertEqual(self.el.to_str(), '') self.el.add_line('foo') self.assertEqual(self.el.to_str(), '---\nfoo') self.el.add_separator() self.el.add_lines(['bar', 'bazzzz']) self.el.add_separator() self.assertEqual(self.el.to_str(), '------\nfoo\n------\nbar\nbazzzz\n------')
def build(self): lines = ElasticLines() cls_name = self._seq.__class__.__name__ lines.add_line(cls_name) lines.add_separator() if self._seq.has_metadata(): lines.add_line('Metadata:') # Python 3 doesn't allow sorting of mixed types so we can't just # use sorted() on the metadata keys. Sort first by type then sort # by value within each type. for key in self._sorted_keys_grouped_by_type(self._seq.metadata): value = self._seq.metadata[key] lines.add_lines(self._format_metadata_key_value(key, value)) if self._seq.has_positional_metadata(): lines.add_line('Positional metadata:') for key in self._seq.positional_metadata.columns.values.tolist(): dtype = self._seq.positional_metadata[key].dtype lines.add_lines( self._format_positional_metadata_column(key, dtype)) lines.add_line('Stats:') for label, value in self._seq._repr_stats(): lines.add_line('%s%s: %s' % (self._indent, label, value)) lines.add_separator() num_lines, num_chars, column_width = self._find_optimal_seq_chunking() # display entire sequence if we can, else display the first two and # last two lines separated by ellipsis if num_lines <= 5: lines.add_lines(self._format_chunked_seq( range(num_lines), num_chars, column_width)) else: lines.add_lines(self._format_chunked_seq( range(2), num_chars, column_width)) lines.add_line('...') lines.add_lines(self._format_chunked_seq( range(num_lines - 2, num_lines), num_chars, column_width)) return lines.to_str()