##// END OF EJS Templates
ask_yes_no on %%file overwrite
ask_yes_no on %%file overwrite

File last commit:

r5344:293d3eed
r7305:234309d5
Show More
test_application.py
175 lines | 5.9 KiB | text/x-python | PythonLexer
Brian Granger
Adding more documentation to config.application related files.
r3796 """
Tests for IPython.config.application.Application
Authors:
* Brian Granger
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
MinRK
promote aliases and flags, to ensure they have priority over config files...
r4977 import logging
Brian Granger
Adding more documentation to config.application related files.
r3796 from unittest import TestCase
from IPython.config.configurable import Configurable
MinRK
promote aliases and flags, to ensure they have priority over config files...
r4977 from IPython.config.loader import Config
Brian Granger
Adding more documentation to config.application related files.
r3796
from IPython.config.application import (
Application
)
from IPython.utils.traitlets import (
MinRK
add Integer traitlet...
r5344 Bool, Unicode, Integer, Float, List, Dict
Brian Granger
Adding more documentation to config.application related files.
r3796 )
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class Foo(Configurable):
MinRK
add Integer traitlet...
r5344 i = Integer(0, config=True, help="The integer i.")
j = Integer(1, config=True, help="The integer j.")
MinRK
move shortname to Application...
r3852 name = Unicode(u'Brian', config=True, help="First name.")
Brian Granger
Adding more documentation to config.application related files.
r3796
class Bar(Configurable):
MinRK
add Integer traitlet...
r5344 b = Integer(0, config=True, help="The integer b.")
MinRK
move shortname to Application...
r3852 enabled = Bool(True, config=True, help="Enable bar.")
Brian Granger
Adding more documentation to config.application related files.
r3796
class MyApp(Application):
Brian Granger
Fixing bugs in BaseIPythonApplication....
r3942 name = Unicode(u'myapp')
MinRK
rename macros/shortnames to flags/aliases...
r3861 running = Bool(False, config=True,
Brian Granger
Adding more documentation to config.application related files.
r3796 help="Is the app running?")
classes = List([Bar, Foo])
MinRK
rename macros/shortnames to flags/aliases...
r3861 config_file = Unicode(u'', config=True,
Brian Granger
Adding more documentation to config.application related files.
r3796 help="Load this config file")
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 aliases = Dict({
'i' : 'Foo.i',
'j' : 'Foo.j',
'name' : 'Foo.name',
'enabled' : 'Bar.enabled',
MinRK
promote aliases and flags, to ensure they have priority over config files...
r4977 'log-level' : 'Application.log_level',
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 })
MinRK
rename macros/shortnames to flags/aliases...
r3861
flags = Dict(dict(enable=({'Bar': {'enabled' : True}}, "Set Bar.enabled to True"),
MinRK
promote aliases and flags, to ensure they have priority over config files...
r4977 disable=({'Bar': {'enabled' : False}}, "Set Bar.enabled to False"),
crit=({'Application' : {'log_level' : logging.CRITICAL}},
"set level=CRITICAL"),
))
MinRK
move shortname to Application...
r3852
Brian Granger
Adding more documentation to config.application related files.
r3796 def init_foo(self):
self.foo = Foo(config=self.config)
def init_bar(self):
self.bar = Bar(config=self.config)
class TestApplication(TestCase):
def test_basic(self):
app = MyApp()
Brian Granger
Fixing bugs in BaseIPythonApplication....
r3942 self.assertEquals(app.name, u'myapp')
Brian Granger
Adding more documentation to config.application related files.
r3796 self.assertEquals(app.running, False)
self.assertEquals(app.classes, [MyApp,Bar,Foo])
self.assertEquals(app.config_file, u'')
def test_config(self):
app = MyApp()
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 app.parse_command_line(["--i=10","--Foo.j=10","--enabled=False","--log-level=50"])
Brian Granger
Adding more documentation to config.application related files.
r3796 config = app.config
self.assertEquals(config.Foo.i, 10)
self.assertEquals(config.Foo.j, 10)
self.assertEquals(config.Bar.enabled, False)
MinRK
raise test log_level, to prevent output during tests
r3948 self.assertEquals(config.MyApp.log_level,50)
Brian Granger
Adding more documentation to config.application related files.
r3796
def test_config_propagation(self):
app = MyApp()
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 app.parse_command_line(["--i=10","--Foo.j=10","--enabled=False","--log-level=50"])
Brian Granger
Adding more documentation to config.application related files.
r3796 app.init_foo()
app.init_bar()
self.assertEquals(app.foo.i, 10)
self.assertEquals(app.foo.j, 10)
self.assertEquals(app.bar.enabled, False)
MinRK
prevent flags from clobbering entire config sections...
r3957 def test_flags(self):
MinRK
move shortname to Application...
r3852 app = MyApp()
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 app.parse_command_line(["--disable"])
MinRK
move shortname to Application...
r3852 app.init_bar()
self.assertEquals(app.bar.enabled, False)
app.parse_command_line(["--enable"])
app.init_bar()
self.assertEquals(app.bar.enabled, True)
MinRK
prevent flags from clobbering entire config sections...
r3957 def test_aliases(self):
app = MyApp()
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 app.parse_command_line(["--i=5", "--j=10"])
MinRK
prevent flags from clobbering entire config sections...
r3957 app.init_foo()
self.assertEquals(app.foo.i, 5)
app.init_foo()
self.assertEquals(app.foo.j, 10)
def test_flag_clobber(self):
"""test that setting flags doesn't clobber existing settings"""
app = MyApp()
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 app.parse_command_line(["--Bar.b=5", "--disable"])
MinRK
prevent flags from clobbering entire config sections...
r3957 app.init_bar()
self.assertEquals(app.bar.enabled, False)
self.assertEquals(app.bar.b, 5)
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 app.parse_command_line(["--enable", "--Bar.b=10"])
MinRK
prevent flags from clobbering entire config sections...
r3957 app.init_bar()
self.assertEquals(app.bar.enabled, True)
self.assertEquals(app.bar.b, 10)
MinRK
promote aliases and flags, to ensure they have priority over config files...
r4977 def test_flatten_flags(self):
cfg = Config()
cfg.MyApp.log_level = logging.WARN
app = MyApp()
app.update_config(cfg)
self.assertEquals(app.log_level, logging.WARN)
self.assertEquals(app.config.MyApp.log_level, logging.WARN)
app.initialize(["--crit"])
self.assertEquals(app.log_level, logging.CRITICAL)
# this would be app.config.Application.log_level if it failed:
self.assertEquals(app.config.MyApp.log_level, logging.CRITICAL)
def test_flatten_aliases(self):
cfg = Config()
cfg.MyApp.log_level = logging.WARN
app = MyApp()
app.update_config(cfg)
self.assertEquals(app.log_level, logging.WARN)
self.assertEquals(app.config.MyApp.log_level, logging.WARN)
app.initialize(["--log-level", "CRITICAL"])
self.assertEquals(app.log_level, logging.CRITICAL)
# this would be app.config.Application.log_level if it failed:
self.assertEquals(app.config.MyApp.log_level, "CRITICAL")
MinRK
allow extra_args in applications
r3958 def test_extra_args(self):
app = MyApp()
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 app.parse_command_line(["--Bar.b=5", 'extra', "--disable", 'args'])
MinRK
allow extra_args in applications
r3958 app.init_bar()
MinRK
don't stop parsing on unrecognized args...
r4211 self.assertEquals(app.bar.enabled, False)
self.assertEquals(app.bar.b, 5)
self.assertEquals(app.extra_args, ['extra', 'args'])
app = MyApp()
app.parse_command_line(["--Bar.b=5", '--', 'extra', "--disable", 'args'])
app.init_bar()
MinRK
parse cl_args agnostic of leading '-'...
r4189 self.assertEquals(app.bar.enabled, True)
MinRK
allow extra_args in applications
r3958 self.assertEquals(app.bar.b, 5)
MinRK
don't stop parsing on unrecognized args...
r4211 self.assertEquals(app.extra_args, ['extra', '--disable', 'args'])
MinRK
allow extra_args in applications
r3958
MinRK
prevent flags from clobbering entire config sections...
r3957