def test_reads_meta_schema(self):
        temp_fs = fsopendir('temp://')
        filename = temp_fs.getsyspath('temp.h5')

        # use minimal descriptor to make the test simplier.
        descriptor = {
            'pos': Int64Col(),
            'name': StringCol(itemsize=255),
            'type': StringCol(itemsize=255)
        }
        rows = [[('pos', float(i)), ('name', str(i)), ('type', str(i))]
                for i in range(2)]
        self._write_test_meta(temp_fs, 'schema', descriptor, rows)

        with open_file(filename, mode='r') as h5_file:
            ret = HDFReader._read_meta(h5_file)
            self.assertIn('schema', ret)
            self.assertEqual(len(ret['schema']),
                             3)  # One for template, other for columns.
            self.assertEqual(ret['schema'][0], MPRowsFile.SCHEMA_TEMPLATE)
            self.assertEqual(len(ret['schema'][1]),
                             len(MPRowsFile.SCHEMA_TEMPLATE))
            self.assertEqual(len(ret['schema'][0]),
                             len(MPRowsFile.SCHEMA_TEMPLATE))

            pos_index = MPRowsFile.SCHEMA_TEMPLATE.index('pos')
            name_index = MPRowsFile.SCHEMA_TEMPLATE.index('name')
            self.assertEqual(ret['schema'][1][pos_index], 0)
            self.assertEqual(ret['schema'][2][pos_index], 1.0)

            self.assertEqual(ret['schema'][1][name_index], '0')
            self.assertEqual(ret['schema'][2][name_index], '1')
    def test_reads_meta_children(self, fake_child):
        fake_child.return_value = {}
        temp_fs = fsopendir("temp://")
        filename = temp_fs.getsyspath("temp.h5")
        _create_h5(filename)

        with open_file(filename, mode="r") as h5_file:
            HDFReader._read_meta(h5_file)

            # _read_meta_child was called properly
            self.assertEqual(len(fake_child.mock_calls), 7)
            self.assertIn(call(h5_file, "about"), fake_child.mock_calls)
            self.assertIn(call(h5_file, "excel"), fake_child.mock_calls)
            self.assertIn(call(h5_file, "row_spec"), fake_child.mock_calls)
            self.assertIn(call(h5_file, "source"), fake_child.mock_calls)
            self.assertIn(call(h5_file, "comments"), fake_child.mock_calls)
            self.assertIn(call(h5_file, "geo"), fake_child.mock_calls)
            self.assertIn(call(h5_file, "schema"), fake_child.mock_calls)
    def test_reads_meta_children(self, fake_child):
        fake_child.return_value = {}
        temp_fs = fsopendir('temp://')
        filename = temp_fs.getsyspath('temp.h5')
        _create_h5(filename)

        with open_file(filename, mode='r') as h5_file:
            HDFReader._read_meta(h5_file)

            # _read_meta_child was called properly
            self.assertEqual(len(fake_child.mock_calls), 7)
            self.assertIn(call(h5_file, 'about'), fake_child.mock_calls)
            self.assertIn(call(h5_file, 'excel'), fake_child.mock_calls)
            self.assertIn(call(h5_file, 'row_spec'), fake_child.mock_calls)
            self.assertIn(call(h5_file, 'source'), fake_child.mock_calls)
            self.assertIn(call(h5_file, 'comments'), fake_child.mock_calls)
            self.assertIn(call(h5_file, 'geo'), fake_child.mock_calls)
            self.assertIn(call(h5_file, 'schema'), fake_child.mock_calls)
    def test_returns_default_template(self, fake_child):
        fake_child.return_value = {}
        temp_fs = fsopendir("temp://")
        filename = temp_fs.getsyspath("temp.h5")
        _create_h5(filename)

        with open_file(filename, mode="r") as h5_file:
            ret = HDFReader._read_meta(h5_file)
            expected_keys = ["about", "excel", "row_spec", "source", "comments", "geo", "schema"]
            self.assertEqual(sorted(expected_keys), sorted(ret.keys()))
    def test_returns_default_template(self, fake_child):
        fake_child.return_value = {}
        temp_fs = fsopendir('temp://')
        filename = temp_fs.getsyspath('temp.h5')
        _create_h5(filename)

        with open_file(filename, mode='r') as h5_file:
            ret = HDFReader._read_meta(h5_file)
            expected_keys = [
                'about', 'excel', 'row_spec', 'source', 'comments', 'geo',
                'schema'
            ]
            self.assertEqual(sorted(expected_keys), sorted(ret.keys()))
    def test_reads_meta_schema(self):
        temp_fs = fsopendir("temp://")
        filename = temp_fs.getsyspath("temp.h5")

        # use minimal descriptor to make the test simplier.
        descriptor = {"pos": Int64Col(), "name": StringCol(itemsize=255), "type": StringCol(itemsize=255)}
        rows = [[("pos", float(i)), ("name", str(i)), ("type", str(i))] for i in range(2)]
        self._write_test_meta(temp_fs, "schema", descriptor, rows)

        with open_file(filename, mode="r") as h5_file:
            ret = HDFReader._read_meta(h5_file)
            self.assertIn("schema", ret)
            self.assertEqual(len(ret["schema"]), 3)  # One for template, other for columns.
            self.assertEqual(ret["schema"][0], MPRowsFile.SCHEMA_TEMPLATE)
            self.assertEqual(len(ret["schema"][1]), len(MPRowsFile.SCHEMA_TEMPLATE))
            self.assertEqual(len(ret["schema"][0]), len(MPRowsFile.SCHEMA_TEMPLATE))

            pos_index = MPRowsFile.SCHEMA_TEMPLATE.index("pos")
            name_index = MPRowsFile.SCHEMA_TEMPLATE.index("name")
            self.assertEqual(ret["schema"][1][pos_index], 0)
            self.assertEqual(ret["schema"][2][pos_index], 1.0)

            self.assertEqual(ret["schema"][1][name_index], "0")
            self.assertEqual(ret["schema"][2][name_index], "1")