Beispiel #1
0
 def test_output_valiant_background_color(self):
   """Valiant file with background color."""
   img = Image.open('testdata/full-image.png')
   self.args.bg_color = bg_color_spec.build('16')
   self.process_image(img)
   self.args.output = self.args.tmpfile('full-image.o')
   self.create_output()
   self.assert_file_eq(self.args.output, self.golden('bg-color', 'o'))
Beispiel #2
0
 def test_output_valiant_sprite_more(self):
   """Valiant file for sprites with more colors and background color."""
   img = Image.open('testdata/reticule-more.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.is_sprite = True
   self.process_image(img)
   self.args.output = self.args.tmpfile('reticule-more.o')
   self.create_output()
   self.golden_file_prefix = 'reticule-more'
   self.assert_file_eq(self.args.output, self.golden(None, 'o'))
Beispiel #3
0
 def test_output_background_color(self):
   """Background color option sets the background color."""
   img = Image.open('testdata/full-image.png')
   self.args.bg_color = bg_color_spec.build('16')
   self.process_image(img)
   self.create_output()
   self.assert_output_result('chr', golden_suffix='-bg-color')
   self.assert_output_result('nametable', golden_suffix='-bg-color')
   self.assert_output_result('palette', golden_suffix='-bg-color')
   self.assert_output_result('attribute')
Beispiel #4
0
 def test_output_background_color_pair(self):
   """Background color spec can have look value and fill value."""
   img = Image.open('testdata/full-image.png')
   self.args.bg_color = bg_color_spec.build('16=0f')
   self.process_image(img)
   self.create_output()
   self.assert_output_result('chr', golden_suffix='-bg-color')
   self.assert_output_result('nametable', golden_suffix='-bg-color')
   self.assert_output_result('palette', golden_suffix='-black-color')
   self.assert_output_result('attribute')
Beispiel #5
0
 def test_output_background_color_mask(self):
   """Using a mask requires the mask in the bg_color_spec."""
   img = Image.open('testdata/full-image-mask.png')
   self.args.bg_color = bg_color_spec.build('34=30')
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'full-image'
   self.assert_output_result('chr')
   self.assert_output_result('nametable')
   self.assert_output_result('palette')
   self.assert_output_result('attribute')
Beispiel #6
0
 def test_output_combines_color_with_background(self):
   """Palette guesser will take background color into account."""
   img = Image.open('testdata/combine-colors.png')
   self.args.bg_color = bg_color_spec.build('0f')
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'combine-colors'
   self.assert_output_result('chr')
   self.assert_output_result('nametable')
   self.assert_output_result('palette')
   self.assert_output_result('attribute')
Beispiel #7
0
 def test_error_background_but_already_filled(self):
   """If background color cannot fit into any guessed palette, throw error."""
   img = Image.open('testdata/full-image.png')
   self.args.bg_color = bg_color_spec.build('19')
   self.process_image(img)
   self.assertTrue(self.err.has())
   es = self.err.get()
   for e in es:
     msg = '{0} {1}'.format(type(e).__name__, e)
     self.assertEqual(msg, ('PaletteTooManySubsets - valid: 38-30-16-01\n' +
                            "subsets that can't be merged: [30-19]"))
 def test_error_free_sprite_257(self):
   """Sprite mode using free traversal, throws an error when chr overflows."""
   img = Image.open('testdata/free257.png')
   self.args.bg_color = bg_color_spec.build('39=34')
   self.args.is_sprite = True
   self.args.traversal = 'free'
   self.process_image(img)
   self.assertTrue(self.err.has())
   errs = self.err.get()
   expect_errors = ['NametableOverflow 1024 at tile (152y,8x)']
   actual_errors = ['%s %s' % (type(e).__name__, str(e)) for e in errs]
   self.assertEqual(actual_errors, expect_errors)
Beispiel #9
0
 def test_error_background_color_conflict(self):
   """If background color does not match explicit palette, throw error."""
   img = Image.open('testdata/full-image.png')
   palette_text = 'P/30-38-16-01/30-19-01-01/'
   self.args.bg_color = bg_color_spec.build('01')
   self.process_image(img, palette_text=palette_text)
   self.assertTrue(self.err.has())
   es = self.err.get()
   for e in es:
     msg = '{0} {1}'.format(type(e).__name__, e)
     self.assertEqual(msg, ('PaletteBackgroundColorConflictError between '
                            'palette /30/ <> bg color /1/'))
 def test_output_sprite_color_mask(self):
   """Bg color spec with mask can be used for sprite images."""
   img = Image.open('testdata/full-image-mask.png')
   self.args.is_sprite = True
   self.args.bg_color = bg_color_spec.build('34=30')
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'full-image'
   self.assert_output_result('chr', '-mask-sprite')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette', '-mask-sprite')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist', '-mask-sprite')
