diff --git a/.gitignore b/.gitignore index 5527ae6..c8f66d8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ __pycache__/ *.pyc *.egg-info/ /venv/ +/.coverage +/htmlcov diff --git a/d2warehouse/tests/test_parse_item.py b/d2warehouse/tests/test_parse_item.py new file mode 100644 index 0000000..ea55924 --- /dev/null +++ b/d2warehouse/tests/test_parse_item.py @@ -0,0 +1,71 @@ +import unittest +from d2warehouse.parser import parse_item +from d2warehouse.item import Quality + + +class ParseItemTest(unittest.TestCase): + def test_gem(self): + # chipped diamond + data = bytes.fromhex("1000a0000524740910") + data, item = parse_item(data) + self.assertEqual(data, b"") + self.assertEqual(item.code, "gcw") + self.assertEqual(item.pos_x, 9) + self.assertEqual(item.pos_y, 0) + self.assertTrue(item.is_simple) + + def test_buckler(self): + # white buckler + data = bytes.fromhex("10008000050054a1083f57a9190c01041818fc07") + data, item = parse_item(data) + self.assertEqual(data, b"") + self.assertEqual(item.code, "buc") + self.assertEqual(item.pos_x, 0) + self.assertEqual(item.pos_y, 0) + self.assertEqual(item.quality, Quality.NORMAL) + self.assertFalse(item.is_simple) + self.assertEqual(item.lvl, 12) + + def test_rune(self): + # tal rune + data = bytes.fromhex("1000a0000564f67cfb00") + data, item = parse_item(data) + self.assertEqual(data, b"") + self.assertEqual(item.code, "r07") + self.assertEqual(item.pos_x, 9) + self.assertEqual(item.pos_y, 9) + self.assertTrue(item.is_simple) + + def test_rare_a(self): + # random rare armor + data = bytes.fromhex( + "10008000050014df17c64083c30b866d534c958c39d15b42c0c1e1c08815cd9c04f80dff01" + ) + data, item = parse_item(data) + self.assertEqual(data, b"") + self.assertEqual(item.code, "hla") + self.assertEqual(item.pos_x, 0) + self.assertEqual(item.pos_y, 0) + self.assertEqual(item.quality, Quality.RARE) + self.assertFalse(item.is_simple) + self.assertEqual(item.lvl, 5) + self.assertEqual(len(item.stats), 4) + self.assertEqual(item.defense, 23) + self.assertEqual(item.durability, 28) + self.assertEqual(item.max_durability, 28) + + def test_tp_tome(self): + data = bytes.fromhex("100080000500d4a814daf7275a180240e03f") + data, item = parse_item(data) + self.assertEqual(data, b"") + self.assertEqual(item.code, "tbk") + self.assertEqual(item.quantity, 4) + + def test_superior_sockets(self): + # superior armor with empty sockets + data = bytes.fromhex("10088000050014df175043b1b90cc38d80e3834070b004f41f") + data, item = parse_item(data) + self.assertEqual(data, b"") + self.assertEqual(item.quality, Quality.HIGH) + self.assertEqual(len(item.stats), 2) + self.assertEqual(item.sockets, 2) diff --git a/d2warehouse/tests/test_parse_stash.py b/d2warehouse/tests/test_parse_stash.py new file mode 100644 index 0000000..2181c58 --- /dev/null +++ b/d2warehouse/tests/test_parse_stash.py @@ -0,0 +1,20 @@ +import unittest +from d2warehouse.parser import parse_stash + + +class ParseStashTest(unittest.TestCase): + def test_empty(self): + # empty stash with 3 tabs and some gold + data = bytes.fromhex( + "55aa55aa0100000063000000a40100004400000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000" + "000000004a4d000055aa55aa0100000063000000391b0000440000000000" + "000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000004a4d000055aa55aa01000000630000003905" + "000044000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000004a4d0000" + ) + stash = parse_stash(data) + self.assertEqual(len(stash.tabs), 3) + gold = tuple(tab.gold for tab in stash.tabs) + self.assertEqual(gold, (420, 6969, 1337)) diff --git a/pyproject.toml b/pyproject.toml index 4b5d32c..45206c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,10 @@ dev = [ "black", ] +[tool.setuptools.packages.find] +include = ["d2warehouse*"] +exclude = ["d2warehouse.tests*"] + [project.scripts] d2dump = "d2warehouse.dump:main" d2test = "d2warehouse.test:main" @@ -41,3 +45,16 @@ version = {attr = "d2warehouse.__version__"} [tool.setuptools.package-data] d2warehouse = ["data/*.json"] + +[tool.pytest.ini_options] +addopts = "--cov --cov-report html --cov-report term" + +[tool.coverage.run] +source = ["d2warehouse"] +omit = [ + "d2warehouse/tests/*" +] + +[tool.coverage.report] +precision = 2 +skip_empty = true