From 9cf8a7b2c43d0549cd2892b0af203b7c13cd0ba0 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Tue, 11 Apr 2017 14:46:35 +0300 Subject: Add yarnutils.get_next_match --- fail-tests/fail.stdout-diff | 4 ++-- yarnutils/__init__.py | 1 + yarnutils/matches.py | 41 ++++++++++++++++++++++++++++++++++ yarnutils/matches_tests.py | 54 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 yarnutils/matches.py create mode 100644 yarnutils/matches_tests.py diff --git a/fail-tests/fail.stdout-diff b/fail-tests/fail.stdout-diff index b4fe31a..2ecb049 100644 --- a/fail-tests/fail.stdout-diff +++ b/fail-tests/fail.stdout-diff @@ -1,4 +1,4 @@ ---- /dev/null 2017-03-27 15:43:35.669436670 +0300 -+++ fail-tests/fail.stdout-actual 2017-03-28 17:27:11.462899536 +0300 +--- /dev/null 2017-04-10 10:01:11.280543905 +0300 ++++ fail-tests/fail.stdout-actual 2017-04-11 14:53:45.101520430 +0300 @@ -0,0 +1 @@ +this is not empty output to make test fail diff --git a/yarnutils/__init__.py b/yarnutils/__init__.py index 0a5e0c4..58f0236 100644 --- a/yarnutils/__init__.py +++ b/yarnutils/__init__.py @@ -17,3 +17,4 @@ from .vars import Variables +from .matches import get_next_match, set_env_for_matches diff --git a/yarnutils/matches.py b/yarnutils/matches.py new file mode 100644 index 0000000..6277618 --- /dev/null +++ b/yarnutils/matches.py @@ -0,0 +1,41 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# =*= License: GPL-3+ =*= + + +import os + + +_env = {} +_next_match = 1 + + +def get_next_match(): + global _env, _next_match + key = 'MATCH_{}'.format(_next_match) + if key not in _env: + raise Exception('No further matches') + _next_match += 1 + return _env[key] + + +def set_env_for_matches(env): + global _env, _next_match + _env = env.copy() + _next_match = 1 + + +set_env_for_matches(os.environ) # pragma: no cover diff --git a/yarnutils/matches_tests.py b/yarnutils/matches_tests.py new file mode 100644 index 0000000..46b664d --- /dev/null +++ b/yarnutils/matches_tests.py @@ -0,0 +1,54 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# =*= License: GPL-3+ =*= + + +import unittest + +import yarnutils + + +class GetNextMatchTests(unittest.TestCase): + + def test_raises_error_if_no_matches(self): + yarnutils.set_env_for_matches({}) + with self.assertRaises(Exception): + yarnutils.get_next_match() + + def test_returns_first_match(self): + yarnutils.set_env_for_matches({ + 'MATCH_1': 'foo', + }) + self.assertEqual(yarnutils.get_next_match(), 'foo') + + def test_returns_first_two_matches(self): + yarnutils.set_env_for_matches({ + 'MATCH_1': 'foo', + 'MATCH_2': 'bar', + }) + self.assertEqual(yarnutils.get_next_match(), 'foo') + self.assertEqual(yarnutils.get_next_match(), 'bar') + + def test_raises_error_after_last_match(self): + yarnutils.set_env_for_matches({}) + yarnutils.set_env_for_matches({ + 'MATCH_1': 'foo', + 'MATCH_2': 'bar', + }) + yarnutils.get_next_match() + yarnutils.get_next_match() + with self.assertRaises(Exception): + yarnutils.get_next_match() -- cgit v1.2.1