def test_request_exceptions(self): info = self._get_info_long_y() with self.assertRaises(RequestException): RegionParameter('1,2,0,3', info) with self.assertRaises(RequestException): RegionParameter('1,2,3,0', info) with self.assertRaises(RequestException): RegionParameter('pct:100,2,3,0', info)
def test_syntax_exceptions(self): info = self._get_info_long_y() with self.assertRaises(SyntaxException): RegionParameter('n:1,2,3,4', info) with self.assertRaises(SyntaxException): RegionParameter('1,2,3,q', info) with self.assertRaises(SyntaxException): RegionParameter('1,2,3', info) with self.assertRaises(SyntaxException): RegionParameter('something', info)
def test_populate_slots_from_w_only(self): # w, info = self._get_info_long_y() rp = RegionParameter('full', info) sp = SizeParameter('180,', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '180,') rp = RegionParameter('200,300,500,600', info) sp = SizeParameter('125,', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '125,')
def test_populate_slots_from_h_only(self): # ,h info = self._get_info_long_y() rp = RegionParameter('full', info) sp = SizeParameter(',90', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '73,') rp = RegionParameter('50,290,360,910', info) sp = SizeParameter(',275', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '108,')
def test_populate_slots_from_wh(self): # w,h info = self._get_info_long_y() rp = RegionParameter('full', info) sp = SizeParameter('48,48', rp) self.assertEquals(sp.force_aspect, True) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '48,48') rp = RegionParameter('15,16,23,42', info) sp = SizeParameter('60,60', rp) # upsample! self.assertEquals(sp.force_aspect, True) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '60,60')
def test_populate_slots_from_full(self): # full info = self._get_info_long_y() rp = RegionParameter('full', info) sp = SizeParameter('full', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, FULL_MODE) self.assertEquals(sp.canonical_uri_value, FULL_MODE) rp = RegionParameter('256,256,256,256', info) sp = SizeParameter('full', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, FULL_MODE) self.assertEquals(sp.canonical_uri_value, FULL_MODE)
def test_request_exceptions(self): info = self._get_info_long_y() try: with self.assertRaises(RequestException): RegionParameter('1,2,0,3', info) with self.assertRaises(RequestException): RegionParameter('1,2,3,0', info) with self.assertRaises(RequestException): RegionParameter('pct:100,2,3,0', info) except TypeError: # python < 2.7 self.assertRaises(RequestException, RegionParameter, '1,2,0,3', info) self.assertRaises(RequestException, RegionParameter, '1,2,3,0', info) self.assertRaises(RequestException, RegionParameter, 'pct:100,2,3,0', info)
def test_canonical_uri_value_oob_y_pct(self): info = self._get_info_long_x() # x is long dimension y = 28.3 h = 72.2 rp = RegionParameter('pct:13,%f,17,%f' % (y, h), info) expected_canonical = '468,845,612,2142' self.assertEquals(rp.canonical_uri_value, expected_canonical)
def test_parsing_parameter_either_passes_or_is_exception(self, uri_value): info = build_image_info() rp = RegionParameter('full', info) try: SizeParameter(uri_value, rp) except (RequestException, SyntaxException): pass
def test_str(self): info = self._get_info_long_y() rp1 = RegionParameter('full', info) self.assertEquals(str(rp1), 'full') rp2 = RegionParameter('125,15,120,140', info) self.assertEquals(str(rp2), '125,15,120,140') rp3 = RegionParameter('pct:41.6,7.5,40,70', info) self.assertEquals(str(rp3), 'pct:41.6,7.5,40,70') rp4 = RegionParameter('125,15,200,200', info) self.assertEquals(str(rp4), '125,15,200,200') rp5 = RegionParameter('pct:41.6,7.5,66.6,100', info) self.assertEquals(str(rp5), 'pct:41.6,7.5,66.6,100')
def test_square_mode_long_x(self): # 3600 x 2987 info = self._get_info_long_x() rp = RegionParameter('square', info) self.assertEquals(rp.pixel_x, 306) self.assertEquals(rp.pixel_y, 0) self.assertEquals(rp.pixel_w, 2987) self.assertEquals(rp.pixel_h, 2987)
def test_canonical_uri_value_oob_y_pixel(self): info = self._get_info_long_y() # y is long dimension y = 300 offset = 1 # request would be this many pixels OOB oob_h = info.height - y + offset rp = RegionParameter('29,%d,31,%d' % (y, oob_h), info) expected_canonical = '29,%d,31,%d' % (y, info.height - y) self.assertEquals(rp.canonical_uri_value, expected_canonical)
def test_canonical_uri_value_oob_w_pct(self): info = self._get_info_long_y() # y is long dimension x = 20 w = 81 rp = RegionParameter('pct:%d,13,%d,27' % (x, w), info) self.assertEquals(rp.decimal_w, Decimal('0.8')) expected_canonical = '1181,936,4725,1944' self.assertEquals(rp.canonical_uri_value, expected_canonical)
def test_square_mode_long_y(self): # 5906 x 7200 info = self._get_info_long_y() rp = RegionParameter('square', info) self.assertEquals(rp.pixel_x, 0) self.assertEquals(rp.pixel_y, 647) self.assertEquals(rp.pixel_w, 5906) self.assertEquals(rp.pixel_h, 5906)
def test_zero_width_or_height_is_rejected(self): info = build_image_info() rp = RegionParameter('full', info) with pytest.raises(RequestException): SizeParameter('0,', rp) with pytest.raises(RequestException): SizeParameter(',0', rp) with pytest.raises(RequestException): SizeParameter('0,0', rp)
def test_exceptions(self): info = self._get_info_long_y() rp = RegionParameter('pct:25,25,75,75', info) with self.assertRaises(SyntaxException): SizeParameter('!25,', rp) with self.assertRaises(SyntaxException): SizeParameter('!25', rp) with self.assertRaises(SyntaxException): SizeParameter('25', rp)
def test_tiny_image(self): info = self._get_info_long_x() rp = RegionParameter('full', info) sp = SizeParameter('1,', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '1,') self.assertEquals(sp.w, 1) self.assertEquals(sp.h, 1)
def test_syntax_exceptions(self): info = self._get_info_long_y() try: with self.assertRaises(SyntaxException): RegionParameter('n:1,2,3,4', info) with self.assertRaises(SyntaxException): RegionParameter('1,2,3,q', info) with self.assertRaises(SyntaxException): RegionParameter('1,2,3', info) with self.assertRaises(SyntaxException): RegionParameter('something', info) except TypeError: # python < 2.7 self.assertRaises(SyntaxException, RegionParameter, 'something', info) self.assertRaises(SyntaxException, RegionParameter, '1,2,3,q', info) self.assertRaises(SyntaxException, RegionParameter, '1,2,3', info) self.assertRaises(SyntaxException, RegionParameter, 'something', info)
def test_canonical_uri_value_oob_w_pixel(self): info = self._get_info_long_x() # x is long dimension x = 200 offset = 1 oob_w = info.width - x + offset rp = RegionParameter('%d,13,%d,17' % (x, oob_w), info) expected_canonical = '%d,13,%d,17' % (x, info.width - x) # Note that the below will need to be changed if decimal precision is # changed (currently 25 places) self.assertEquals(rp.decimal_w, Decimal('0.9444444444444444444444444')) self.assertEquals(rp.canonical_uri_value, expected_canonical)
def test_populate_slots_from_pct(self): info = self._get_info_long_y() rp = RegionParameter('pct:25,25,50,50', info) self.assertEquals(rp.pixel_x, int(info.width * 0.25)) self.assertEquals(rp.pixel_y, int(info.height * 0.25)) self.assertEquals(rp.pixel_w, int(info.width * 0.50)) self.assertEquals(rp.pixel_h, int(info.height * 0.50)) self.assertEquals(rp.decimal_x, Decimal('0.25')) self.assertEquals(rp.decimal_y, Decimal('0.25')) self.assertEquals(rp.decimal_w, Decimal('0.50')) self.assertEquals(rp.decimal_h, Decimal('0.50'))
def test_populate_slots_from_pixel(self): info = self._get_info_long_x() rp = RegionParameter('797,900,1594,1600', info) self.assertEquals(rp.pixel_x, 797) self.assertEquals(rp.pixel_y, 900) self.assertEquals(rp.pixel_w, 1594) self.assertEquals(rp.pixel_h, 1600) self.assertEquals(rp.decimal_x, rp.pixel_x / Decimal(str(info.width))) self.assertEquals(rp.decimal_y, rp.pixel_y / Decimal(str(info.height))) self.assertEquals(rp.decimal_w, rp.pixel_w / Decimal(str(info.width))) self.assertEquals(rp.decimal_h, rp.pixel_h / Decimal(str(info.height)))
def test_str_representation(self): info = build_image_info() rp = RegionParameter('full', info) for uri_value in [ 'full', 'pct:50', '50,', ',50', '!50,50', ]: sp = SizeParameter(uri_value, rp) self.assertEquals(str(sp), uri_value)
def test_populate_slots_from_pct(self): # pct:n info = self._get_info_long_y() rp = RegionParameter('full', info) sp = SizeParameter('pct:25', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PCT_MODE) self.assertEquals(sp.canonical_uri_value, '1476,') rp = RegionParameter('256,256,256,256', info) sp = SizeParameter('pct:25', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PCT_MODE) self.assertEquals(sp.canonical_uri_value, '64,') rp = RegionParameter('pct:0,0,50,50', info) sp = SizeParameter('pct:25', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PCT_MODE) self.assertEquals(sp.canonical_uri_value, '738,')
def test_exceptions(self): info = self._get_info_long_y() rp = RegionParameter('pct:25,25,75,75', info) try: with self.assertRaises(SyntaxException): SizeParameter('!25,', rp) with self.assertRaises(SyntaxException): SizeParameter('!25', rp) with self.assertRaises(SyntaxException): SizeParameter('25', rp) except TypeError: # python < 2.7 self.assertRaises(SyntaxException, SizeParameter, '!25,', rp) self.assertRaises(SyntaxException, SizeParameter, '!25', rp) self.assertRaises(SyntaxException, SizeParameter, '25', rp)
def test_populate_slots_from_bang_wh(self): # !w,h info = self._get_info_long_y() rp = RegionParameter('full', info) sp = SizeParameter('!120,140', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '114,') rp = RegionParameter('0,0,125,160', info) sp = SizeParameter( '!120,140', rp, ) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '109,') rp = RegionParameter('0,0,125,160', info) sp = SizeParameter('!130,140', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '109,') rp = RegionParameter('50,80,140,160', info) sp = SizeParameter('!130,180', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '130,') rp = RegionParameter('50,80,140,160', info) sp = SizeParameter('!145,165', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '144,') rp = RegionParameter('50,80,140,180', info) sp = SizeParameter('!145,185', rp) self.assertEquals(sp.force_aspect, False) self.assertEquals(sp.mode, PIXEL_MODE) self.assertEquals(sp.canonical_uri_value, '143,')
def region_param(self, image_info): return RegionParameter( uri_value=self.region_value, image_info=image_info )
def test_anything_except_four_coordinates_is_error(self): info = build_image_info() with self.assertRaises(SyntaxException): RegionParameter('pct:100', info)
def test_recognise_full_mode_if_correct_dimensions(self): info = build_image_info(1500, 800) rp = RegionParameter('0,0,1500,800', info) self.assertEquals(rp.mode, FULL_MODE)
def test_negative_y_percentage_is_rejected(self): info = build_image_info() with self.assertRaises(RequestException): rp = RegionParameter('pct:100,-5,100,100', info)
def test_very_small_percentage_height_is_positive(self): info = build_image_info(width=100, height=1) rp = RegionParameter('full', info) sp = SizeParameter('pct:50', rp) self.assertEquals(sp.h, 1)