awips2/pythonPackages/werkzeug/tests/test_local.py
root a02aeb236c Initial revision of AWIPS2 11.9.0-7p5
Former-commit-id: 06a8b51d6d [formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]
Former-commit-id: 9f19e3f712
2012-01-06 08:55:05 -06:00

111 lines
2.4 KiB
Python
Executable file

# -*- coding: utf-8 -*-
"""
werkzeug.local test
~~~~~~~~~~~~~~~~~~~
:copyright: (c) 2010 by the Werkzeug Team, see AUTHORS for more details.
:license: BSD license.
"""
import time
from threading import Thread
from nose.tools import assert_raises
from werkzeug import Local, LocalManager, LocalStack, LocalProxy, \
release_local
from werkzeug.local import get_ident # for testing purposes only
def test_basic_local():
"""Basic local object support"""
l = Local()
l.foo = 0
values = []
def value_setter(idx):
time.sleep(0.01 * idx)
l.foo = idx
time.sleep(0.02)
values.append(l.foo)
threads = [Thread(target=value_setter, args=(x,))
for x in [1, 2, 3]]
for thread in threads:
thread.start()
time.sleep(0.2)
assert sorted(values) == [1, 2, 3]
def delfoo():
del l.foo
delfoo()
assert_raises(AttributeError, lambda: l.foo)
assert_raises(AttributeError, delfoo)
release_local(l)
def test_local_release():
"""Locals work without manager"""
loc = Local()
loc.foo = 42
release_local(loc)
assert not hasattr(loc, 'foo')
ls = LocalStack()
ls.push(42)
release_local(ls)
assert ls.top is None
def test_local_proxy():
"""Tests some proxy operations"""
foo = []
ls = LocalProxy(lambda: foo)
ls.append(42)
ls.append(23)
ls[1:] = [1, 2, 3]
assert foo == [42, 1, 2, 3]
assert repr(foo) == repr(ls)
assert foo[0] == 42
foo += [1]
assert list(foo) == [42, 1, 2, 3, 1]
def test_local_stack():
"""Test the LocalStack"""
ident = get_ident()
ls = LocalStack()
assert ident not in ls._local.__storage__
assert ls.top is None
ls.push(42)
assert ident in ls._local.__storage__
assert ls.top == 42
ls.push(23)
assert ls.top == 23
ls.pop()
assert ls.top == 42
ls.pop()
assert ls.top is None
assert ls.pop() is None
assert ls.pop() is None
proxy = ls()
ls.push([1, 2])
assert proxy == [1, 2]
ls.push((1, 2))
assert proxy == (1, 2)
ls.pop()
ls.pop()
assert repr(proxy) == '<LocalProxy unbound>'
assert ident not in ls._local.__storage__
def test_local_proxies_with_callables():
"""Use a callable with a local proxy"""
foo = 42
ls = LocalProxy(lambda: foo)
assert ls == 42
foo = [23]
ls.append(42)
assert ls == [23, 42]
assert foo == [23, 42]