tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_read_ini.py (2994B)


      1 #!/usr/bin/env python
      2 
      3 """
      4 test .ini parsing
      5 
      6 ensure our .ini parser is doing what we want; to be deprecated for
      7 python's standard ConfigParser when 2.7 is reality so OrderedDict
      8 is the default:
      9 
     10 http://docs.python.org/2/library/configparser.html
     11 """
     12 
     13 from io import StringIO
     14 from textwrap import dedent
     15 
     16 import mozunit
     17 import pytest
     18 from manifestparser import read_ini
     19 
     20 
     21 @pytest.fixture(scope="module")
     22 def parse_manifest():
     23    def inner(string, **kwargs):
     24        buf = StringIO()
     25        buf.write(dedent(string))
     26        buf.seek(0)
     27        return read_ini(buf, **kwargs)[0]
     28 
     29    return inner
     30 
     31 
     32 def test_inline_comments(parse_manifest):
     33    result = parse_manifest(
     34        """
     35    [test_felinicity.py]
     36    kittens = true # This test requires kittens
     37    cats = false#but not cats
     38    """
     39    )[0][1]
     40 
     41    # make sure inline comments get stripped out, but comments without a space in front don't
     42    assert result["kittens"] == "true"
     43    assert result["cats"] == "false#but not cats"
     44 
     45 
     46 def test_line_continuation(parse_manifest):
     47    result = parse_manifest(
     48        """
     49    [test_caninicity.py]
     50    breeds =
     51      sheppard
     52      retriever
     53      terrier
     54 
     55    [test_cats_and_dogs.py]
     56      cats=yep
     57      dogs=
     58        yep
     59          yep
     60    birds=nope
     61      fish=nope
     62    """
     63    )
     64    assert result[0][1]["breeds"].split() == ["sheppard", "retriever", "terrier"]
     65    assert result[1][1]["cats"] == "yep"
     66    assert result[1][1]["dogs"].split() == ["yep", "yep"]
     67    assert result[1][1]["birds"].split() == ["nope", "fish=nope"]
     68 
     69 
     70 def test_dupes_error(parse_manifest):
     71    dupes = """
     72    [test_dupes.py]
     73    foo = bar
     74    foo = baz
     75    """
     76    with pytest.raises(AssertionError):
     77        parse_manifest(dupes, strict=True)
     78 
     79    with pytest.raises(AssertionError):
     80        parse_manifest(dupes, strict=False)
     81 
     82 
     83 def test_defaults_handling(parse_manifest):
     84    manifest = """
     85    [DEFAULT]
     86    flower = rose
     87    skip-if = true
     88 
     89    [test_defaults]
     90    """
     91 
     92    result = parse_manifest(manifest)[0][1]
     93    assert result["flower"] == "rose"
     94    assert result["skip-if"] == "true"
     95 
     96    result = parse_manifest(
     97        manifest,
     98        defaults={
     99            "flower": "tulip",
    100            "colour": "pink",
    101            "skip-if": "false",
    102        },
    103    )[0][1]
    104    assert result["flower"] == "rose"
    105    assert result["colour"] == "pink"
    106    assert result["skip-if"] == "false\ntrue"
    107 
    108    result = parse_manifest(manifest.replace("DEFAULT", "default"))[0][1]
    109    assert result["flower"] == "rose"
    110    assert result["skip-if"] == "true"
    111 
    112 
    113 def test_multiline_skip(parse_manifest):
    114    manifest = """
    115    [test_multiline_skip]
    116    skip-if =
    117        os == "mac"  # bug 123
    118        os == "linux" && debug  # bug 456
    119    """
    120 
    121    result = parse_manifest(manifest)[0][1]
    122    assert (
    123        result["skip-if"].replace("\r\n", "\n")
    124        == dedent(
    125            """
    126        os == "mac"
    127        os == "linux" && debug
    128    """
    129        ).rstrip()
    130    )
    131 
    132 
    133 if __name__ == "__main__":
    134    mozunit.main()