import unittest,decimal
from data_contract import row_digest,canonical_row,quote_identifier,select_expression
class DataContractTests(unittest.TestCase):
 def test_null_and_empty_are_distinct(self):self.assertNotEqual(row_digest([None]),row_digest(['']))
 def test_full_unsigned_id_preserved(self):self.assertIn('18446744073709551615',canonical_row(['18446744073709551615']).decode())
 def test_utf8_and_control_roundtrip(self):
  import json
  value='中文😀\n\x00'
  self.assertEqual(json.loads(canonical_row([value])),[value])
 def test_column_boundaries_unambiguous(self):self.assertNotEqual(row_digest(['ab','c']),row_digest(['a','bc']))
 def test_decimal_scale_preserved(self):self.assertNotEqual(row_digest(['1.00']),row_digest(['1']))
 def test_quote_identifier(self):self.assertEqual(quote_identifier('by'),chr(96)+'by'+chr(96))
 def test_unsigned_is_cast_to_text(self):self.assertIn('CAST(',select_expression({'COLUMN_NAME':'id','DATA_TYPE':'bigint'}))
 def test_binary_is_hex_not_text(self):self.assertTrue(select_expression({'COLUMN_NAME':'b','DATA_TYPE':'blob'}).startswith('HEX('))
if __name__=='__main__':unittest.main()
