1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-12-18 00:18:28 +02:00
Files
jc/tests/test_asciitable_m.py
2022-03-22 15:55:59 -07:00

274 lines
13 KiB
Python

import os
import unittest
from jc.exceptions import ParseError
import jc.parsers.asciitable_m
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
class MyTests(unittest.TestCase):
def test_asciitable_m_nodata(self):
"""
Test 'asciitable_m' with no data
"""
self.assertEqual(jc.parsers.asciitable_m.parse('', quiet=True), [])
def test_asciitable_m_pure_ascii(self):
"""
Test 'asciitable_m' with a pure ASCII table
"""
input = '''
+========+========+========+========+========+========+========+
| type | tota | used | fr ee | shar | buff | avai |
| | l | | | ed | _cac | labl |
| | | | | | he | e |
+========+========+========+========+========+========+========+
| Mem | 3861 | 2228 | 3364 | 1183 | 2743 | 3389 |
| | 332 | 20 | 176 | 2 | 36 | 588 |
+--------+--------+--------+--------+--------+--------+--------+
| | | | | | | |
| | | | | test 2 | | |
+--------+--------+--------+--------+--------+--------+--------+
| last | last | last | ab cde | | | final |
+========+========+========+========+========+========+========+
'''
expected = [
{
"type": "Mem",
"tota_l": "3861\n332",
"used": "2228\n20",
"fr_ee": "3364\n176",
"shar_ed": "1183\n2",
"buff_cac_he": "2743\n36",
"avai_labl_e": "3389\n588"
},
{
"type": None,
"tota_l": None,
"used": None,
"fr_ee": None,
"shar_ed": "test 2",
"buff_cac_he": None,
"avai_labl_e": None
},
{
"type": "last",
"tota_l": "last",
"used": "last",
"fr_ee": "ab cde",
"shar_ed": None,
"buff_cac_he": None,
"avai_labl_e": "final"
}
]
self.assertEqual(jc.parsers.asciitable_m.parse(input, quiet=True), expected)
def test_asciitable_m_unicode(self):
"""
Test 'asciitable_m' with a unicode table
"""
input = '''
╒════════╤════════╤════════╤════════╤════════╤════════╤════════╕
│ type │ tota │ used │ fr ee │ shar │ buff │ avai │
│ │ l │ │ │ ed │ _cac │ labl │
│ │ │ │ │ │ he │ e │
╞════════╪════════╪════════╪════════╪════════╪════════╪════════╡
│ Mem │ 3861 │ 2228 │ 3364 │ 1183 │ 2743 │ 3389 │
│ │ 332 │ 20 │ 176 │ 2 │ 36 │ 588 │
├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
│ Swap │ 2097 │ 0 │ 2097 │ │ │ │
│ │ 148 │ │ 148 │ │ │ │
│ │ │ │ kb │ │ │ │
├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
│ last │ last │ last │ ab cde │ │ │ final │
╘════════╧════════╧════════╧════════╧════════╧════════╧════════╛
'''
expected = [
{
"type": "Mem",
"tota_l": "3861\n332",
"used": "2228\n20",
"fr_ee": "3364\n176",
"shar_ed": "1183\n2",
"buff_cac_he": "2743\n36",
"avai_labl_e": "3389\n588"
},
{
"type": "Swap",
"tota_l": "2097\n148",
"used": "0",
"fr_ee": "2097\n148\nkb",
"shar_ed": None,
"buff_cac_he": None,
"avai_labl_e": None
},
{
"type": "last",
"tota_l": "last",
"used": "last",
"fr_ee": "ab cde",
"shar_ed": None,
"buff_cac_he": None,
"avai_labl_e": "final"
}
]
self.assertEqual(jc.parsers.asciitable_m.parse(input, quiet=True), expected)
def test_asciitable_m_pure_ascii_extra_spaces(self):
"""
Test 'asciitable_m' with a pure ASCII table that has heading and
trailing spaces and newlines.
"""
input = '''
+========+========+========+========+========+========+========+
| type | tota | used | fr ee | shar | buff | avai
| | l | | | ed | _cac | labl
| | | | | | he | e |
+========+========+========+========+========+========+========+
| Mem | 3861 | 2228 | 3364 | 1183 | 2743 | 3389 |
| | 332 | 20 | 176 | 2 | 36 | 588 |
+--------+--------+--------+--------+--------+--------+--------+
| | | | | | | |
| | | | | test 2 | | |
+--------+--------+--------+--------+--------+--------+--------+
| last | last | last | ab cde | | | final
+========+========+========+========+========+========+========+
'''
expected = [
{
"type": "Mem",
"tota_l": "3861\n332",
"used": "2228\n20",
"fr_ee": "3364\n176",
"shar_ed": "1183\n2",
"buff_cac_he": "2743\n36",
"avai_labl_e": "3389\n588"
},
{
"type": None,
"tota_l": None,
"used": None,
"fr_ee": None,
"shar_ed": "test 2",
"buff_cac_he": None,
"avai_labl_e": None
},
{
"type": "last",
"tota_l": "last",
"used": "last",
"fr_ee": "ab cde",
"shar_ed": None,
"buff_cac_he": None,
"avai_labl_e": "final"
}
]
self.assertEqual(jc.parsers.asciitable_m.parse(input, quiet=True), expected)
def test_asciitable_m_unicode_extra_spaces(self):
"""
Test 'asciitable_m' with a pure ASCII table that has heading and
trailing spaces and newlines.
"""
input = '''
╒════════╤════════╤════════╤════════╤════════╤════════╤════════╕
type │ tota │ used │ free │ shar │ buff │ avai
│ l │ │ │ ed │ _cac │ labl
│ │ │ │ │ he │ e
╞════════╪════════╪════════╪════════╪════════╪════════╪════════╡
Mem │ 3861 │ 2228 │ 3364 │ 1183 │ 2743 │ 3389
│ 332 │ 20 │ 176 │ 2 │ 36 │ 588
├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
Swap │ 2097 │ 0 │ 2097 │ │ │
│ 148 │ │ 148 │ │ │
╘════════╧════════╧════════╧════════╧════════╧════════╧════════╛
'''
expected = [
{
"type": "Mem",
"tota_l": "3861\n332",
"used": "2228\n20",
"free": "3364\n176",
"shar_ed": "1183\n2",
"buff_cac_he": "2743\n36",
"avai_labl_e": "3389\n588"
},
{
"type": "Swap",
"tota_l": "2097\n148",
"used": "0",
"free": "2097\n148",
"shar_ed": None,
"buff_cac_he": None,
"avai_labl_e": None
}
]
self.assertEqual(jc.parsers.asciitable_m.parse(input, quiet=True), expected)
def test_asciitable_m_pretty_ansi(self):
"""
Test 'asciitable-m' with a pretty table with ANSI codes
"""
input = '''
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
\x1b[1m \x1b[0m\x1b[1mReleased \x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1mTitle \x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1m Box Office\x1b[0m\x1b[1m \x1b[0m┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
\x1b[36m \x1b[0m\x1b[36mDec 20, 2019\x1b[0m\x1b[36m \x1b[0m│\x1b[35m \x1b[0m\x1b[35mStar Wars: The Rise of Skywalker \x1b[0m\x1b[35m \x1b[0m│\x1b[32m \x1b[0m\x1b[32m $952,110,690\x1b[0m\x1b[32m \x1b[0m│
\x1b[36m \x1b[0m\x1b[36mMay 25, 2018\x1b[0m\x1b[36m \x1b[0m│\x1b[35m \x1b[0m\x1b[35mSolo: A Star Wars Story \x1b[0m\x1b[35m \x1b[0m│\x1b[32m \x1b[0m\x1b[32m $393,151,347\x1b[0m\x1b[32m \x1b[0m│
\x1b[36m \x1b[0m\x1b[36mDec 15, 2017\x1b[0m\x1b[36m \x1b[0m│\x1b[35m \x1b[0m\x1b[35mStar Wars Ep. V111: The Last Jedi\x1b[0m\x1b[35m \x1b[0m│\x1b[32m \x1b[0m\x1b[32m$1,332,539,889\x1b[0m\x1b[32m \x1b[0m│
\x1b[36m \x1b[0m\x1b[36mDec 16, 2016\x1b[0m\x1b[36m \x1b[0m│\x1b[35m \x1b[0m\x1b[35mRogue One: A Star Wars Story \x1b[0m\x1b[35m \x1b[0m│\x1b[32m \x1b[0m\x1b[32m$1,332,439,889\x1b[0m\x1b[32m \x1b[0m│
└──────────────┴───────────────────────────────────┴────────────────┘
'''
expected = [
{
"released": "Dec 20, 2019\nMay 25, 2018\nDec 15, 2017\nDec 16, 2016",
"title": "Star Wars: The Rise of Skywalker\nSolo: A Star Wars Story\nStar Wars Ep. V111: The Last Jedi\nRogue One: A Star Wars Story",
"box_office": "$952,110,690\n$393,151,347\n$1,332,539,889\n$1,332,439,889"
}
]
self.assertEqual(jc.parsers.asciitable_m.parse(input, quiet=True), expected)
def test_asciitable_m_markdown(self):
"""
Test 'asciitable_m' with a markdown table. Should raise a ParseError
"""
input = '''
| type | total | used | free | shared | buff cache | available |
|--------|---------|--------|---------|----------|--------------|-------------|
| Mem | 3861332 | 222820 | 3364176 | 11832 | 274336 | 3389588 |
| Swap | 2097148 | 0 | 2097148 | | | |
'''
self.assertRaises(ParseError, jc.parsers.asciitable_m.parse, input, quiet=True)
def test_asciitable_m_simple(self):
"""
Test 'asciitable_m' with a simple table. Should raise a ParseError
"""
input = '''
type total used free shared buff cache available
------ ------- ------ ------- -------- ------------ -----------
Mem 3861332 222820 3364176 11832 274336 3389588
Swap 2097148 0 2097148
'''
self.assertRaises(ParseError, jc.parsers.asciitable_m.parse, input, quiet=True)
if __name__ == '__main__':
unittest.main()