Coverage for tests/test_core.py: 100%
84 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-10-26 18:28 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-10-26 18:28 +0000
1import tempfile
3import pytest
5from dotenv_cli import core
8def test_full() -> None:
9 TEST = r"""
10BASIC=basic basic
11export EXPORT=foo
12EMPTY=
13INNER_QUOTES=this 'is' a test
14INNER_QUOTES2=this "is" a test
15TRIM_WHITESPACE= foo
16KEEP_WHITESPACE=" foo "
17MULTILINE_DQ="multi\nline"
18MULTILINE_SQ='multi\nline'
19MULTILINE_NQ=multi\nline
20# some comment
21should be ignored
22"""
24 with tempfile.NamedTemporaryFile("w", delete=False) as f:
25 f.write(TEST)
27 env = core.read_dotenv(f.name)
28 assert env["BASIC"] == "basic basic"
29 assert env["EXPORT"] == "foo"
30 assert env["EMPTY"] == ""
31 assert env["INNER_QUOTES"] == "this 'is' a test"
32 assert env["INNER_QUOTES2"] == 'this "is" a test'
33 assert env["TRIM_WHITESPACE"] == "foo"
34 assert env["KEEP_WHITESPACE"] == " foo "
35 assert env["MULTILINE_DQ"] == "multi\nline"
36 assert env["MULTILINE_SQ"] == "multi\\nline"
37 assert env["MULTILINE_NQ"] == "multi\\nline"
39 assert len(env) == 10
42def test_basic() -> None:
43 """Basic unquoted strings"""
44 TEST = "FOO=BAR"
46 with tempfile.NamedTemporaryFile("w", delete=False) as f:
47 f.write(TEST)
49 env = core.read_dotenv(f.name)
50 assert env["FOO"] == "BAR"
53def test_empty() -> None:
54 """Empty values become empty strings."""
55 TEST = "FOO="
57 with tempfile.NamedTemporaryFile("w", delete=False) as f:
58 f.write(TEST)
60 env = core.read_dotenv(f.name)
61 assert env["FOO"] == ""
64def test_inner_quotes() -> None:
65 """Inner quotes are mainained."""
66 TEST = "\n".join(["FOO1=this 'is' a test", 'FOO2=this "is" a test'])
68 with tempfile.NamedTemporaryFile("w", delete=False) as f:
69 f.write(TEST)
71 env = core.read_dotenv(f.name)
72 assert env["FOO1"] == "this 'is' a test"
73 assert env["FOO2"] == 'this "is" a test'
76def test_trim_whitespaces() -> None:
77 """Whitespaces are stripped from unquoted values."""
78 TEST = "FOO= test "
80 with tempfile.NamedTemporaryFile("w", delete=False) as f:
81 f.write(TEST)
83 env = core.read_dotenv(f.name)
84 assert env["FOO"] == "test"
87def test_keep_whitespaces() -> None:
88 """Whitespaces are mainteined from quoted values."""
89 TEST = "FOO=' test '"
91 with tempfile.NamedTemporaryFile("w", delete=False) as f:
92 f.write(TEST)
94 env = core.read_dotenv(f.name)
95 assert env["FOO"] == " test "
98def test_multiline() -> None:
99 """Quoted values can contain newlines."""
100 TEST = r'FOO="This is\nbar"'
102 with tempfile.NamedTemporaryFile("w", delete=False) as f:
103 f.write(TEST)
105 env = core.read_dotenv(f.name)
106 assert env["FOO"] == "This is\nbar"
109@pytest.mark.parametrize(
110 "input_, expected",
111 [
112 ('FOO="Test"', "Test"),
113 ("FOO='Test'", "Test"),
114 ("FOO='\"Test\"'", '"Test"'),
115 ("FOO=\"'Test'\"", "'Test'"),
116 ],
117)
118def test_quotes(input_: str, expected: str) -> None:
119 with tempfile.NamedTemporaryFile("w", delete=False) as f:
120 f.write(input_)
122 env = core.read_dotenv(f.name)
123 assert env["FOO"] == expected
126def test_comments() -> None:
127 """Lines starting with # are ignored."""
128 TEST = """
129 FOO=BAR
130 # comment
131 BAR=BAZ
132 """
134 with tempfile.NamedTemporaryFile("w", delete=False) as f:
135 f.write(TEST)
137 env = core.read_dotenv(f.name)
138 assert len(env) == 2
139 assert env["FOO"] == "BAR"
140 assert env["BAR"] == "BAZ"
143def test_emtpy_lines() -> None:
144 """Empty lines are skipped."""
145 TEST = """
146 FOO=BAR
148 BAR=BAZ
149 """
151 with tempfile.NamedTemporaryFile("w", delete=False) as f:
152 f.write(TEST)
154 env = core.read_dotenv(f.name)
155 assert len(env) == 2
156 assert env["FOO"] == "BAR"
157 assert env["BAR"] == "BAZ"
160def test_export() -> None:
161 """Exports are allowed."""
162 TEST = "export FOO=BAR"
164 with tempfile.NamedTemporaryFile("w", delete=False) as f:
165 f.write(TEST)
167 env = core.read_dotenv(f.name)
168 assert env["FOO"] == "BAR"