#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# pylint: disable=module-missing-docstring,class-missing-docstring

from __future__ import print_function

import os
import tempfile
import unittest

import generate_schema_doc

this_dir = os.path.dirname(__file__)


class SchemaTests(unittest.TestCase):

  def testActualSchemaAgainstReadme(self):
    output = tempfile.mktemp()
    generate_schema_doc.Main(
        os.path.join(this_dir, 'cros_config_schema.yaml'),
        output)
    with open(output, 'rb') as output_stream:
      output_lines = output_stream.read().decode('utf-8').splitlines()
      with open(os.path.join(this_dir, '../README.md'), 'rb') as readme_stream:
        readme_lines = readme_stream.read().decode('utf-8').splitlines()
        readme_schema_lines = []
        in_section = False
        for line in readme_lines:
          if 'begin_definitions' in line:
            in_section = True

          if in_section:
            readme_schema_lines.append(line)

          if 'end_definitions' in line:
            break

        self.assertEqual(
            output_lines,
            readme_schema_lines,
            'Schema does not match README.\n'
            'Please run: python3 -m cros_config_host.generate_schema_doc '
            '-o README.md')

    os.remove(output)


if __name__ == '__main__':
  unittest.main()
