blob: 327d6bf727313306ce01d9118041d6f9c248cda8 [file] [log] [blame]
#! /usr/bin/env vpython3
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for ini.py."""
import os
import sys
import textwrap
import unittest
sys.path.append(
os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..')))
from pylib.local.emulator import ini
class IniTest(unittest.TestCase):
def testLoadsBasic(self):
ini_str = textwrap.dedent("""\
foo.bar = 1
foo.baz= example
bar.bad =/path/to/thing
[section_1]
foo.bar = 1
foo.baz= example
[section_2]
foo.baz= example
bar.bad =/path/to/thing
[section_1]
bar.bad =/path/to/thing
""")
expected = {
'foo.bar': '1',
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
'section_1': {
'foo.bar': '1',
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
},
'section_2': {
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
},
}
self.assertEqual(expected, ini.loads(ini_str))
def testLoadsDuplicatedKeysStrictFailure(self):
ini_str = textwrap.dedent("""\
foo.bar = 1
foo.baz = example
bar.bad = /path/to/thing
foo.bar = duplicate
""")
with self.assertRaises(ValueError):
ini.loads(ini_str, strict=True)
def testLoadsDuplicatedKeysInSectionStrictFailure(self):
ini_str = textwrap.dedent("""\
[section_1]
foo.bar = 1
foo.baz = example
bar.bad = /path/to/thing
foo.bar = duplicate
""")
with self.assertRaises(ValueError):
ini.loads(ini_str, strict=True)
def testLoadsPermissive(self):
ini_str = textwrap.dedent("""\
foo.bar = 1
foo.baz = example
bar.bad = /path/to/thing
foo.bar = duplicate
[section_1]
foo.bar = 1
foo.baz = example
bar.bad = /path/to/thing
foo.bar = duplicate
""")
expected = {
'foo.bar': 'duplicate',
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
'section_1': {
'foo.bar': 'duplicate',
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
},
}
self.assertEqual(expected, ini.loads(ini_str, strict=False))
def testDumpsBasic(self):
ini_contents = {
'foo.bar': '1',
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
'section_2': {
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
},
'section_1': {
'foo.bar': '1',
'foo.baz': 'example',
},
}
# ini.dumps is expected to dump to string alphabetically
# by key and section name.
expected = textwrap.dedent("""\
bar.bad = /path/to/thing
foo.bar = 1
foo.baz = example
[section_1]
foo.bar = 1
foo.baz = example
[section_2]
bar.bad = /path/to/thing
foo.baz = example
""")
self.assertEqual(expected, ini.dumps(ini_contents))
def testDumpsSections(self):
ini_contents = {
'section_2': {
'foo.baz': 'example',
'bar.bad': '/path/to/thing',
},
'section_1': {
'foo.bar': '1',
'foo.baz': 'example',
},
}
# ini.dumps is expected to dump to string alphabetically
# by key first, and then by section and the associated keys
expected = textwrap.dedent("""\
[section_1]
foo.bar = 1
foo.baz = example
[section_2]
bar.bad = /path/to/thing
foo.baz = example
""")
self.assertEqual(expected, ini.dumps(ini_contents))
if __name__ == '__main__':
unittest.main()