Source code for gwsumm.tests.test_tabs
# -*- 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.tabs`
"""
import os.path
import pytest
from .. import tabs
from ..plot import SummaryPlot
__author__ = 'Duncan Macleod <duncan.macleod@ligo.org>'
# -- gwpy.tabs.registry -------------------------------------------------------
[docs]
@pytest.mark.parametrize('name, tab', [
('basic', tabs.Tab),
('\'plots\'', tabs.PlotTab),
])
def test_get_tab(name, tab):
assert tabs.get_tab(name) is tab
with pytest.raises(ValueError):
tabs.get_tab('fasmklwea')
[docs]
def test_register_tab():
class TestTab(object):
type = 'test'
pass
tabs.register_tab(TestTab)
with pytest.raises(ValueError):
tabs.register_tab(TestTab)
tabs.register_tab(TestTab, force=True)
assert tabs.get_tab('test') is TestTab
tabs.register_tab(TestTab, name='test-with-name')
assert tabs.get_tab('test-with-name') is TestTab
# -- test tab classes ---------------------------------------------------------
[docs]
class TestTab(object):
TYPE = 'basic'
DEFAULT_ARGS = ['Test']
[docs]
@classmethod
def setup_class(cls):
cls.TAB = tabs.get_tab(cls.TYPE)
[docs]
def create(self, *args, **kwargs):
args = list(args)
while len(args) < len(self.DEFAULT_ARGS):
args.append(self.DEFAULT_ARGS[len(args)])
return self.TAB(*args, **kwargs)
[docs]
def test_init(self):
self._test_init('Test')
def _test_init(self, *args, **kwargs):
if len(args) == 0:
args = self.DEFAULT_ARGS
# test basic creation and defaults
tab = self.create(*args, **kwargs)
assert tab.type == self.TYPE
assert tab.name == args[0]
assert tab.shortname == kwargs.pop('shortname', tab.name)
assert tab.children == kwargs.pop('children', [])
assert tab.parent == kwargs.pop('parent', None)
assert tab.group == kwargs.pop('group', None)
assert tab.path == kwargs.pop('path', os.path.curdir)
assert tab.hidden == kwargs.pop('hidden', False)
return tab
[docs]
def test_shortname(self):
tab = self.create()
assert tab.shortname == tab.name
tab = self.create('Test', shortname='ShortTest')
assert tab.shortname == 'ShortTest'
[docs]
def test_index(self):
tab = self.create()
assert tab.index == os.path.join('test', 'index.html')
tab2 = self.create('Parent')
del tab.index
tab.set_parent(tab2)
assert tab.index == os.path.join('parent', 'test', 'index.html')
# -- external tab
[docs]
class TestExternalTab(TestTab):
TYPE = 'external'
DEFAULT_ARGS = ['Test', '//test.com']
[docs]
def test_init(self):
tab = self._test_init()
assert tab.url == '//test.com'
# -- plot tab
[docs]
class TestPlotTab(TestTab):
TYPE = 'plots'
[docs]
def test_init(self):
plots = ['test.png']
tab = self._test_init('Test', plots=plots)
assert tab.plots == list(map(SummaryPlot, plots))
assert tab.layout is None
[docs]
def test_add_plot(self):
tab = self.create()
before = tab.plots[:]
plot = 'test.png'
tab.add_plot(plot)
assert tab.plots == before + [SummaryPlot(href=plot)]
[docs]
def test_layout(self):
tab = self.create()
tab.set_layout(1)
assert tab.layout == [1]
tab.set_layout((1, 2))
assert tab.layout == [1, 2]
tab.set_layout((1, (1, 2)))
assert tab.layout == [1, (1, 2)]
with pytest.raises(ValueError):
tab.set_layout('test')
with pytest.raises(ValueError):
tab.set_layout([1, (1, 2, 1)])
with pytest.warns(DeprecationWarning):
tab.layout = [1]