code: def test_init(self):
      with self.assertRaises(TypeError):
          ConcatDataset(datasets=[0])
      with self.assertRaises(ValueError):
          ConcatDataset(
              datasets=[
                  deepcopy(self.dataset_a_with_pipeline),
                  deepcopy(self.dataset_b),
              ],
              pipeline=[dict(type="MockTransform", return_value=3)],
          )
  
      with self.assertRaises(ValueError):
          ConcatDataset(
              datasets=[
                  deepcopy(self.dataset_a),
                  deepcopy(self.dataset_b_with_pipeline),
              ],
              pipeline=[dict(type="MockTransform", return_value=3)],
          )
      with self.assertRaises(ValueError):
          dataset_a = deepcopy(self.dataset_a)
          dataset_b = OCRDataset(
              metainfo=dict(dummy="dummy"),
              data_root=osp.join(
                  osp.dirname(__file__), "../data/det_toy_dataset"
              ),
              data_prefix=dict(img_path="imgs"),
              ann_file="textdet_test.json",
          )
          ConcatDataset(datasets=[dataset_a, dataset_b])
      # test lazy init
      ConcatDataset(
          datasets=[deepcopy(self.dataset_a), deepcopy(self.dataset_b)],
          pipeline=[dict(type="MockTransform", return_value=3)],
          lazy_init=True,
      )
  
file_path: mmocr/tests/test_datasets/test_dataset_wrapper.py
imports: import os.path
  from copy import deepcopy
  from unittest import TestCase
  from unittest.mock import MagicMock
  from mmengine.registry import init_default_scope
  from mmocr.datasets import ConcatDataset, OCRDataset
  from mmocr.registry import TRANSFORMS
label_desc: Use image node_id 2 for calling the TestConcatDataset obj's underlying member method code with example usage: obj.test_init() without return types