Beispiel #11
0
 def test_output_sprite_as_nametable(self):
   """Some images can be either nametable or sprites."""
   img = Image.open('testdata/reticule.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.order = 1
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'reticule'
   self.assert_output_result('chr', '-as-nametable')
   self.assert_output_result('nametable')
   self.assert_output_result('palette')
   self.assert_output_result('attribute')
   self.assert_not_exist('spritelist')
Beispiel #12
0
 def test_output_sprite(self):
   """Sprite mode."""
   img = Image.open('testdata/reticule.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.is_sprite = True
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'reticule'
   self.assert_output_result('chr')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette', '-sprite')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist')
Beispiel #13
0
 def test_output_sprite_more_colors(self):
   """Sprite mode for image that must use sprites, due to palette."""
   img = Image.open('testdata/reticule-more.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.is_sprite = True
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'reticule'
   self.assert_output_result('chr', '-more')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette', '-more')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist', '-more')
Beispiel #14
0
 def test_output_sprite_as_nametable(self):
   """Some images can be either nametable or sprites."""
   img = Image.open('testdata/reticule.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.order = 1
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'reticule'
   self.assert_output_result('chr', '-as-nametable')
   self.assert_output_result('nametable')
   self.assert_output_result('palette')
   self.assert_output_result('attribute')
   self.assert_not_exist('spritelist')
Beispiel #15
0
 def test_error_couldnt_convert_rgb(self):
   """Free traversal gracefully handles color conversion errors."""
   img = Image.open('testdata/free-sprites-couldnt-convert-rgb.png')
   self.args.bg_color = bg_color_spec.build('39=34')
   self.args.is_sprite = True
   self.args.traversal = 'free'
   self.process_image(img)
   self.assertTrue(self.err.has())
   errs = self.err.get()
   expect_errors = ['CouldntConvertRGB : R ff, G ff, B 00 @ ' +
                    'tile (26y,4x) / pixel (209y,34x)']
   actual_errors = ['%s %s' % (type(e).__name__, str(e)) for e in errs]
   self.assertEqual(actual_errors, expect_errors)
 def test_output_sprite_more_colors_as_nametable(self):
   """Nametable mode for image that must use sprites, throw error."""
   img = Image.open('testdata/reticule-more.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.process_image(img)
   self.assertTrue(self.err.has())
   errs = self.err.get()
   expect_errors = ['PaletteOverflowError @ block (0y,0x)',
                    'PaletteOverflowError @ block (0y,1x)',
                    'PaletteOverflowError @ block (1y,0x)',
                    'PaletteOverflowError @ block (1y,1x)']
   actual_errors = ['%s %s' % (type(e).__name__, str(e)) for e in errs]
   self.assertEqual(actual_errors, expect_errors)
Beispiel #17
0
 def test_view_for_free_sprite_hard(self):
   """View for the zones in free sprites with hard areas."""
   img = Image.open('testdata/free-sprites-hard.png')
   self.args.bg_color = bg_color_spec.build('00=30')
   self.args.is_sprite = True
   self.args.traversal = 'free'
   self.args.clear_views()
   self.args.free_zone_view = self.args.tmppng('free-zone-hard')
   self.process_image(img)
   a = app.Application()
   a.create_views(self.ppu_memory, self.args, img)
   self.golden_file_prefix = 'free-zone-hard'
   self.assert_file_eq(self.args.free_zone_view, self.golden('view', 'png'))
Beispiel #18
0
 def test_output_free_sprite_colors_8x16_traversal(self):
   """Sprite mode using free traversal, palette is decided based on pair."""
   img = Image.open('testdata/free-sprites-colors.png')
   self.args.bg_color = bg_color_spec.build('00=30')
   self.args.is_sprite = True
   self.args.traversal = 'free-8x16'
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'free-sprites-8x16-colors'
   self.assert_output_result('chr')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist')
Beispiel #19
0
 def test_view_for_free_sprite_hard(self):
     """View for the zones in free sprites with hard areas."""
     img = Image.open('testdata/free-sprites-hard.png')
     self.args.bg_color = bg_color_spec.build('00=30')
     self.args.is_sprite = True
     self.args.traversal = 'free'
     self.args.clear_views()
     self.args.free_zone_view = self.args.tmppng('free-zone-hard')
     self.process_image(img)
     a = app.Application()
     a.create_views(self.ppu_memory, self.args, img)
     self.golden_file_prefix = 'free-zone-hard'
     self.assert_file_eq(self.args.free_zone_view,
                         self.golden('view', 'png'))
Beispiel #20
0
 def test_output_free_sprite_256(self):
   """Sprite mode using free traversal, with 256 chr tiles."""
   img = Image.open('testdata/free256.png')
   self.args.bg_color = bg_color_spec.build('39=34')
   self.args.is_sprite = True
   self.args.traversal = 'free'
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'free256'
   self.assert_output_result('chr')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist')
Beispiel #21
0
 def test_output_free_sprite_multi_traversal(self):
   """Sprite mode using free traversal and regions are taller than one tile."""
   img = Image.open('testdata/free-sprites-multi.png')
   self.args.bg_color = bg_color_spec.build('00=30')
   self.args.is_sprite = True
   self.args.traversal = 'free'
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'free-sprites'
   self.assert_output_result('chr', '-multi')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist', '-multi')
Beispiel #22
0
 def test_output_free_sprite_256(self):
     """Sprite mode using free traversal, with 256 chr tiles."""
     img = Image.open('testdata/free256.png')
     self.args.bg_color = bg_color_spec.build('39=34')
     self.args.is_sprite = True
     self.args.traversal = 'free'
     self.process_image(img)
     self.create_output()
     self.golden_file_prefix = 'free256'
     self.assert_output_result('chr')
     self.assert_not_exist('nametable')
     self.assert_output_result('palette')
     self.assert_not_exist('attribute')
     self.assert_output_result('spritelist')
Beispiel #23
0
 def test_output_free_sprite_multi_traversal(self):
     """Sprite mode using free traversal and regions are taller than one tile."""
     img = Image.open('testdata/free-sprites-multi.png')
     self.args.bg_color = bg_color_spec.build('00=30')
     self.args.is_sprite = True
     self.args.traversal = 'free'
     self.process_image(img)
     self.create_output()
     self.golden_file_prefix = 'free-sprites'
     self.assert_output_result('chr', '-multi')
     self.assert_not_exist('nametable')
     self.assert_output_result('palette')
     self.assert_not_exist('attribute')
     self.assert_output_result('spritelist', '-multi')
Beispiel #24
0
 def test_output_free_sprite_colors_8x16_traversal(self):
     """Sprite mode using free traversal, palette is decided based on pair."""
     img = Image.open('testdata/free-sprites-colors.png')
     self.args.bg_color = bg_color_spec.build('00=30')
     self.args.is_sprite = True
     self.args.traversal = 'free-8x16'
     self.process_image(img)
     self.create_output()
     self.golden_file_prefix = 'free-sprites-8x16-colors'
     self.assert_output_result('chr')
     self.assert_not_exist('nametable')
     self.assert_output_result('palette')
     self.assert_not_exist('attribute')
     self.assert_output_result('spritelist')
Beispiel #25
0
 def test_error_couldnt_convert_rgb(self):
     """Free traversal gracefully handles color conversion errors."""
     img = Image.open('testdata/free-sprites-couldnt-convert-rgb.png')
     self.args.bg_color = bg_color_spec.build('39=34')
     self.args.is_sprite = True
     self.args.traversal = 'free'
     self.process_image(img)
     self.assertTrue(self.err.has())
     errs = self.err.get()
     expect_errors = [
         'CouldntConvertRGB : R ff, G ff, B 00 @ ' +
         'tile (26y,4x) / pixel (209y,34x)'
     ]
     actual_errors = ['%s %s' % (type(e).__name__, str(e)) for e in errs]
     self.assertEqual(actual_errors, expect_errors)
Beispiel #26
0
 def test_output_free_sprite_colors_locked_8x16_traversal(self):
     """Sprite mode using free traversal, locked flag disables flip bits."""
     img = Image.open('testdata/free-sprites-colors.png')
     self.args.bg_color = bg_color_spec.build('00=30')
     self.args.is_sprite = True
     self.args.is_locked_tiles = True
     self.args.traversal = 'free-8x16'
     self.process_image(img)
     self.create_output()
     self.golden_file_prefix = 'free-sprites-8x16-colors'
     self.assert_output_result('chr', '-locked')
     self.assert_not_exist('nametable')
     self.assert_output_result('palette')
     self.assert_not_exist('attribute')
     self.assert_output_result('spritelist', '-locked')
Beispiel #27
0
 def test_views_sprite(self):
   """Create views for a sprite image."""
   img = Image.open('testdata/reticule.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.is_sprite = True
   self.args.nametable_view = None
   self.args.colorization_view = None
   self.process_image(img)
   a = app.Application()
   a.create_views(self.ppu_memory, self.args, img)
   self.golden_file_prefix = 'reticule'
   self.assert_file_eq(self.args.palette_view, self.golden('pal-view', 'png'))
   self.assert_file_eq(self.args.reuse_view, self.golden('reuse-view', 'png'))
   self.assert_file_eq(self.args.chr_view, self.golden('chr-view', 'png'))
   self.assert_file_eq(self.args.grid_view, self.golden('grid-view', 'png'))
Beispiel #28
0
 def test_output_free_sprite_colors_locked_8x16_traversal(self):
   """Sprite mode using free traversal, locked flag disables flip bits."""
   img = Image.open('testdata/free-sprites-colors.png')
   self.args.bg_color = bg_color_spec.build('00=30')
   self.args.is_sprite = True
   self.args.is_locked_tiles = True
   self.args.traversal = 'free-8x16'
   self.process_image(img)
   self.create_output()
   self.golden_file_prefix = 'free-sprites-8x16-colors'
   self.assert_output_result('chr', '-locked')
   self.assert_not_exist('nametable')
   self.assert_output_result('palette')
   self.assert_not_exist('attribute')
   self.assert_output_result('spritelist', '-locked')
Beispiel #29
0
 def test_views_sprite(self):
   """Create views for a sprite image."""
   img = Image.open('testdata/reticule.png')
   self.args.bg_color = bg_color_spec.build('30')
   self.args.is_sprite = True
   self.args.nametable_view = None
   self.args.colorization_view = None
   self.process_image(img)
   a = app.Application()
   a.create_views(self.ppu_memory, self.args, img)
   self.golden_file_prefix = 'reticule'
   self.assert_file_eq(self.args.palette_view, self.golden('pal-view', 'png'))
   self.assert_file_eq(self.args.reuse_view, self.golden('reuse-view', 'png'))
   self.assert_file_eq(self.args.chr_view, self.golden('chr-view', 'png'))
   self.assert_file_eq(self.args.grid_view, self.golden('grid-view', 'png'))
Beispiel #30
0
 def test_bg_color_spec_simple(self):
     spec = bg_color_spec.build('01')
     self.assertEqual(spec.mask, None)
     self.assertEqual(spec.fill, 1)
Beispiel #31
0
 def test_bg_color_spec_pair(self):
   spec = bg_color_spec.build('01=02')
   self.assertEqual(spec.mask, 1)
   self.assertEqual(spec.fill, 2)
Beispiel #32
0
 def test_bg_color_spec_pair(self):
     spec = bg_color_spec.build('01=02')
     self.assertEqual(spec.mask, 1)
     self.assertEqual(spec.fill, 2)
Beispiel #33
0
 def test_bg_color_spec_simple(self):
   spec = bg_color_spec.build('01')
   self.assertEqual(spec.mask, None)
   self.assertEqual(spec.fill, 1)