import unittest

from io import StringIO

from openmdao.api import Problem
from openmdao.test_suite.scripts.circle_opt import CircleOpt

from openmdao.devtools.debug import config_summary


class TestDebug(unittest.TestCase):

    def test_summary(self):
        prob = Problem(model=CircleOpt())
        prob.setup()
        prob.run_driver()

        stdout = StringIO()
        config_summary(prob, stream=stdout)
        text = stdout.getvalue().split('\n')

        expected = [
            "============== Problem Summary ============",
            "Groups:               1",
            "Components:           7",
            "Max tree depth:       1",
            "",
            "Design variables:            3   Total size:       21",
            "",
            "Nonlinear Constraints:       4   Total size:       21",
            "    equality:                2                     11",
            "    inequality:              2                     10",
            "",
            "Linear Constraints:          1   Total size:        1",
            "    equality:                1                      1",
            "    inequality:              0                      0",
            "",
            "Objectives:                  1   Total size:        1",
            "",
            "Input variables:            11   Total size:       82",
            "Output variables:            9   Total size:       67",
            "",
            "Total connections: 10   Total transfer data size: 72",
            "",
            "Driver type: Driver",
            "Linear Solvers: [LinearRunOnce]",
            "Nonlinear Solvers: [NonlinearRunOnce]"
        ]

        for i in range(len(expected)):
            self.assertEqual(text[i], expected[i],
                            '\nExpected: %s\nReceived: %s\n' % (expected[i], text[i]))


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