mirror of
https://github.com/mr0xb/spritetagger.git
synced 2026-08-27 20:44:56 -04:00
70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
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()
|