124 lines
4.5 KiB
Python
124 lines
4.5 KiB
Python
import unittest
|
|
import types
|
|
|
|
import core.theme
|
|
import core.event
|
|
import core.widget
|
|
|
|
class theme(unittest.TestCase):
|
|
def setUp(self):
|
|
core.event.clear()
|
|
self.invalidThemeName = 'this-theme-does-not-exist'
|
|
self.validThemeName = 'default'
|
|
self.defaultsTheme = {
|
|
'defaults': {
|
|
'fg': 'red', 'bg': 'black'
|
|
}
|
|
}
|
|
self.cycleTheme = {
|
|
'cycle': [
|
|
{ 'fg': 'red', 'bg': 'black' },
|
|
{ 'fg': 'black', 'bg': 'red' },
|
|
{ 'fg': 'white', 'bg': 'blue' }
|
|
]
|
|
}
|
|
self.colorTheme = {
|
|
'colors': [{
|
|
'red': '#ff0000', 'blue': '#0000ff'
|
|
}]
|
|
}
|
|
self.walTheme = {
|
|
'colors': ['wal']
|
|
}
|
|
self.cycleValueTheme = {
|
|
'defaults': {
|
|
'fg': [ 'red', 'green', 'blue' ]
|
|
}
|
|
}
|
|
self.stateTheme = {
|
|
'warning': { 'fg': 'yellow' },
|
|
'critical': { 'fg': 'red' }
|
|
}
|
|
|
|
def test_invalid_theme(self):
|
|
with self.assertRaises(RuntimeError):
|
|
core.theme.Theme(self.invalidThemeName)
|
|
|
|
def test_valid_theme(self):
|
|
theme = core.theme.Theme(self.validThemeName)
|
|
self.assertEqual(self.validThemeName, theme.name)
|
|
|
|
def test_defaults(self):
|
|
theme = core.theme.Theme(raw_data=self.defaultsTheme)
|
|
self.assertEqual(self.defaultsTheme['defaults']['fg'], theme.fg())
|
|
self.assertEqual(self.defaultsTheme['defaults']['bg'], theme.bg())
|
|
|
|
def test_cycle(self):
|
|
theme = core.theme.Theme(raw_data=self.cycleTheme)
|
|
self.assertEqual(None, theme.bg('previous'))
|
|
self.assertEqual(self.cycleTheme['cycle'][0]['fg'], theme.fg())
|
|
self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.bg())
|
|
core.event.trigger('next-widget')
|
|
self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.bg('previous'))
|
|
core.event.trigger('next-widget')
|
|
self.assertEqual(self.cycleTheme['cycle'][2]['fg'], theme.fg())
|
|
self.assertEqual(self.cycleTheme['cycle'][2]['bg'], theme.bg())
|
|
|
|
with unittest.mock.patch('core.output.sys.stdout'):
|
|
core.event.trigger('update')
|
|
self.assertEqual(self.cycleTheme['cycle'][0]['fg'], theme.fg())
|
|
self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.bg())
|
|
|
|
def test_custom_iconset(self):
|
|
theme = core.theme.Theme(raw_data=self.defaultsTheme)
|
|
self.assertNotEqual('aaa', theme.padding())
|
|
theme = core.theme.Theme(raw_data=self.defaultsTheme, iconset={
|
|
'defaults': { 'padding': 'aaa' }
|
|
})
|
|
self.assertEqual('aaa', theme.padding())
|
|
|
|
def test_colors(self):
|
|
theme = core.theme.Theme(raw_data=self.defaultsTheme)
|
|
self.assertEqual({}, theme.keywords())
|
|
theme = core.theme.Theme(raw_data=self.colorTheme)
|
|
self.assertEqual(self.colorTheme['colors'][0], theme.keywords())
|
|
|
|
def test_wal_colors(self):
|
|
with unittest.mock.patch('core.theme.io') as io:
|
|
io.open.return_value.__enter__.return_value.read.return_value='''
|
|
{ "colors": { "red": "#ff0000" } }
|
|
'''
|
|
|
|
theme = core.theme.Theme(raw_data=self.walTheme)
|
|
self.assertEqual({'red': '#ff0000'}, theme.keywords())
|
|
|
|
def test_wal_special(self):
|
|
with unittest.mock.patch('core.theme.io') as io:
|
|
io.open.return_value.__enter__.return_value.read.return_value='''
|
|
{ "special": { "background": "#ff0000" } }
|
|
'''
|
|
|
|
theme = core.theme.Theme(raw_data=self.walTheme)
|
|
self.assertEqual({'background': '#ff0000'}, theme.keywords())
|
|
|
|
def test_cycle_value(self):
|
|
widget = core.widget.Widget()
|
|
expected = self.cycleValueTheme['defaults']['fg']
|
|
theme = core.theme.Theme(raw_data=self.cycleValueTheme)
|
|
|
|
for i in range(0, len(expected)*3):
|
|
self.assertEqual(expected[i%len(expected)], theme.fg(widget))
|
|
|
|
def test_state(self):
|
|
widget = core.widget.Widget()
|
|
theme = core.theme.Theme(raw_data=self.stateTheme)
|
|
|
|
self.assertEqual(None, theme.fg(widget))
|
|
|
|
widget.state = types.MethodType(lambda self: ['warning'], widget)
|
|
self.assertEqual(self.stateTheme['warning']['fg'], theme.fg(widget))
|
|
|
|
widget.state = types.MethodType(lambda self: ['critical'], widget)
|
|
self.assertEqual(self.stateTheme['critical']['fg'], theme.fg(widget))
|
|
|
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|