##// END OF EJS Templates
Update the credits file for stuff I've done recently.
Update the credits file for stuff I've done recently.

File last commit:

r4214:21c18a1e
r4404:a3e0c591
Show More
test_loader.py
226 lines | 6.9 KiB | text/x-python | PythonLexer
Brian Granger
Work on Application and loader testing.
r2187 #!/usr/bin/env python
# encoding: utf-8
"""
Tests for IPython.config.loader
Authors:
* Brian Granger
* Fernando Perez (design help)
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2009 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
#-----------------------------------------------------------------------------
import os
MinRK
fix handling of unicode in KV loader...
r4162 import sys
Brian Granger
Work on Application and loader testing.
r2187 from tempfile import mkstemp
from unittest import TestCase
MinRK
fix handling of unicode in KV loader...
r4162 from nose import SkipTest
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 from IPython.testing.tools import mute_warn
Brian Granger
Added new tests for config.loader and configurable.
r3791 from IPython.utils.traitlets import Int, Unicode
from IPython.config.configurable import Configurable
Brian Granger
Massive refactoring of of the core....
r2245 from IPython.config.loader import (
Config,
Brian Granger
Added KeyValueConfigLoader with tests.
r3786 PyFileConfigLoader,
KeyValueConfigLoader,
Brian Granger
Massive refactoring of of the core....
r2245 ArgParseConfigLoader,
ConfigError
)
Brian Granger
Work on Application and loader testing.
r2187
#-----------------------------------------------------------------------------
# Actual tests
#-----------------------------------------------------------------------------
pyfile = """
Fernando Perez
Fix failing config test: https://bugs.launchpad.net/ipython/+bug/503731...
r2394 c = get_config()
Brian Granger
Added KeyValueConfigLoader with tests.
r3786 c.a=10
c.b=20
c.Foo.Bar.value=10
c.Foo.Bam.value=range(10)
c.D.C.value='hi there'
Brian Granger
Work on Application and loader testing.
r2187 """
class TestPyFileCL(TestCase):
def test_basic(self):
Fernando Perez
Progress towards getting the test suite in shape again....
r2392 fd, fname = mkstemp('.py')
Brian Granger
Work on Application and loader testing.
r2187 f = os.fdopen(fd, 'w')
f.write(pyfile)
f.close()
Brian Granger
Minor changes to a few files to reflect design discussion.
r2198 # Unlink the file
Brian Granger
Work on Application and loader testing.
r2187 cl = PyFileConfigLoader(fname)
config = cl.load_config()
Brian Granger
Massive refactoring of of the core....
r2245 self.assertEquals(config.a, 10)
self.assertEquals(config.b, 20)
self.assertEquals(config.Foo.Bar.value, 10)
self.assertEquals(config.Foo.Bam.value, range(10))
self.assertEquals(config.D.C.value, 'hi there')
Brian Granger
Work on Application and loader testing.
r2187
Brian Granger
Refactored the command line config system and other aspects of config....
r2501 class MyLoader1(ArgParseConfigLoader):
def _add_arguments(self):
p = self.parser
p.add_argument('-f', '--foo', dest='Global.foo', type=str)
p.add_argument('-b', dest='MyClass.bar', type=int)
p.add_argument('-n', dest='n', action='store_true')
p.add_argument('Global.bam', type=str)
class MyLoader2(ArgParseConfigLoader):
def _add_arguments(self):
subparsers = self.parser.add_subparsers(dest='subparser_name')
subparser1 = subparsers.add_parser('1')
subparser1.add_argument('-x',dest='Global.x')
subparser2 = subparsers.add_parser('2')
subparser2.add_argument('y')
Brian Granger
Work on the config system....
r2500
Brian Granger
Work on Application and loader testing.
r2187 class TestArgParseCL(TestCase):
def test_basic(self):
Brian Granger
Refactored the command line config system and other aspects of config....
r2501 cl = MyLoader1()
Brian Granger
Work on Application and loader testing.
r2187 config = cl.load_config('-f hi -b 10 -n wow'.split())
Brian Granger
Massive refactoring of of the core....
r2245 self.assertEquals(config.Global.foo, 'hi')
self.assertEquals(config.MyClass.bar, 10)
self.assertEquals(config.n, True)
self.assertEquals(config.Global.bam, 'wow')
Brian Granger
Work on the config system....
r2500 config = cl.load_config(['wow'])
self.assertEquals(config.keys(), ['Global'])
self.assertEquals(config.Global.keys(), ['bam'])
self.assertEquals(config.Global.bam, 'wow')
Brian Granger
Work on Application and loader testing.
r2187
def test_add_arguments(self):
Brian Granger
Refactored the command line config system and other aspects of config....
r2501 cl = MyLoader2()
Brian Granger
Work on Application and loader testing.
r2187 config = cl.load_config('2 frobble'.split())
self.assertEquals(config.subparser_name, '2')
self.assertEquals(config.y, 'frobble')
config = cl.load_config('1 -x frobble'.split())
self.assertEquals(config.subparser_name, '1')
Brian Granger
Massive refactoring of of the core....
r2245 self.assertEquals(config.Global.x, 'frobble')
Brian Granger
Work on the config system....
r2500 def test_argv(self):
Brian Granger
Refactored the command line config system and other aspects of config....
r2501 cl = MyLoader1(argv='-f hi -b 10 -n wow'.split())
Brian Granger
Work on the config system....
r2500 config = cl.load_config()
self.assertEquals(config.Global.foo, 'hi')
self.assertEquals(config.MyClass.bar, 10)
self.assertEquals(config.n, True)
self.assertEquals(config.Global.bam, 'wow')
Brian Granger
Added KeyValueConfigLoader with tests.
r3786 class TestKeyValueCL(TestCase):
def test_basic(self):
cl = KeyValueConfigLoader()
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 argv = ['--'+s.strip('c.') for s in pyfile.split('\n')[2:-1]]
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 with mute_warn():
config = cl.load_config(argv)
Brian Granger
Added KeyValueConfigLoader with tests.
r3786 self.assertEquals(config.a, 10)
self.assertEquals(config.b, 20)
self.assertEquals(config.Foo.Bar.value, 10)
self.assertEquals(config.Foo.Bam.value, range(10))
self.assertEquals(config.D.C.value, 'hi there')
MinRK
allow extra_args in applications
r3958
def test_extra_args(self):
cl = KeyValueConfigLoader()
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 with mute_warn():
config = cl.load_config(['--a=5', 'b', '--c=10', 'd'])
MinRK
don't stop parsing on unrecognized args...
r4211 self.assertEquals(cl.extra_args, ['b', 'd'])
MinRK
allow extra_args in applications
r3958 self.assertEquals(config.a, 5)
MinRK
don't stop parsing on unrecognized args...
r4211 self.assertEquals(config.c, 10)
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 with mute_warn():
config = cl.load_config(['--', '--a=5', '--c=10'])
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 self.assertEquals(cl.extra_args, ['--a=5', '--c=10'])
MinRK
fix handling of unicode in KV loader...
r4162
def test_unicode_args(self):
cl = KeyValueConfigLoader()
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 argv = [u'--a=épsîlön']
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 with mute_warn():
config = cl.load_config(argv)
MinRK
fix handling of unicode in KV loader...
r4162 self.assertEquals(config.a, u'épsîlön')
def test_unicode_bytes_args(self):
MinRK
disallow no-prefix `ipython foo=bar` argument style....
r4197 uarg = u'--a=é'
MinRK
fix handling of unicode in KV loader...
r4162 try:
barg = uarg.encode(sys.stdin.encoding)
except (TypeError, UnicodeEncodeError):
raise SkipTest("sys.stdin.encoding can't handle 'é'")
cl = KeyValueConfigLoader()
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 with mute_warn():
config = cl.load_config([barg])
MinRK
fix handling of unicode in KV loader...
r4162 self.assertEquals(config.a, u'é')
Brian Granger
Added KeyValueConfigLoader with tests.
r3786
Brian Granger
Added new tests for config.loader and configurable.
r3791
Brian Granger
Massive refactoring of of the core....
r2245 class TestConfig(TestCase):
def test_setget(self):
c = Config()
c.a = 10
self.assertEquals(c.a, 10)
self.assertEquals(c.has_key('b'), False)
def test_auto_section(self):
c = Config()
self.assertEquals(c.has_key('A'), True)
self.assertEquals(c._has_section('A'), False)
A = c.A
A.foo = 'hi there'
self.assertEquals(c._has_section('A'), True)
self.assertEquals(c.A.foo, 'hi there')
del c.A
self.assertEquals(len(c.A.keys()),0)
def test_merge_doesnt_exist(self):
c1 = Config()
c2 = Config()
c2.bar = 10
c2.Foo.bar = 10
c1._merge(c2)
self.assertEquals(c1.Foo.bar, 10)
self.assertEquals(c1.bar, 10)
c2.Bar.bar = 10
c1._merge(c2)
self.assertEquals(c1.Bar.bar, 10)
def test_merge_exists(self):
c1 = Config()
c2 = Config()
c1.Foo.bar = 10
c1.Foo.bam = 30
c2.Foo.bar = 20
c2.Foo.wow = 40
c1._merge(c2)
self.assertEquals(c1.Foo.bam, 30)
self.assertEquals(c1.Foo.bar, 20)
self.assertEquals(c1.Foo.wow, 40)
c2.Foo.Bam.bam = 10
c1._merge(c2)
self.assertEquals(c1.Foo.Bam.bam, 10)
def test_deepcopy(self):
c1 = Config()
c1.Foo.bar = 10
c1.Foo.bam = 30
c1.a = 'asdf'
c1.b = range(10)
import copy
c2 = copy.deepcopy(c1)
self.assertEquals(c1, c2)
self.assert_(c1 is not c2)
self.assert_(c1.Foo is not c2.Foo)
def test_builtin(self):
c1 = Config()
exec 'foo = True' in c1
self.assertEquals(c1.foo, True)
self.assertRaises(ConfigError, setattr, c1, 'ValueError', 10)