code: def test_transformation(self):
      special_sample = UTCnSample({"x": "", "y": "negative"})
      self.assertEqual([], trans_method.transform(special_sample))
  
      special_sample = UTCnSample(
          {"x": "~!@#$%^7890\"'", "y": "negative"}
      )
      self.assertEqual([], trans_method.transform(special_sample))
  
      # test if the item change
      random.seed(100)
      change_sample = trans_method.transform(sample, n=3)
      self.assertEqual(3, len(change_sample))
      for s in change_sample:
          self.assertEqual(
              sample.get_tokens("x")[:1], s.get_tokens("x")[:1]
          )
          self.assertEqual(
              sample.get_tokens("x")[3:6], s.get_tokens("x")[3:6]
          )
          self.assertEqual(
              sample.get_tokens("x")[-1:], s.get_tokens("x")[-1:]
          )
  
imports: import unittest
  import random
  from textflint.input.component.sample import UTCnSample
  from textflint.generation.transformation.UTCN import CnHomophones
label_desc: Use image node_id 1 for calling the TestHomophones obj's underlying member method code with example usage: obj.test_transformation() without return types