mirror of
https://github.com/mr0xb/spritetagger.git
synced 2026-08-27 20:44:56 -04:00
initial commit
This commit is contained in:
commit
a9412fe58b
7 changed files with 711 additions and 0 deletions
70
test_labelstore.py
Normal file
70
test_labelstore.py
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
import json
|
||||
import unittest
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import labelstore
|
||||
|
||||
|
||||
class SaveLoadRoundTrip(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self._tmp = tempfile.TemporaryDirectory()
|
||||
self.dir = Path(self._tmp.name)
|
||||
self.path = self.dir / 'tags.json'
|
||||
|
||||
def tearDown(self):
|
||||
self._tmp.cleanup()
|
||||
|
||||
def test_save_then_load_round_trips_assignments(self):
|
||||
assignments = {'frame_000.png': 'idle', 'frame_001.png': 'walk'}
|
||||
labelstore.save_labels(self.path, assignments, ['idle', 'walk'])
|
||||
loaded, _labels = labelstore.load_labels(self.path)
|
||||
self.assertEqual(loaded, assignments)
|
||||
|
||||
def test_save_persists_label_list(self):
|
||||
labelstore.save_labels(self.path, {}, ['idle', 'walk', 'crouch'])
|
||||
_assignments, labels = labelstore.load_labels(self.path)
|
||||
self.assertEqual(labels, ['idle', 'walk', 'crouch'])
|
||||
|
||||
def test_save_writes_filenames_not_indices(self):
|
||||
labelstore.save_labels(self.path, {'frame_007.png': 'jump'}, ['jump'])
|
||||
raw = json.loads(self.path.read_text())
|
||||
self.assertIn('frame_007.png', raw['assignments'])
|
||||
self.assertEqual(raw['assignments']['frame_007.png'], 'jump')
|
||||
|
||||
def test_load_missing_file_returns_empty(self):
|
||||
loaded, labels = labelstore.load_labels(self.dir / 'does_not_exist.json')
|
||||
self.assertEqual(loaded, {})
|
||||
self.assertEqual(labels, [])
|
||||
|
||||
def test_load_invalid_json_returns_empty(self):
|
||||
self.path.write_text('{not valid json at all')
|
||||
loaded, labels = labelstore.load_labels(self.path)
|
||||
self.assertEqual(loaded, {})
|
||||
self.assertEqual(labels, [])
|
||||
|
||||
|
||||
class IndexNameConversion(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.frames = [Path('a.png'), Path('b.png'), Path('c.png')]
|
||||
|
||||
def test_to_name_keyed_maps_index_to_filename(self):
|
||||
result = labelstore.to_name_keyed({0: 'idle', 2: 'run'}, self.frames)
|
||||
self.assertEqual(result, {'a.png': 'idle', 'c.png': 'run'})
|
||||
|
||||
def test_to_index_keyed_maps_filename_to_index(self):
|
||||
result = labelstore.to_index_keyed({'a.png': 'idle', 'c.png': 'run'}, self.frames)
|
||||
self.assertEqual(result, {0: 'idle', 2: 'run'})
|
||||
|
||||
def test_to_index_keyed_skips_files_no_longer_present(self):
|
||||
result = labelstore.to_index_keyed({'a.png': 'idle', 'gone.png': 'walk'}, self.frames)
|
||||
self.assertEqual(result, {0: 'idle'})
|
||||
|
||||
def test_to_index_keyed_remaps_after_reorder(self):
|
||||
reordered = [Path('c.png'), Path('a.png'), Path('b.png')]
|
||||
result = labelstore.to_index_keyed({'a.png': 'idle'}, reordered)
|
||||
self.assertEqual(result, {1: 'idle'})
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Loading…
Reference in a new issue