Source code for gwsumm.tests.test_utils

# -*- coding: utf-8 -*-
# Copyright (C) Duncan Macleod (2013)
#
# This file is part of GWSumm.
#
# GWSumm 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.
#
# GWSumm 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 GWSumm.  If not, see <http://www.gnu.org/licenses/>.

"""Tests for `gwsumm.utils`

"""

import os.path
import time
import re
import sys
import shutil
from math import pi

import pytest

from .. import (utils, globalv)

__author__ = 'Duncan Macleod <duncan.macleod@ligo.org>'


[docs] def test_elapsed_time(): e = time.time() - globalv.START assert utils.elapsed_time() - e < .1
[docs] def test_vprint(capsys): # test non-verbose globalv.VERBOSE = False utils.vprint('anything', stream=sys.stdout) out, err = capsys.readouterr() assert out == '' # test verbose globalv.VERBOSE = True utils.vprint('anything', stream=sys.stdout) out, err = capsys.readouterr() assert out == 'anything' # test profiled globalv.PROFILE = True utils.vprint('anything\n', stream=sys.stdout) out, err = capsys.readouterr() assert re.match(r'\Aanything \(\d+\.\d\d\)\n\Z', out) is not None
[docs] def test_mkdir(): d = 'test-dir/test-dir2' try: utils.mkdir(d) assert os.path.isdir(d) finally: if os.path.isdir(d): shutil.rmtree(d)
[docs] def test_nat_sorted(): # sorted strings numerically assert utils.nat_sorted(['1', '10', '2', 'a', 'B']) == [ '1', '2', '10', 'B', 'a']
[docs] @pytest.mark.parametrize('chan, mask', [ ('L1:TEST-ODC_CHANNEL_OUT_DQ', 'L1:TEST-ODC_CHANNEL_BITMASK'), ('L1:TEST-ODC_CHANNEL_OUTMON', 'L1:TEST-ODC_CHANNEL_BITMASK'), ('L1:TEST-ODC_CHANNEL_LATCH', 'L1:TEST-ODC_CHANNEL_BITMASK'), ('L1:TEST-CHANNEL', 'L1:TEST-CHANNEL') ]) def test_get_odc_bitmask(chan, mask): assert utils.get_odc_bitmask(chan) == mask
[docs] @pytest.mark.parametrize('value, out', [ ('my random content', 'my random content'), ('1', 1), ('1.', 1.), ('1,', (1,)), ('1,2,\'test\',4', (1, 2, 'test', 4)), ('[], [0], 1/(2*pi)', ([], [0], 1/(2*pi))), ('lambda x: x**2', lambda x: x ** 2), (pytest, pytest), ]) def test_safe_eval(value, out): evalue = utils.safe_eval(value) assert type(evalue) is type(out) if not isinstance(value, str): assert evalue is out elif callable(out): assert evalue(4) == out(4) else: assert evalue == out
[docs] def test_safe_eval_2(): # test unsafe with pytest.raises(ValueError) as exc: utils.safe_eval("os.remove('file-that-doesnt-exist')") assert str(exc.value).startswith('Will not evaluate string containing') with pytest.raises(ValueError): utils.safe_eval("lambda x: shutil.remove('file-that-doesnt-exist')") # test locals or globals assert utils.safe_eval('test', globals_={'test': 4}) == 4 assert utils.safe_eval('type(self)', locals_={'self': globalv}) == type(globalv)
[docs] @pytest.mark.parametrize('ifo, host', [ ('G1', 'host.atlas.aei.uni-hannover.de'), ('H1', 'host.ligo-wa.caltech.edu'), ('L1', 'host.ligo-la.caltech.edu'), ('V1', 'host.virgo.ego.it'), ]) def test_get_default_ifo(ifo, host): assert utils.get_default_ifo(host) == ifo with pytest.raises(ValueError): utils.get_default_ifo('host.ligo.caltech.edu')