ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yus...@apache.org
Subject [33/51] [partial] AMBARI-7621. Import initial contribution for Ambari support on Windows to branch-windows-dev. (Jayush Luniya and Florian Barca via yusaku)
Date Tue, 07 Oct 2014 22:53:01 GMT
http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/sandbox.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/sandbox.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/sandbox.py
deleted file mode 100644
index 020c82a..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/sandbox.py
+++ /dev/null
@@ -1,271 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.sandbox
-    ~~~~~~~~~~~~~~
-
-    Adds a sandbox layer to Jinja as it was the default behavior in the old
-    Jinja 1 releases.  This sandbox is slightly different from Jinja 1 as the
-    default behavior is easier to use.
-
-    The behavior can be changed by subclassing the environment.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD.
-"""
-import operator
-from ambari_jinja2.runtime import Undefined
-from ambari_jinja2.environment import Environment
-from ambari_jinja2.exceptions import SecurityError
-from ambari_jinja2.utils import FunctionType, MethodType, TracebackType, CodeType, \
-     FrameType, GeneratorType
-
-
-#: maximum number of items a range may produce
-MAX_RANGE = 100000
-
-#: attributes of function objects that are considered unsafe.
-UNSAFE_FUNCTION_ATTRIBUTES = set(['func_closure', 'func_code', 'func_dict',
-                                  'func_defaults', 'func_globals'])
-
-#: unsafe method attributes.  function attributes are unsafe for methods too
-UNSAFE_METHOD_ATTRIBUTES = set(['im_class', 'im_func', 'im_self'])
-
-
-import warnings
-
-# make sure we don't warn in python 2.6 about stuff we don't care about
-warnings.filterwarnings('ignore', 'the sets module', DeprecationWarning,
-                        module='ambari_jinja2.sandbox')
-
-from collections import deque
-
-_mutable_set_types = (set,)
-_mutable_mapping_types = (dict,)
-_mutable_sequence_types = (list,)
-
-
-# on python 2.x we can register the user collection types
-try:
-    from UserDict import UserDict, DictMixin
-    from UserList import UserList
-    _mutable_mapping_types += (UserDict, DictMixin)
-    _mutable_set_types += (UserList,)
-except ImportError:
-    pass
-
-# if sets is still available, register the mutable set from there as well
-try:
-    from sets import Set
-    _mutable_set_types += (Set,)
-except ImportError:
-    pass
-
-#: register Python 2.6 abstract base classes
-try:
-    from collections import MutableSet, MutableMapping, MutableSequence
-    _mutable_set_types += (MutableSet,)
-    _mutable_mapping_types += (MutableMapping,)
-    _mutable_sequence_types += (MutableSequence,)
-except ImportError:
-    pass
-
-_mutable_spec = (
-    (_mutable_set_types, frozenset([
-        'add', 'clear', 'difference_update', 'discard', 'pop', 'remove',
-        'symmetric_difference_update', 'update'
-    ])),
-    (_mutable_mapping_types, frozenset([
-        'clear', 'pop', 'popitem', 'setdefault', 'update'
-    ])),
-    (_mutable_sequence_types, frozenset([
-        'append', 'reverse', 'insert', 'sort', 'extend', 'remove'
-    ])),
-    (deque, frozenset([
-        'append', 'appendleft', 'clear', 'extend', 'extendleft', 'pop',
-        'popleft', 'remove', 'rotate'
-    ]))
-)
-
-
-def safe_range(*args):
-    """A range that can't generate ranges with a length of more than
-    MAX_RANGE items.
-    """
-    rng = xrange(*args)
-    if len(rng) > MAX_RANGE:
-        raise OverflowError('range too big, maximum size for range is %d' %
-                            MAX_RANGE)
-    return rng
-
-
-def unsafe(f):
-    """
-    Mark a function or method as unsafe::
-
-        @unsafe
-        def delete(self):
-            pass
-    """
-    f.unsafe_callable = True
-    return f
-
-
-def is_internal_attribute(obj, attr):
-    """Test if the attribute given is an internal python attribute.  For
-    example this function returns `True` for the `func_code` attribute of
-    python objects.  This is useful if the environment method
-    :meth:`~SandboxedEnvironment.is_safe_attribute` is overriden.
-
-    >>> from ambari_jinja2.sandbox import is_internal_attribute
-    >>> is_internal_attribute(lambda: None, "func_code")
-    True
-    >>> is_internal_attribute((lambda x:x).func_code, 'co_code')
-    True
-    >>> is_internal_attribute(str, "upper")
-    False
-    """
-    if isinstance(obj, FunctionType):
-        if attr in UNSAFE_FUNCTION_ATTRIBUTES:
-            return True
-    elif isinstance(obj, MethodType):
-        if attr in UNSAFE_FUNCTION_ATTRIBUTES or \
-           attr in UNSAFE_METHOD_ATTRIBUTES:
-            return True
-    elif isinstance(obj, type):
-        if attr == 'mro':
-            return True
-    elif isinstance(obj, (CodeType, TracebackType, FrameType)):
-        return True
-    elif isinstance(obj, GeneratorType):
-        if attr == 'gi_frame':
-            return True
-    return attr.startswith('__')
-
-
-def modifies_known_mutable(obj, attr):
-    """This function checks if an attribute on a builtin mutable object
-    (list, dict, set or deque) would modify it if called.  It also supports
-    the "user"-versions of the objects (`sets.Set`, `UserDict.*` etc.) and
-    with Python 2.6 onwards the abstract base classes `MutableSet`,
-    `MutableMapping`, and `MutableSequence`.
-
-    >>> modifies_known_mutable({}, "clear")
-    True
-    >>> modifies_known_mutable({}, "keys")
-    False
-    >>> modifies_known_mutable([], "append")
-    True
-    >>> modifies_known_mutable([], "index")
-    False
-
-    If called with an unsupported object (such as unicode) `False` is
-    returned.
-
-    >>> modifies_known_mutable("foo", "upper")
-    False
-    """
-    for typespec, unsafe in _mutable_spec:
-        if isinstance(obj, typespec):
-            return attr in unsafe
-    return False
-
-
-class SandboxedEnvironment(Environment):
-    """The sandboxed environment.  It works like the regular environment but
-    tells the compiler to generate sandboxed code.  Additionally subclasses of
-    this environment may override the methods that tell the runtime what
-    attributes or functions are safe to access.
-
-    If the template tries to access insecure code a :exc:`SecurityError` is
-    raised.  However also other exceptions may occour during the rendering so
-    the caller has to ensure that all exceptions are catched.
-    """
-    sandboxed = True
-
-    def __init__(self, *args, **kwargs):
-        Environment.__init__(self, *args, **kwargs)
-        self.globals['range'] = safe_range
-
-    def is_safe_attribute(self, obj, attr, value):
-        """The sandboxed environment will call this method to check if the
-        attribute of an object is safe to access.  Per default all attributes
-        starting with an underscore are considered private as well as the
-        special attributes of internal python objects as returned by the
-        :func:`is_internal_attribute` function.
-        """
-        return not (attr.startswith('_') or is_internal_attribute(obj, attr))
-
-    def is_safe_callable(self, obj):
-        """Check if an object is safely callable.  Per default a function is
-        considered safe unless the `unsafe_callable` attribute exists and is
-        True.  Override this method to alter the behavior, but this won't
-        affect the `unsafe` decorator from this module.
-        """
-        return not (getattr(obj, 'unsafe_callable', False) or \
-                    getattr(obj, 'alters_data', False))
-
-    def getitem(self, obj, argument):
-        """Subscribe an object from sandboxed code."""
-        try:
-            return obj[argument]
-        except (TypeError, LookupError):
-            if isinstance(argument, basestring):
-                try:
-                    attr = str(argument)
-                except:
-                    pass
-                else:
-                    try:
-                        value = getattr(obj, attr)
-                    except AttributeError:
-                        pass
-                    else:
-                        if self.is_safe_attribute(obj, argument, value):
-                            return value
-                        return self.unsafe_undefined(obj, argument)
-        return self.undefined(obj=obj, name=argument)
-
-    def getattr(self, obj, attribute):
-        """Subscribe an object from sandboxed code and prefer the
-        attribute.  The attribute passed *must* be a bytestring.
-        """
-        try:
-            value = getattr(obj, attribute)
-        except AttributeError:
-            try:
-                return obj[attribute]
-            except (TypeError, LookupError):
-                pass
-        else:
-            if self.is_safe_attribute(obj, attribute, value):
-                return value
-            return self.unsafe_undefined(obj, attribute)
-        return self.undefined(obj=obj, name=attribute)
-
-    def unsafe_undefined(self, obj, attribute):
-        """Return an undefined object for unsafe attributes."""
-        return self.undefined('access to attribute %r of %r '
-                              'object is unsafe.' % (
-            attribute,
-            obj.__class__.__name__
-        ), name=attribute, obj=obj, exc=SecurityError)
-
-    def call(__self, __context, __obj, *args, **kwargs):
-        """Call an object from sandboxed code."""
-        # the double prefixes are to avoid double keyword argument
-        # errors when proxying the call.
-        if not __self.is_safe_callable(__obj):
-            raise SecurityError('%r is not safely callable' % (__obj,))
-        return __context.call(__obj, *args, **kwargs)
-
-
-class ImmutableSandboxedEnvironment(SandboxedEnvironment):
-    """Works exactly like the regular `SandboxedEnvironment` but does not
-    permit modifications on the builtin mutable objects `list`, `set`, and
-    `dict` by using the :func:`modifies_known_mutable` function.
-    """
-
-    def is_safe_attribute(self, obj, attr, value):
-        if not SandboxedEnvironment.is_safe_attribute(self, obj, attr, value):
-            return False
-        return not modifies_known_mutable(obj, attr)

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/tests.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/tests.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/tests.py
deleted file mode 100644
index 4cb2bbf..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/tests.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.tests
-    ~~~~~~~~~~~~
-
-    Jinja test functions. Used with the "is" operator.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import re
-from ambari_jinja2.runtime import Undefined
-
-# nose, nothing here to test
-__test__ = False
-
-
-number_re = re.compile(r'^-?\d+(\.\d+)?$')
-regex_type = type(number_re)
-
-
-try:
-    test_callable = callable
-except NameError:
-    def test_callable(x):
-        return hasattr(x, '__call__')
-
-
-def test_odd(value):
-    """Return true if the variable is odd."""
-    return value % 2 == 1
-
-
-def test_even(value):
-    """Return true if the variable is even."""
-    return value % 2 == 0
-
-
-def test_divisibleby(value, num):
-    """Check if a variable is divisible by a number."""
-    return value % num == 0
-
-
-def test_defined(value):
-    """Return true if the variable is defined:
-
-    .. sourcecode:: jinja
-
-        {% if variable is defined %}
-            value of variable: {{ variable }}
-        {% else %}
-            variable is not defined
-        {% endif %}
-
-    See the :func:`default` filter for a simple way to set undefined
-    variables.
-    """
-    return not isinstance(value, Undefined)
-
-
-def test_undefined(value):
-    """Like :func:`defined` but the other way round."""
-    return isinstance(value, Undefined)
-
-
-def test_none(value):
-    """Return true if the variable is none."""
-    return value is None
-
-
-def test_lower(value):
-    """Return true if the variable is lowercased."""
-    return unicode(value).islower()
-
-
-def test_upper(value):
-    """Return true if the variable is uppercased."""
-    return unicode(value).isupper()
-
-
-def test_string(value):
-    """Return true if the object is a string."""
-    return isinstance(value, basestring)
-
-
-def test_number(value):
-    """Return true if the variable is a number."""
-    return isinstance(value, (int, long, float, complex))
-
-
-def test_sequence(value):
-    """Return true if the variable is a sequence. Sequences are variables
-    that are iterable.
-    """
-    try:
-        len(value)
-        value.__getitem__
-    except:
-        return False
-    return True
-
-
-def test_sameas(value, other):
-    """Check if an object points to the same memory address than another
-    object:
-
-    .. sourcecode:: jinja
-
-        {% if foo.attribute is sameas false %}
-            the foo attribute really is the `False` singleton
-        {% endif %}
-    """
-    return value is other
-
-
-def test_iterable(value):
-    """Check if it's possible to iterate over an object."""
-    try:
-        iter(value)
-    except TypeError:
-        return False
-    return True
-
-
-def test_escaped(value):
-    """Check if the value is escaped."""
-    return hasattr(value, '__html__')
-
-
-TESTS = {
-    'odd':              test_odd,
-    'even':             test_even,
-    'divisibleby':      test_divisibleby,
-    'defined':          test_defined,
-    'undefined':        test_undefined,
-    'none':             test_none,
-    'lower':            test_lower,
-    'upper':            test_upper,
-    'string':           test_string,
-    'number':           test_number,
-    'sequence':         test_sequence,
-    'iterable':         test_iterable,
-    'callable':         test_callable,
-    'sameas':           test_sameas,
-    'escaped':          test_escaped
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/__init__.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/__init__.py
deleted file mode 100644
index cd11117..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/__init__.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite
-    ~~~~~~~~~~~~~~~~
-
-    All the unittests of Jinja2.  These tests can be executed by
-    either running run-tests.py using multiple Python versions at
-    the same time.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import os
-import re
-import sys
-import unittest
-from traceback import format_exception
-from ambari_jinja2 import loaders
-
-
-here = os.path.dirname(os.path.abspath(__file__))
-
-dict_loader = loaders.DictLoader({
-    'justdict.html':        'FOO'
-})
-package_loader = loaders.PackageLoader('ambari_jinja2.testsuite.res', 'templates')
-filesystem_loader = loaders.FileSystemLoader(here + '/res/templates')
-function_loader = loaders.FunctionLoader({'justfunction.html': 'FOO'}.get)
-choice_loader = loaders.ChoiceLoader([dict_loader, package_loader])
-prefix_loader = loaders.PrefixLoader({
-    'a':        filesystem_loader,
-    'b':        dict_loader
-})
-
-
-class JinjaTestCase(unittest.TestCase):
-
-    ### use only these methods for testing.  If you need standard
-    ### unittest method, wrap them!
-
-    def setup(self):
-        pass
-
-    def teardown(self):
-        pass
-
-    def setUp(self):
-        self.setup()
-
-    def tearDown(self):
-        self.teardown()
-
-    def assert_equal(self, a, b):
-        return self.assertEqual(a, b)
-
-    def assert_raises(self, *args, **kwargs):
-        return self.assertRaises(*args, **kwargs)
-
-    def assert_traceback_matches(self, callback, expected_tb):
-        try:
-            callback()
-        except Exception, e:
-            tb = format_exception(*sys.exc_info())
-            if re.search(expected_tb.strip(), ''.join(tb)) is None:
-                raise self.fail('Traceback did not match:\n\n%s\nexpected:\n%s'
-                    % (''.join(tb), expected_tb))
-        else:
-            self.fail('Expected exception')
-
-
-def suite():
-    from ambari_jinja2.testsuite import ext, filters, tests, core_tags, \
-         loader, inheritance, imports, lexnparse, security, api, \
-         regression, debug, utils, doctests
-    suite = unittest.TestSuite()
-    suite.addTest(ext.suite())
-    suite.addTest(filters.suite())
-    suite.addTest(tests.suite())
-    suite.addTest(core_tags.suite())
-    suite.addTest(loader.suite())
-    suite.addTest(inheritance.suite())
-    suite.addTest(imports.suite())
-    suite.addTest(lexnparse.suite())
-    suite.addTest(security.suite())
-    suite.addTest(api.suite())
-    suite.addTest(regression.suite())
-    suite.addTest(debug.suite())
-    suite.addTest(utils.suite())
-
-    # doctests will not run on python 3 currently.  Too many issues
-    # with that, do not test that on that platform.
-    if sys.version_info < (3, 0):
-        suite.addTest(doctests.suite())
-
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/api.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/api.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/api.py
deleted file mode 100644
index a02fb60..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/api.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.api
-    ~~~~~~~~~~~~~~~~~~~~
-
-    Tests the public API and related stuff.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import os
-import time
-import tempfile
-import unittest
-
-from ambari_jinja2.testsuite import JinjaTestCase
-
-from ambari_jinja2 import Environment, Undefined, DebugUndefined, \
-     StrictUndefined, UndefinedError, Template, meta, \
-     is_undefined, Template, DictLoader
-from ambari_jinja2.utils import Cycler
-
-env = Environment()
-
-
-class ExtendedAPITestCase(JinjaTestCase):
-
-    def test_item_and_attribute(self):
-        from ambari_jinja2.sandbox import SandboxedEnvironment
-
-        for env in Environment(), SandboxedEnvironment():
-            # the |list is necessary for python3
-            tmpl = env.from_string('{{ foo.items()|list }}')
-            assert tmpl.render(foo={'items': 42}) == "[('items', 42)]"
-            tmpl = env.from_string('{{ foo|attr("items")()|list }}')
-            assert tmpl.render(foo={'items': 42}) == "[('items', 42)]"
-            tmpl = env.from_string('{{ foo["items"] }}')
-            assert tmpl.render(foo={'items': 42}) == '42'
-
-    def test_finalizer(self):
-        def finalize_none_empty(value):
-            if value is None:
-                value = u''
-            return value
-        env = Environment(finalize=finalize_none_empty)
-        tmpl = env.from_string('{% for item in seq %}|{{ item }}{% endfor %}')
-        assert tmpl.render(seq=(None, 1, "foo")) == '||1|foo'
-        tmpl = env.from_string('<{{ none }}>')
-        assert tmpl.render() == '<>'
-
-    def test_cycler(self):
-        items = 1, 2, 3
-        c = Cycler(*items)
-        for item in items + items:
-            assert c.current == item
-            assert c.next() == item
-        c.next()
-        assert c.current == 2
-        c.reset()
-        assert c.current == 1
-
-    def test_expressions(self):
-        expr = env.compile_expression("foo")
-        assert expr() is None
-        assert expr(foo=42) == 42
-        expr2 = env.compile_expression("foo", undefined_to_none=False)
-        assert is_undefined(expr2())
-
-        expr = env.compile_expression("42 + foo")
-        assert expr(foo=42) == 84
-
-    def test_template_passthrough(self):
-        t = Template('Content')
-        assert env.get_template(t) is t
-        assert env.select_template([t]) is t
-        assert env.get_or_select_template([t]) is t
-        assert env.get_or_select_template(t) is t
-
-    def test_autoescape_autoselect(self):
-        def select_autoescape(name):
-            if name is None or '.' not in name:
-                return False
-            return name.endswith('.html')
-        env = Environment(autoescape=select_autoescape,
-                          loader=DictLoader({
-            'test.txt':     '{{ foo }}',
-            'test.html':    '{{ foo }}'
-        }))
-        t = env.get_template('test.txt')
-        assert t.render(foo='<foo>') == '<foo>'
-        t = env.get_template('test.html')
-        assert t.render(foo='<foo>') == '&lt;foo&gt;'
-        t = env.from_string('{{ foo }}')
-        assert t.render(foo='<foo>') == '<foo>'
-
-
-class MetaTestCase(JinjaTestCase):
-
-    def test_find_undeclared_variables(self):
-        ast = env.parse('{% set foo = 42 %}{{ bar + foo }}')
-        x = meta.find_undeclared_variables(ast)
-        assert x == set(['bar'])
-
-        ast = env.parse('{% set foo = 42 %}{{ bar + foo }}'
-                        '{% macro meh(x) %}{{ x }}{% endmacro %}'
-                        '{% for item in seq %}{{ muh(item) + meh(seq) }}{% endfor %}')
-        x = meta.find_undeclared_variables(ast)
-        assert x == set(['bar', 'seq', 'muh'])
-
-    def test_find_refererenced_templates(self):
-        ast = env.parse('{% extends "layout.html" %}{% include helper %}')
-        i = meta.find_referenced_templates(ast)
-        assert i.next() == 'layout.html'
-        assert i.next() is None
-        assert list(i) == []
-
-        ast = env.parse('{% extends "layout.html" %}'
-                        '{% from "test.html" import a, b as c %}'
-                        '{% import "meh.html" as meh %}'
-                        '{% include "muh.html" %}')
-        i = meta.find_referenced_templates(ast)
-        assert list(i) == ['layout.html', 'test.html', 'meh.html', 'muh.html']
-
-    def test_find_included_templates(self):
-        ast = env.parse('{% include ["foo.html", "bar.html"] %}')
-        i = meta.find_referenced_templates(ast)
-        assert list(i) == ['foo.html', 'bar.html']
-
-        ast = env.parse('{% include ("foo.html", "bar.html") %}')
-        i = meta.find_referenced_templates(ast)
-        assert list(i) == ['foo.html', 'bar.html']
-
-        ast = env.parse('{% include ["foo.html", "bar.html", foo] %}')
-        i = meta.find_referenced_templates(ast)
-        assert list(i) == ['foo.html', 'bar.html', None]
-
-        ast = env.parse('{% include ("foo.html", "bar.html", foo) %}')
-        i = meta.find_referenced_templates(ast)
-        assert list(i) == ['foo.html', 'bar.html', None]
-
-
-class StreamingTestCase(JinjaTestCase):
-
-    def test_basic_streaming(self):
-        tmpl = env.from_string("<ul>{% for item in seq %}<li>{{ loop.index "
-                               "}} - {{ item }}</li>{%- endfor %}</ul>")
-        stream = tmpl.stream(seq=range(4))
-        self.assert_equal(stream.next(), '<ul>')
-        self.assert_equal(stream.next(), '<li>1 - 0</li>')
-        self.assert_equal(stream.next(), '<li>2 - 1</li>')
-        self.assert_equal(stream.next(), '<li>3 - 2</li>')
-        self.assert_equal(stream.next(), '<li>4 - 3</li>')
-        self.assert_equal(stream.next(), '</ul>')
-
-    def test_buffered_streaming(self):
-        tmpl = env.from_string("<ul>{% for item in seq %}<li>{{ loop.index "
-                               "}} - {{ item }}</li>{%- endfor %}</ul>")
-        stream = tmpl.stream(seq=range(4))
-        stream.enable_buffering(size=3)
-        self.assert_equal(stream.next(), u'<ul><li>1 - 0</li><li>2 - 1</li>')
-        self.assert_equal(stream.next(), u'<li>3 - 2</li><li>4 - 3</li></ul>')
-
-    def test_streaming_behavior(self):
-        tmpl = env.from_string("")
-        stream = tmpl.stream()
-        assert not stream.buffered
-        stream.enable_buffering(20)
-        assert stream.buffered
-        stream.disable_buffering()
-        assert not stream.buffered
-
-
-class UndefinedTestCase(JinjaTestCase):
-
-    def test_stopiteration_is_undefined(self):
-        def test():
-            raise StopIteration()
-        t = Template('A{{ test() }}B')
-        assert t.render(test=test) == 'AB'
-        t = Template('A{{ test().missingattribute }}B')
-        self.assert_raises(UndefinedError, t.render, test=test)
-
-    def test_default_undefined(self):
-        env = Environment(undefined=Undefined)
-        self.assert_equal(env.from_string('{{ missing }}').render(), u'')
-        self.assert_raises(UndefinedError,
-                           env.from_string('{{ missing.attribute }}').render)
-        self.assert_equal(env.from_string('{{ missing|list }}').render(), '[]')
-        self.assert_equal(env.from_string('{{ missing is not defined }}').render(), 'True')
-        self.assert_equal(env.from_string('{{ foo.missing }}').render(foo=42), '')
-        self.assert_equal(env.from_string('{{ not missing }}').render(), 'True')
-
-    def test_debug_undefined(self):
-        env = Environment(undefined=DebugUndefined)
-        self.assert_equal(env.from_string('{{ missing }}').render(), '{{ missing }}')
-        self.assert_raises(UndefinedError,
-                           env.from_string('{{ missing.attribute }}').render)
-        self.assert_equal(env.from_string('{{ missing|list }}').render(), '[]')
-        self.assert_equal(env.from_string('{{ missing is not defined }}').render(), 'True')
-        self.assert_equal(env.from_string('{{ foo.missing }}').render(foo=42),
-                          u"{{ no such element: int object['missing'] }}")
-        self.assert_equal(env.from_string('{{ not missing }}').render(), 'True')
-
-    def test_strict_undefined(self):
-        env = Environment(undefined=StrictUndefined)
-        self.assert_raises(UndefinedError, env.from_string('{{ missing }}').render)
-        self.assert_raises(UndefinedError, env.from_string('{{ missing.attribute }}').render)
-        self.assert_raises(UndefinedError, env.from_string('{{ missing|list }}').render)
-        self.assert_equal(env.from_string('{{ missing is not defined }}').render(), 'True')
-        self.assert_raises(UndefinedError, env.from_string('{{ foo.missing }}').render, foo=42)
-        self.assert_raises(UndefinedError, env.from_string('{{ not missing }}').render)
-
-    def test_indexing_gives_undefined(self):
-        t = Template("{{ var[42].foo }}")
-        self.assert_raises(UndefinedError, t.render, var=0)
-
-    def test_none_gives_proper_error(self):
-        try:
-            Environment().getattr(None, 'split')()
-        except UndefinedError, e:
-            assert e.message == "'None' has no attribute 'split'"
-        else:
-            assert False, 'expected exception'
-
-    def test_object_repr(self):
-        try:
-            Undefined(obj=42, name='upper')()
-        except UndefinedError, e:
-            assert e.message == "'int object' has no attribute 'upper'"
-        else:
-            assert False, 'expected exception'
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(ExtendedAPITestCase))
-    suite.addTest(unittest.makeSuite(MetaTestCase))
-    suite.addTest(unittest.makeSuite(StreamingTestCase))
-    suite.addTest(unittest.makeSuite(UndefinedTestCase))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/core_tags.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/core_tags.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/core_tags.py
deleted file mode 100644
index 37e3c50..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/core_tags.py
+++ /dev/null
@@ -1,286 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.core_tags
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Test the core tags like for and if.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import re
-import unittest
-
-from ambari_jinja2.testsuite import JinjaTestCase
-
-from ambari_jinja2 import Environment, TemplateSyntaxError, UndefinedError, \
-     DictLoader
-
-env = Environment()
-
-
-class ForLoopTestCase(JinjaTestCase):
-
-    def test_simple(self):
-        tmpl = env.from_string('{% for item in seq %}{{ item }}{% endfor %}')
-        assert tmpl.render(seq=range(10)) == '0123456789'
-
-    def test_else(self):
-        tmpl = env.from_string('{% for item in seq %}XXX{% else %}...{% endfor %}')
-        assert tmpl.render() == '...'
-
-    def test_empty_blocks(self):
-        tmpl = env.from_string('<{% for item in seq %}{% else %}{% endfor %}>')
-        assert tmpl.render() == '<>'
-
-    def test_context_vars(self):
-        tmpl = env.from_string('''{% for item in seq -%}
-        {{ loop.index }}|{{ loop.index0 }}|{{ loop.revindex }}|{{
-            loop.revindex0 }}|{{ loop.first }}|{{ loop.last }}|{{
-           loop.length }}###{% endfor %}''')
-        one, two, _ = tmpl.render(seq=[0, 1]).split('###')
-        (one_index, one_index0, one_revindex, one_revindex0, one_first,
-         one_last, one_length) = one.split('|')
-        (two_index, two_index0, two_revindex, two_revindex0, two_first,
-         two_last, two_length) = two.split('|')
-
-        assert int(one_index) == 1 and int(two_index) == 2
-        assert int(one_index0) == 0 and int(two_index0) == 1
-        assert int(one_revindex) == 2 and int(two_revindex) == 1
-        assert int(one_revindex0) == 1 and int(two_revindex0) == 0
-        assert one_first == 'True' and two_first == 'False'
-        assert one_last == 'False' and two_last == 'True'
-        assert one_length == two_length == '2'
-
-    def test_cycling(self):
-        tmpl = env.from_string('''{% for item in seq %}{{
-            loop.cycle('<1>', '<2>') }}{% endfor %}{%
-            for item in seq %}{{ loop.cycle(*through) }}{% endfor %}''')
-        output = tmpl.render(seq=range(4), through=('<1>', '<2>'))
-        assert output == '<1><2>' * 4
-
-    def test_scope(self):
-        tmpl = env.from_string('{% for item in seq %}{% endfor %}{{ item }}')
-        output = tmpl.render(seq=range(10))
-        assert not output
-
-    def test_varlen(self):
-        def inner():
-            for item in range(5):
-                yield item
-        tmpl = env.from_string('{% for item in iter %}{{ item }}{% endfor %}')
-        output = tmpl.render(iter=inner())
-        assert output == '01234'
-
-    def test_noniter(self):
-        tmpl = env.from_string('{% for item in none %}...{% endfor %}')
-        self.assert_raises(TypeError, tmpl.render)
-
-    def test_recursive(self):
-        tmpl = env.from_string('''{% for item in seq recursive -%}
-            [{{ item.a }}{% if item.b %}<{{ loop(item.b) }}>{% endif %}]
-        {%- endfor %}''')
-        assert tmpl.render(seq=[
-            dict(a=1, b=[dict(a=1), dict(a=2)]),
-            dict(a=2, b=[dict(a=1), dict(a=2)]),
-            dict(a=3, b=[dict(a='a')])
-        ]) == '[1<[1][2]>][2<[1][2]>][3<[a]>]'
-
-    def test_looploop(self):
-        tmpl = env.from_string('''{% for row in table %}
-            {%- set rowloop = loop -%}
-            {% for cell in row -%}
-                [{{ rowloop.index }}|{{ loop.index }}]
-            {%- endfor %}
-        {%- endfor %}''')
-        assert tmpl.render(table=['ab', 'cd']) == '[1|1][1|2][2|1][2|2]'
-
-    def test_reversed_bug(self):
-        tmpl = env.from_string('{% for i in items %}{{ i }}'
-                               '{% if not loop.last %}'
-                               ',{% endif %}{% endfor %}')
-        assert tmpl.render(items=reversed([3, 2, 1])) == '1,2,3'
-
-    def test_loop_errors(self):
-        tmpl = env.from_string('''{% for item in [1] if loop.index
-                                      == 0 %}...{% endfor %}''')
-        self.assert_raises(UndefinedError, tmpl.render)
-        tmpl = env.from_string('''{% for item in [] %}...{% else
-            %}{{ loop }}{% endfor %}''')
-        assert tmpl.render() == ''
-
-    def test_loop_filter(self):
-        tmpl = env.from_string('{% for item in range(10) if item '
-                               'is even %}[{{ item }}]{% endfor %}')
-        assert tmpl.render() == '[0][2][4][6][8]'
-        tmpl = env.from_string('''
-            {%- for item in range(10) if item is even %}[{{
-                loop.index }}:{{ item }}]{% endfor %}''')
-        assert tmpl.render() == '[1:0][2:2][3:4][4:6][5:8]'
-
-    def test_loop_unassignable(self):
-        self.assert_raises(TemplateSyntaxError, env.from_string,
-                           '{% for loop in seq %}...{% endfor %}')
-
-    def test_scoped_special_var(self):
-        t = env.from_string('{% for s in seq %}[{{ loop.first }}{% for c in s %}'
-                            '|{{ loop.first }}{% endfor %}]{% endfor %}')
-        assert t.render(seq=('ab', 'cd')) == '[True|True|False][False|True|False]'
-
-    def test_scoped_loop_var(self):
-        t = env.from_string('{% for x in seq %}{{ loop.first }}'
-                            '{% for y in seq %}{% endfor %}{% endfor %}')
-        assert t.render(seq='ab') == 'TrueFalse'
-        t = env.from_string('{% for x in seq %}{% for y in seq %}'
-                            '{{ loop.first }}{% endfor %}{% endfor %}')
-        assert t.render(seq='ab') == 'TrueFalseTrueFalse'
-
-    def test_recursive_empty_loop_iter(self):
-        t = env.from_string('''
-        {%- for item in foo recursive -%}{%- endfor -%}
-        ''')
-        assert t.render(dict(foo=[])) == ''
-
-    def test_call_in_loop(self):
-        t = env.from_string('''
-        {%- macro do_something() -%}
-            [{{ caller() }}]
-        {%- endmacro %}
-
-        {%- for i in [1, 2, 3] %}
-            {%- call do_something() -%}
-                {{ i }}
-            {%- endcall %}
-        {%- endfor -%}
-        ''')
-        assert t.render() == '[1][2][3]'
-
-    def test_scoping_bug(self):
-        t = env.from_string('''
-        {%- for item in foo %}...{{ item }}...{% endfor %}
-        {%- macro item(a) %}...{{ a }}...{% endmacro %}
-        {{- item(2) -}}
-        ''')
-        assert t.render(foo=(1,)) == '...1......2...'
-
-    def test_unpacking(self):
-        tmpl = env.from_string('{% for a, b, c in [[1, 2, 3]] %}'
-            '{{ a }}|{{ b }}|{{ c }}{% endfor %}')
-        assert tmpl.render() == '1|2|3'
-
-
-class IfConditionTestCase(JinjaTestCase):
-
-    def test_simple(self):
-        tmpl = env.from_string('''{% if true %}...{% endif %}''')
-        assert tmpl.render() == '...'
-
-    def test_elif(self):
-        tmpl = env.from_string('''{% if false %}XXX{% elif true
-            %}...{% else %}XXX{% endif %}''')
-        assert tmpl.render() == '...'
-
-    def test_else(self):
-        tmpl = env.from_string('{% if false %}XXX{% else %}...{% endif %}')
-        assert tmpl.render() == '...'
-
-    def test_empty(self):
-        tmpl = env.from_string('[{% if true %}{% else %}{% endif %}]')
-        assert tmpl.render() == '[]'
-
-    def test_complete(self):
-        tmpl = env.from_string('{% if a %}A{% elif b %}B{% elif c == d %}'
-                               'C{% else %}D{% endif %}')
-        assert tmpl.render(a=0, b=False, c=42, d=42.0) == 'C'
-
-    def test_no_scope(self):
-        tmpl = env.from_string('{% if a %}{% set foo = 1 %}{% endif %}{{ foo }}')
-        assert tmpl.render(a=True) == '1'
-        tmpl = env.from_string('{% if true %}{% set foo = 1 %}{% endif %}{{ foo }}')
-        assert tmpl.render() == '1'
-
-
-class MacrosTestCase(JinjaTestCase):
-    env = Environment(trim_blocks=True)
-
-    def test_simple(self):
-        tmpl = self.env.from_string('''\
-{% macro say_hello(name) %}Hello {{ name }}!{% endmacro %}
-{{ say_hello('Peter') }}''')
-        assert tmpl.render() == 'Hello Peter!'
-
-    def test_scoping(self):
-        tmpl = self.env.from_string('''\
-{% macro level1(data1) %}
-{% macro level2(data2) %}{{ data1 }}|{{ data2 }}{% endmacro %}
-{{ level2('bar') }}{% endmacro %}
-{{ level1('foo') }}''')
-        assert tmpl.render() == 'foo|bar'
-
-    def test_arguments(self):
-        tmpl = self.env.from_string('''\
-{% macro m(a, b, c='c', d='d') %}{{ a }}|{{ b }}|{{ c }}|{{ d }}{% endmacro %}
-{{ m() }}|{{ m('a') }}|{{ m('a', 'b') }}|{{ m(1, 2, 3) }}''')
-        assert tmpl.render() == '||c|d|a||c|d|a|b|c|d|1|2|3|d'
-
-    def test_varargs(self):
-        tmpl = self.env.from_string('''\
-{% macro test() %}{{ varargs|join('|') }}{% endmacro %}\
-{{ test(1, 2, 3) }}''')
-        assert tmpl.render() == '1|2|3'
-
-    def test_simple_call(self):
-        tmpl = self.env.from_string('''\
-{% macro test() %}[[{{ caller() }}]]{% endmacro %}\
-{% call test() %}data{% endcall %}''')
-        assert tmpl.render() == '[[data]]'
-
-    def test_complex_call(self):
-        tmpl = self.env.from_string('''\
-{% macro test() %}[[{{ caller('data') }}]]{% endmacro %}\
-{% call(data) test() %}{{ data }}{% endcall %}''')
-        assert tmpl.render() == '[[data]]'
-
-    def test_caller_undefined(self):
-        tmpl = self.env.from_string('''\
-{% set caller = 42 %}\
-{% macro test() %}{{ caller is not defined }}{% endmacro %}\
-{{ test() }}''')
-        assert tmpl.render() == 'True'
-
-    def test_include(self):
-        self.env = Environment(loader=DictLoader({'include':
-            '{% macro test(foo) %}[{{ foo }}]{% endmacro %}'}))
-        tmpl = self.env.from_string('{% from "include" import test %}{{ test("foo") }}')
-        assert tmpl.render() == '[foo]'
-
-    def test_macro_api(self):
-        tmpl = self.env.from_string('{% macro foo(a, b) %}{% endmacro %}'
-                               '{% macro bar() %}{{ varargs }}{{ kwargs }}{% endmacro %}'
-                               '{% macro baz() %}{{ caller() }}{% endmacro %}')
-        assert tmpl.module.foo.arguments == ('a', 'b')
-        assert tmpl.module.foo.defaults == ()
-        assert tmpl.module.foo.name == 'foo'
-        assert not tmpl.module.foo.caller
-        assert not tmpl.module.foo.catch_kwargs
-        assert not tmpl.module.foo.catch_varargs
-        assert tmpl.module.bar.arguments == ()
-        assert tmpl.module.bar.defaults == ()
-        assert not tmpl.module.bar.caller
-        assert tmpl.module.bar.catch_kwargs
-        assert tmpl.module.bar.catch_varargs
-        assert tmpl.module.baz.caller
-
-    def test_callself(self):
-        tmpl = self.env.from_string('{% macro foo(x) %}{{ x }}{% if x > 1 %}|'
-                                    '{{ foo(x - 1) }}{% endif %}{% endmacro %}'
-                                    '{{ foo(5) }}')
-        assert tmpl.render() == '5|4|3|2|1'
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(ForLoopTestCase))
-    suite.addTest(unittest.makeSuite(IfConditionTestCase))
-    suite.addTest(unittest.makeSuite(MacrosTestCase))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/debug.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/debug.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/debug.py
deleted file mode 100644
index 55be94a..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/debug.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.debug
-    ~~~~~~~~~~~~~~~~~~~~~~
-
-    Tests the debug system.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import sys
-import unittest
-
-from ambari_jinja2.testsuite import JinjaTestCase, filesystem_loader
-
-from ambari_jinja2 import Environment, TemplateSyntaxError
-
-env = Environment(loader=filesystem_loader)
-
-
-class DebugTestCase(JinjaTestCase):
-
-    if sys.version_info[:2] != (2, 4):
-        def test_runtime_error(self):
-            def test():
-                tmpl.render(fail=lambda: 1 / 0)
-            tmpl = env.get_template('broken.html')
-            self.assert_traceback_matches(test, r'''
-  File ".*?broken.html", line 2, in (top-level template code|<module>)
-    \{\{ fail\(\) \}\}
-  File ".*?debug.pyc?", line \d+, in <lambda>
-    tmpl\.render\(fail=lambda: 1 / 0\)
-ZeroDivisionError: (int(eger)? )?division (or modulo )?by zero
-''')
-
-    def test_syntax_error(self):
-        # XXX: the .*? is necessary for python3 which does not hide
-        # some of the stack frames we don't want to show.  Not sure
-        # what's up with that, but that is not that critical.  Should
-        # be fixed though.
-        self.assert_traceback_matches(lambda: env.get_template('syntaxerror.html'), r'''(?sm)
-  File ".*?syntaxerror.html", line 4, in (template|<module>)
-    \{% endif %\}.*?
-(ambari_jinja2\.exceptions\.)?TemplateSyntaxError: Encountered unknown tag 'endif'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.
-    ''')
-
-    def test_regular_syntax_error(self):
-        def test():
-            raise TemplateSyntaxError('wtf', 42)
-        self.assert_traceback_matches(test, r'''
-  File ".*debug.pyc?", line \d+, in test
-    raise TemplateSyntaxError\('wtf', 42\)
-(ambari_jinja2\.exceptions\.)?TemplateSyntaxError: wtf
-  line 42''')
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(DebugTestCase))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/doctests.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/doctests.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/doctests.py
deleted file mode 100644
index 72ddde5..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/doctests.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.doctests
-    ~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    The doctests.  Collects all tests we want to test from
-    the Jinja modules.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import unittest
-import doctest
-
-
-def suite():
-    from ambari_jinja2 import utils, sandbox, runtime, meta, loaders, \
-        ext, environment, bccache, nodes
-    suite = unittest.TestSuite()
-    suite.addTest(doctest.DocTestSuite(utils))
-    suite.addTest(doctest.DocTestSuite(sandbox))
-    suite.addTest(doctest.DocTestSuite(runtime))
-    suite.addTest(doctest.DocTestSuite(meta))
-    suite.addTest(doctest.DocTestSuite(loaders))
-    suite.addTest(doctest.DocTestSuite(ext))
-    suite.addTest(doctest.DocTestSuite(environment))
-    suite.addTest(doctest.DocTestSuite(bccache))
-    suite.addTest(doctest.DocTestSuite(nodes))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/ext.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/ext.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/ext.py
deleted file mode 100644
index 8a9a8d9..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/ext.py
+++ /dev/null
@@ -1,455 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.ext
-    ~~~~~~~~~~~~~~~~~~~~
-
-    Tests for the extensions.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import re
-import unittest
-
-from ambari_jinja2.testsuite import JinjaTestCase, filesystem_loader
-
-from ambari_jinja2 import Environment, DictLoader, contextfunction, nodes
-from ambari_jinja2.exceptions import TemplateAssertionError
-from ambari_jinja2.ext import Extension
-from ambari_jinja2.lexer import Token, count_newlines
-from ambari_jinja2.utils import next
-
-# 2.x / 3.x
-try:
-    from io import BytesIO
-except ImportError:
-    from StringIO import StringIO as BytesIO
-
-
-importable_object = 23
-
-_gettext_re = re.compile(r'_\((.*?)\)(?s)')
-
-
-i18n_templates = {
-    'master.html': '<title>{{ page_title|default(_("missing")) }}</title>'
-                   '{% block body %}{% endblock %}',
-    'child.html': '{% extends "master.html" %}{% block body %}'
-                  '{% trans %}watch out{% endtrans %}{% endblock %}',
-    'plural.html': '{% trans user_count %}One user online{% pluralize %}'
-                   '{{ user_count }} users online{% endtrans %}',
-    'stringformat.html': '{{ _("User: %(num)s")|format(num=user_count) }}'
-}
-
-newstyle_i18n_templates = {
-    'master.html': '<title>{{ page_title|default(_("missing")) }}</title>'
-                   '{% block body %}{% endblock %}',
-    'child.html': '{% extends "master.html" %}{% block body %}'
-                  '{% trans %}watch out{% endtrans %}{% endblock %}',
-    'plural.html': '{% trans user_count %}One user online{% pluralize %}'
-                   '{{ user_count }} users online{% endtrans %}',
-    'stringformat.html': '{{ _("User: %(num)s", num=user_count) }}',
-    'ngettext.html': '{{ ngettext("%(num)s apple", "%(num)s apples", apples) }}',
-    'ngettext_long.html': '{% trans num=apples %}{{ num }} apple{% pluralize %}'
-                          '{{ num }} apples{% endtrans %}',
-    'transvars1.html': '{% trans %}User: {{ num }}{% endtrans %}',
-    'transvars2.html': '{% trans num=count %}User: {{ num }}{% endtrans %}',
-    'transvars3.html': '{% trans count=num %}User: {{ count }}{% endtrans %}',
-    'novars.html': '{% trans %}%(hello)s{% endtrans %}',
-    'vars.html': '{% trans %}{{ foo }}%(foo)s{% endtrans %}',
-    'explicitvars.html': '{% trans foo="42" %}%(foo)s{% endtrans %}'
-}
-
-
-languages = {
-    'de': {
-        'missing':                      u'fehlend',
-        'watch out':                    u'pass auf',
-        'One user online':              u'Ein Benutzer online',
-        '%(user_count)s users online':  u'%(user_count)s Benutzer online',
-        'User: %(num)s':                u'Benutzer: %(num)s',
-        'User: %(count)s':              u'Benutzer: %(count)s',
-        '%(num)s apple':                u'%(num)s Apfel',
-        '%(num)s apples':               u'%(num)s Äpfel'
-    }
-}
-
-
-@contextfunction
-def gettext(context, string):
-    language = context.get('LANGUAGE', 'en')
-    return languages.get(language, {}).get(string, string)
-
-
-@contextfunction
-def ngettext(context, s, p, n):
-    language = context.get('LANGUAGE', 'en')
-    if n != 1:
-        return languages.get(language, {}).get(p, p)
-    return languages.get(language, {}).get(s, s)
-
-
-i18n_env = Environment(
-    loader=DictLoader(i18n_templates),
-    extensions=['ambari_jinja2.ext.i18n']
-)
-i18n_env.globals.update({
-    '_':            gettext,
-    'gettext':      gettext,
-    'ngettext':     ngettext
-})
-
-newstyle_i18n_env = Environment(
-    loader=DictLoader(newstyle_i18n_templates),
-    extensions=['ambari_jinja2.ext.i18n']
-)
-newstyle_i18n_env.install_gettext_callables(gettext, ngettext, newstyle=True)
-
-class TestExtension(Extension):
-    tags = set(['test'])
-    ext_attr = 42
-
-    def parse(self, parser):
-        return nodes.Output([self.call_method('_dump', [
-            nodes.EnvironmentAttribute('sandboxed'),
-            self.attr('ext_attr'),
-            nodes.ImportedName(__name__ + '.importable_object'),
-            nodes.ContextReference()
-        ])]).set_lineno(next(parser.stream).lineno)
-
-    def _dump(self, sandboxed, ext_attr, imported_object, context):
-        return '%s|%s|%s|%s' % (
-            sandboxed,
-            ext_attr,
-            imported_object,
-            context.blocks
-        )
-
-
-class PreprocessorExtension(Extension):
-
-    def preprocess(self, source, name, filename=None):
-        return source.replace('[[TEST]]', '({{ foo }})')
-
-
-class StreamFilterExtension(Extension):
-
-    def filter_stream(self, stream):
-        for token in stream:
-            if token.type == 'data':
-                for t in self.interpolate(token):
-                    yield t
-            else:
-                yield token
-
-    def interpolate(self, token):
-        pos = 0
-        end = len(token.value)
-        lineno = token.lineno
-        while 1:
-            match = _gettext_re.search(token.value, pos)
-            if match is None:
-                break
-            value = token.value[pos:match.start()]
-            if value:
-                yield Token(lineno, 'data', value)
-            lineno += count_newlines(token.value)
-            yield Token(lineno, 'variable_begin', None)
-            yield Token(lineno, 'name', 'gettext')
-            yield Token(lineno, 'lparen', None)
-            yield Token(lineno, 'string', match.group(1))
-            yield Token(lineno, 'rparen', None)
-            yield Token(lineno, 'variable_end', None)
-            pos = match.end()
-        if pos < end:
-            yield Token(lineno, 'data', token.value[pos:])
-
-
-class ExtensionsTestCase(JinjaTestCase):
-
-    def test_extend_late(self):
-        env = Environment()
-        env.add_extension('ambari_jinja2.ext.autoescape')
-        t = env.from_string('{% autoescape true %}{{ "<test>" }}{% endautoescape %}')
-        assert t.render() == '&lt;test&gt;'
-
-    def test_loop_controls(self):
-        env = Environment(extensions=['ambari_jinja2.ext.loopcontrols'])
-
-        tmpl = env.from_string('''
-            {%- for item in [1, 2, 3, 4] %}
-                {%- if item % 2 == 0 %}{% continue %}{% endif -%}
-                {{ item }}
-            {%- endfor %}''')
-        assert tmpl.render() == '13'
-
-        tmpl = env.from_string('''
-            {%- for item in [1, 2, 3, 4] %}
-                {%- if item > 2 %}{% break %}{% endif -%}
-                {{ item }}
-            {%- endfor %}''')
-        assert tmpl.render() == '12'
-
-    def test_do(self):
-        env = Environment(extensions=['ambari_jinja2.ext.do'])
-        tmpl = env.from_string('''
-            {%- set items = [] %}
-            {%- for char in "foo" %}
-                {%- do items.append(loop.index0 ~ char) %}
-            {%- endfor %}{{ items|join(', ') }}''')
-        assert tmpl.render() == '0f, 1o, 2o'
-
-    def test_with(self):
-        env = Environment(extensions=['ambari_jinja2.ext.with_'])
-        tmpl = env.from_string('''\
-        {% with a=42, b=23 -%}
-            {{ a }} = {{ b }}
-        {% endwith -%}
-            {{ a }} = {{ b }}\
-        ''')
-        assert [x.strip() for x in tmpl.render(a=1, b=2).splitlines()] \
-            == ['42 = 23', '1 = 2']
-
-    def test_extension_nodes(self):
-        env = Environment(extensions=[TestExtension])
-        tmpl = env.from_string('{% test %}')
-        assert tmpl.render() == 'False|42|23|{}'
-
-    def test_identifier(self):
-        assert TestExtension.identifier == __name__ + '.TestExtension'
-
-    def test_rebinding(self):
-        original = Environment(extensions=[TestExtension])
-        overlay = original.overlay()
-        for env in original, overlay:
-            for ext in env.extensions.itervalues():
-                assert ext.environment is env
-
-    def test_preprocessor_extension(self):
-        env = Environment(extensions=[PreprocessorExtension])
-        tmpl = env.from_string('{[[TEST]]}')
-        assert tmpl.render(foo=42) == '{(42)}'
-
-    def test_streamfilter_extension(self):
-        env = Environment(extensions=[StreamFilterExtension])
-        env.globals['gettext'] = lambda x: x.upper()
-        tmpl = env.from_string('Foo _(bar) Baz')
-        out = tmpl.render()
-        assert out == 'Foo BAR Baz'
-
-    def test_extension_ordering(self):
-        class T1(Extension):
-            priority = 1
-        class T2(Extension):
-            priority = 2
-        env = Environment(extensions=[T1, T2])
-        ext = list(env.iter_extensions())
-        assert ext[0].__class__ is T1
-        assert ext[1].__class__ is T2
-
-
-class InternationalizationTestCase(JinjaTestCase):
-
-    def test_trans(self):
-        tmpl = i18n_env.get_template('child.html')
-        assert tmpl.render(LANGUAGE='de') == '<title>fehlend</title>pass auf'
-
-    def test_trans_plural(self):
-        tmpl = i18n_env.get_template('plural.html')
-        assert tmpl.render(LANGUAGE='de', user_count=1) == 'Ein Benutzer online'
-        assert tmpl.render(LANGUAGE='de', user_count=2) == '2 Benutzer online'
-
-    def test_complex_plural(self):
-        tmpl = i18n_env.from_string('{% trans foo=42, count=2 %}{{ count }} item{% '
-                                    'pluralize count %}{{ count }} items{% endtrans %}')
-        assert tmpl.render() == '2 items'
-        self.assert_raises(TemplateAssertionError, i18n_env.from_string,
-                           '{% trans foo %}...{% pluralize bar %}...{% endtrans %}')
-
-    def test_trans_stringformatting(self):
-        tmpl = i18n_env.get_template('stringformat.html')
-        assert tmpl.render(LANGUAGE='de', user_count=5) == 'Benutzer: 5'
-
-    def test_extract(self):
-        from ambari_jinja2.ext import babel_extract
-        source = BytesIO('''
-        {{ gettext('Hello World') }}
-        {% trans %}Hello World{% endtrans %}
-        {% trans %}{{ users }} user{% pluralize %}{{ users }} users{% endtrans %}
-        '''.encode('ascii')) # make python 3 happy
-        assert list(babel_extract(source, ('gettext', 'ngettext', '_'), [], {})) == [
-            (2, 'gettext', u'Hello World', []),
-            (3, 'gettext', u'Hello World', []),
-            (4, 'ngettext', (u'%(users)s user', u'%(users)s users', None), [])
-        ]
-
-    def test_comment_extract(self):
-        from ambari_jinja2.ext import babel_extract
-        source = BytesIO('''
-        {# trans first #}
-        {{ gettext('Hello World') }}
-        {% trans %}Hello World{% endtrans %}{# trans second #}
-        {#: third #}
-        {% trans %}{{ users }} user{% pluralize %}{{ users }} users{% endtrans %}
-        '''.encode('utf-8')) # make python 3 happy
-        assert list(babel_extract(source, ('gettext', 'ngettext', '_'), ['trans', ':'], {})) == [
-            (3, 'gettext', u'Hello World', ['first']),
-            (4, 'gettext', u'Hello World', ['second']),
-            (6, 'ngettext', (u'%(users)s user', u'%(users)s users', None), ['third'])
-        ]
-
-
-class NewstyleInternationalizationTestCase(JinjaTestCase):
-
-    def test_trans(self):
-        tmpl = newstyle_i18n_env.get_template('child.html')
-        assert tmpl.render(LANGUAGE='de') == '<title>fehlend</title>pass auf'
-
-    def test_trans_plural(self):
-        tmpl = newstyle_i18n_env.get_template('plural.html')
-        assert tmpl.render(LANGUAGE='de', user_count=1) == 'Ein Benutzer online'
-        assert tmpl.render(LANGUAGE='de', user_count=2) == '2 Benutzer online'
-
-    def test_complex_plural(self):
-        tmpl = newstyle_i18n_env.from_string('{% trans foo=42, count=2 %}{{ count }} item{% '
-                                    'pluralize count %}{{ count }} items{% endtrans %}')
-        assert tmpl.render() == '2 items'
-        self.assert_raises(TemplateAssertionError, i18n_env.from_string,
-                           '{% trans foo %}...{% pluralize bar %}...{% endtrans %}')
-
-    def test_trans_stringformatting(self):
-        tmpl = newstyle_i18n_env.get_template('stringformat.html')
-        assert tmpl.render(LANGUAGE='de', user_count=5) == 'Benutzer: 5'
-
-    def test_newstyle_plural(self):
-        tmpl = newstyle_i18n_env.get_template('ngettext.html')
-        assert tmpl.render(LANGUAGE='de', apples=1) == '1 Apfel'
-        assert tmpl.render(LANGUAGE='de', apples=5) == u'5 Äpfel'
-
-    def test_autoescape_support(self):
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape',
-                                      'ambari_jinja2.ext.i18n'])
-        env.install_gettext_callables(lambda x: u'<strong>Wert: %(name)s</strong>',
-                                      lambda s, p, n: s, newstyle=True)
-        t = env.from_string('{% autoescape ae %}{{ gettext("foo", name='
-                            '"<test>") }}{% endautoescape %}')
-        assert t.render(ae=True) == '<strong>Wert: &lt;test&gt;</strong>'
-        assert t.render(ae=False) == '<strong>Wert: <test></strong>'
-
-    def test_num_used_twice(self):
-        tmpl = newstyle_i18n_env.get_template('ngettext_long.html')
-        assert tmpl.render(apples=5, LANGUAGE='de') == u'5 Äpfel'
-
-    def test_num_called_num(self):
-        source = newstyle_i18n_env.compile('''
-            {% trans num=3 %}{{ num }} apple{% pluralize
-            %}{{ num }} apples{% endtrans %}
-        ''', raw=True)
-        # quite hacky, but the only way to properly test that.  The idea is
-        # that the generated code does not pass num twice (although that
-        # would work) for better performance.  This only works on the
-        # newstyle gettext of course
-        assert re.search(r"l_ngettext, u?'\%\(num\)s apple', u?'\%\(num\)s "
-                         r"apples', 3", source) is not None
-
-    def test_trans_vars(self):
-        t1 = newstyle_i18n_env.get_template('transvars1.html')
-        t2 = newstyle_i18n_env.get_template('transvars2.html')
-        t3 = newstyle_i18n_env.get_template('transvars3.html')
-        assert t1.render(num=1, LANGUAGE='de') == 'Benutzer: 1'
-        assert t2.render(count=23, LANGUAGE='de') == 'Benutzer: 23'
-        assert t3.render(num=42, LANGUAGE='de') == 'Benutzer: 42'
-
-    def test_novars_vars_escaping(self):
-        t = newstyle_i18n_env.get_template('novars.html')
-        assert t.render() == '%(hello)s'
-        t = newstyle_i18n_env.get_template('vars.html')
-        assert t.render(foo='42') == '42%(foo)s'
-        t = newstyle_i18n_env.get_template('explicitvars.html')
-        assert t.render() == '%(foo)s'
-
-
-class AutoEscapeTestCase(JinjaTestCase):
-
-    def test_scoped_setting(self):
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'],
-                          autoescape=True)
-        tmpl = env.from_string('''
-            {{ "<HelloWorld>" }}
-            {% autoescape false %}
-                {{ "<HelloWorld>" }}
-            {% endautoescape %}
-            {{ "<HelloWorld>" }}
-        ''')
-        assert tmpl.render().split() == \
-            [u'&lt;HelloWorld&gt;', u'<HelloWorld>', u'&lt;HelloWorld&gt;']
-
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'],
-                          autoescape=False)
-        tmpl = env.from_string('''
-            {{ "<HelloWorld>" }}
-            {% autoescape true %}
-                {{ "<HelloWorld>" }}
-            {% endautoescape %}
-            {{ "<HelloWorld>" }}
-        ''')
-        assert tmpl.render().split() == \
-            [u'<HelloWorld>', u'&lt;HelloWorld&gt;', u'<HelloWorld>']
-
-    def test_nonvolatile(self):
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'],
-                          autoescape=True)
-        tmpl = env.from_string('{{ {"foo": "<test>"}|xmlattr|escape }}')
-        assert tmpl.render() == ' foo="&lt;test&gt;"'
-        tmpl = env.from_string('{% autoescape false %}{{ {"foo": "<test>"}'
-                               '|xmlattr|escape }}{% endautoescape %}')
-        assert tmpl.render() == ' foo=&#34;&amp;lt;test&amp;gt;&#34;'
-
-    def test_volatile(self):
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'],
-                          autoescape=True)
-        tmpl = env.from_string('{% autoescape foo %}{{ {"foo": "<test>"}'
-                               '|xmlattr|escape }}{% endautoescape %}')
-        assert tmpl.render(foo=False) == ' foo=&#34;&amp;lt;test&amp;gt;&#34;'
-        assert tmpl.render(foo=True) == ' foo="&lt;test&gt;"'
-
-    def test_scoping(self):
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'])
-        tmpl = env.from_string('{% autoescape true %}{% set x = "<x>" %}{{ x }}'
-                               '{% endautoescape %}{{ x }}{{ "<y>" }}')
-        assert tmpl.render(x=1) == '&lt;x&gt;1<y>'
-
-    def test_volatile_scoping(self):
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'])
-        tmplsource = '''
-        {% autoescape val %}
-            {% macro foo(x) %}
-                [{{ x }}]
-            {% endmacro %}
-            {{ foo().__class__.__name__ }}
-        {% endautoescape %}
-        {{ '<testing>' }}
-        '''
-        tmpl = env.from_string(tmplsource)
-        assert tmpl.render(val=True).split()[0] == 'Markup'
-        assert tmpl.render(val=False).split()[0] == unicode.__name__
-
-        # looking at the source we should see <testing> there in raw
-        # (and then escaped as well)
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'])
-        pysource = env.compile(tmplsource, raw=True)
-        assert '<testing>\\n' in pysource
-
-        env = Environment(extensions=['ambari_jinja2.ext.autoescape'],
-                          autoescape=True)
-        pysource = env.compile(tmplsource, raw=True)
-        assert '&lt;testing&gt;\\n' in pysource
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(ExtensionsTestCase))
-    suite.addTest(unittest.makeSuite(InternationalizationTestCase))
-    suite.addTest(unittest.makeSuite(NewstyleInternationalizationTestCase))
-    suite.addTest(unittest.makeSuite(AutoEscapeTestCase))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/filters.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/filters.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/filters.py
deleted file mode 100644
index 9d0b098..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/filters.py
+++ /dev/null
@@ -1,291 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.filters
-    ~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Tests for the jinja filters.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import unittest
-from ambari_jinja2.testsuite import JinjaTestCase
-
-from ambari_jinja2 import Markup, Environment
-
-env = Environment()
-
-
-class FilterTestCase(JinjaTestCase):
-
-    def test_capitalize(self):
-        tmpl = env.from_string('{{ "foo bar"|capitalize }}')
-        assert tmpl.render() == 'Foo bar'
-
-    def test_center(self):
-        tmpl = env.from_string('{{ "foo"|center(9) }}')
-        assert tmpl.render() == '   foo   '
-
-    def test_default(self):
-        tmpl = env.from_string(
-            "{{ missing|default('no') }}|{{ false|default('no') }}|"
-            "{{ false|default('no', true) }}|{{ given|default('no') }}"
-        )
-        assert tmpl.render(given='yes') == 'no|False|no|yes'
-
-    def test_dictsort(self):
-        tmpl = env.from_string(
-            '{{ foo|dictsort }}|'
-            '{{ foo|dictsort(true) }}|'
-            '{{ foo|dictsort(false, "value") }}'
-        )
-        out = tmpl.render(foo={"aa": 0, "b": 1, "c": 2, "AB": 3})
-        assert out == ("[('aa', 0), ('AB', 3), ('b', 1), ('c', 2)]|"
-                       "[('AB', 3), ('aa', 0), ('b', 1), ('c', 2)]|"
-                       "[('aa', 0), ('b', 1), ('c', 2), ('AB', 3)]")
-
-    def test_batch(self):
-        tmpl = env.from_string("{{ foo|batch(3)|list }}|"
-                               "{{ foo|batch(3, 'X')|list }}")
-        out = tmpl.render(foo=range(10))
-        assert out == ("[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]|"
-                       "[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 'X', 'X']]")
-
-    def test_slice(self):
-        tmpl = env.from_string('{{ foo|slice(3)|list }}|'
-                               '{{ foo|slice(3, "X")|list }}')
-        out = tmpl.render(foo=range(10))
-        assert out == ("[[0, 1, 2, 3], [4, 5, 6], [7, 8, 9]]|"
-                       "[[0, 1, 2, 3], [4, 5, 6, 'X'], [7, 8, 9, 'X']]")
-
-    def test_escape(self):
-        tmpl = env.from_string('''{{ '<">&'|escape }}''')
-        out = tmpl.render()
-        assert out == '&lt;&#34;&gt;&amp;'
-
-    def test_striptags(self):
-        tmpl = env.from_string('''{{ foo|striptags }}''')
-        out = tmpl.render(foo='  <p>just a small   \n <a href="#">'
-                          'example</a> link</p>\n<p>to a webpage</p> '
-                          '<!-- <p>and some commented stuff</p> -->')
-        assert out == 'just a small example link to a webpage'
-
-    def test_filesizeformat(self):
-        tmpl = env.from_string(
-            '{{ 100|filesizeformat }}|'
-            '{{ 1000|filesizeformat }}|'
-            '{{ 1000000|filesizeformat }}|'
-            '{{ 1000000000|filesizeformat }}|'
-            '{{ 1000000000000|filesizeformat }}|'
-            '{{ 100|filesizeformat(true) }}|'
-            '{{ 1000|filesizeformat(true) }}|'
-            '{{ 1000000|filesizeformat(true) }}|'
-            '{{ 1000000000|filesizeformat(true) }}|'
-            '{{ 1000000000000|filesizeformat(true) }}'
-        )
-        out = tmpl.render()
-        assert out == (
-            '100 Bytes|1.0 KB|1.0 MB|1.0 GB|1000.0 GB|'
-            '100 Bytes|1000 Bytes|976.6 KiB|953.7 MiB|931.3 GiB'
-        )
-
-    def test_first(self):
-        tmpl = env.from_string('{{ foo|first }}')
-        out = tmpl.render(foo=range(10))
-        assert out == '0'
-
-    def test_float(self):
-        tmpl = env.from_string('{{ "42"|float }}|'
-                               '{{ "ajsghasjgd"|float }}|'
-                               '{{ "32.32"|float }}')
-        out = tmpl.render()
-        assert out == '42.0|0.0|32.32'
-
-    def test_format(self):
-        tmpl = env.from_string('''{{ "%s|%s"|format("a", "b") }}''')
-        out = tmpl.render()
-        assert out == 'a|b'
-
-    def test_indent(self):
-        tmpl = env.from_string('{{ foo|indent(2) }}|{{ foo|indent(2, true) }}')
-        text = '\n'.join([' '.join(['foo', 'bar'] * 2)] * 2)
-        out = tmpl.render(foo=text)
-        assert out == ('foo bar foo bar\n  foo bar foo bar|  '
-                       'foo bar foo bar\n  foo bar foo bar')
-
-    def test_int(self):
-        tmpl = env.from_string('{{ "42"|int }}|{{ "ajsghasjgd"|int }}|'
-                               '{{ "32.32"|int }}')
-        out = tmpl.render()
-        assert out == '42|0|32'
-
-    def test_join(self):
-        tmpl = env.from_string('{{ [1, 2, 3]|join("|") }}')
-        out = tmpl.render()
-        assert out == '1|2|3'
-
-        env2 = Environment(autoescape=True)
-        tmpl = env2.from_string('{{ ["<foo>", "<span>foo</span>"|safe]|join }}')
-        assert tmpl.render() == '&lt;foo&gt;<span>foo</span>'
-
-    def test_last(self):
-        tmpl = env.from_string('''{{ foo|last }}''')
-        out = tmpl.render(foo=range(10))
-        assert out == '9'
-
-    def test_length(self):
-        tmpl = env.from_string('''{{ "hello world"|length }}''')
-        out = tmpl.render()
-        assert out == '11'
-
-    def test_lower(self):
-        tmpl = env.from_string('''{{ "FOO"|lower }}''')
-        out = tmpl.render()
-        assert out == 'foo'
-
-    def test_pprint(self):
-        from pprint import pformat
-        tmpl = env.from_string('''{{ data|pprint }}''')
-        data = range(1000)
-        assert tmpl.render(data=data) == pformat(data)
-
-    def test_random(self):
-        tmpl = env.from_string('''{{ seq|random }}''')
-        seq = range(100)
-        for _ in range(10):
-            assert int(tmpl.render(seq=seq)) in seq
-
-    def test_reverse(self):
-        tmpl = env.from_string('{{ "foobar"|reverse|join }}|'
-                               '{{ [1, 2, 3]|reverse|list }}')
-        assert tmpl.render() == 'raboof|[3, 2, 1]'
-
-    def test_string(self):
-        x = [1, 2, 3, 4, 5]
-        tmpl = env.from_string('''{{ obj|string }}''')
-        assert tmpl.render(obj=x) == unicode(x)
-
-    def test_title(self):
-        tmpl = env.from_string('''{{ "foo bar"|title }}''')
-        assert tmpl.render() == "Foo Bar"
-
-    def test_truncate(self):
-        tmpl = env.from_string(
-            '{{ data|truncate(15, true, ">>>") }}|'
-            '{{ data|truncate(15, false, ">>>") }}|'
-            '{{ smalldata|truncate(15) }}'
-        )
-        out = tmpl.render(data='foobar baz bar' * 1000,
-                          smalldata='foobar baz bar')
-        assert out == 'foobar baz barf>>>|foobar baz >>>|foobar baz bar'
-
-    def test_upper(self):
-        tmpl = env.from_string('{{ "foo"|upper }}')
-        assert tmpl.render() == 'FOO'
-
-    def test_urlize(self):
-        tmpl = env.from_string('{{ "foo http://www.example.com/ bar"|urlize }}')
-        assert tmpl.render() == 'foo <a href="http://www.example.com/">'\
-                                'http://www.example.com/</a> bar'
-
-    def test_wordcount(self):
-        tmpl = env.from_string('{{ "foo bar baz"|wordcount }}')
-        assert tmpl.render() == '3'
-
-    def test_block(self):
-        tmpl = env.from_string('{% filter lower|escape %}<HEHE>{% endfilter %}')
-        assert tmpl.render() == '&lt;hehe&gt;'
-
-    def test_chaining(self):
-        tmpl = env.from_string('''{{ ['<foo>', '<bar>']|first|upper|escape }}''')
-        assert tmpl.render() == '&lt;FOO&gt;'
-
-    def test_sum(self):
-        tmpl = env.from_string('''{{ [1, 2, 3, 4, 5, 6]|sum }}''')
-        assert tmpl.render() == '21'
-
-    def test_abs(self):
-        tmpl = env.from_string('''{{ -1|abs }}|{{ 1|abs }}''')
-        assert tmpl.render() == '1|1', tmpl.render()
-
-    def test_round_positive(self):
-        tmpl = env.from_string('{{ 2.7|round }}|{{ 2.1|round }}|'
-                               "{{ 2.1234|round(3, 'floor') }}|"
-                               "{{ 2.1|round(0, 'ceil') }}")
-        assert tmpl.render() == '3.0|2.0|2.123|3.0', tmpl.render()
-
-    def test_round_negative(self):
-        tmpl = env.from_string('{{ 21.3|round(-1)}}|'
-                               "{{ 21.3|round(-1, 'ceil')}}|"
-                               "{{ 21.3|round(-1, 'floor')}}")
-        assert tmpl.render() == '20.0|30.0|20.0',tmpl.render()
-
-    def test_xmlattr(self):
-        tmpl = env.from_string("{{ {'foo': 42, 'bar': 23, 'fish': none, "
-                               "'spam': missing, 'blub:blub': '<?>'}|xmlattr }}")
-        out = tmpl.render().split()
-        assert len(out) == 3
-        assert 'foo="42"' in out
-        assert 'bar="23"' in out
-        assert 'blub:blub="&lt;?&gt;"' in out
-
-    def test_sort1(self):
-        tmpl = env.from_string('{{ [2, 3, 1]|sort }}|{{ [2, 3, 1]|sort(true) }}')
-        assert tmpl.render() == '[1, 2, 3]|[3, 2, 1]'
-
-    def test_sort2(self):
-        tmpl = env.from_string('{{ "".join(["c", "A", "b", "D"]|sort(false, true)) }}')
-        assert tmpl.render() == 'AbcD'
-
-    def test_groupby(self):
-        tmpl = env.from_string('''
-        {%- for grouper, list in [{'foo': 1, 'bar': 2},
-                                  {'foo': 2, 'bar': 3},
-                                  {'foo': 1, 'bar': 1},
-                                  {'foo': 3, 'bar': 4}]|groupby('foo') -%}
-            {{ grouper }}{% for x in list %}: {{ x.foo }}, {{ x.bar }}{% endfor %}|
-        {%- endfor %}''')
-        assert tmpl.render().split('|') == [
-            "1: 1, 2: 1, 1",
-            "2: 2, 3",
-            "3: 3, 4",
-            ""
-        ]
-
-    def test_filtertag(self):
-        tmpl = env.from_string("{% filter upper|replace('FOO', 'foo') %}"
-                               "foobar{% endfilter %}")
-        assert tmpl.render() == 'fooBAR'
-
-    def test_replace(self):
-        env = Environment()
-        tmpl = env.from_string('{{ string|replace("o", 42) }}')
-        assert tmpl.render(string='<foo>') == '<f4242>'
-        env = Environment(autoescape=True)
-        tmpl = env.from_string('{{ string|replace("o", 42) }}')
-        assert tmpl.render(string='<foo>') == '&lt;f4242&gt;'
-        tmpl = env.from_string('{{ string|replace("<", 42) }}')
-        assert tmpl.render(string='<foo>') == '42foo&gt;'
-        tmpl = env.from_string('{{ string|replace("o", ">x<") }}')
-        assert tmpl.render(string=Markup('foo')) == 'f&gt;x&lt;&gt;x&lt;'
-
-    def test_forceescape(self):
-        tmpl = env.from_string('{{ x|forceescape }}')
-        assert tmpl.render(x=Markup('<div />')) == u'&lt;div /&gt;'
-
-    def test_safe(self):
-        env = Environment(autoescape=True)
-        tmpl = env.from_string('{{ "<div>foo</div>"|safe }}')
-        assert tmpl.render() == '<div>foo</div>'
-        tmpl = env.from_string('{{ "<div>foo</div>" }}')
-        assert tmpl.render() == '&lt;div&gt;foo&lt;/div&gt;'
-
-    def test_sort2(self):
-        tmpl = env.from_string('''{{ ['foo', 'Bar', 'blah']|sort }}''')
-        assert tmpl.render() == "['Bar', 'blah', 'foo']"
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(FilterTestCase))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/imports.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/imports.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/imports.py
deleted file mode 100644
index 799daf1..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/imports.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.imports
-    ~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Tests the import features (with includes).
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import os
-import time
-import tempfile
-import unittest
-
-from ambari_jinja2.testsuite import JinjaTestCase
-
-from ambari_jinja2 import Environment, DictLoader
-from ambari_jinja2.exceptions import TemplateNotFound, TemplatesNotFound
-
-
-test_env = Environment(loader=DictLoader(dict(
-    module='{% macro test() %}[{{ foo }}|{{ bar }}]{% endmacro %}',
-    header='[{{ foo }}|{{ 23 }}]',
-    o_printer='({{ o }})'
-)))
-test_env.globals['bar'] = 23
-
-
-class ImportsTestCase(JinjaTestCase):
-
-    def test_context_imports(self):
-        t = test_env.from_string('{% import "module" as m %}{{ m.test() }}')
-        assert t.render(foo=42) == '[|23]'
-        t = test_env.from_string('{% import "module" as m without context %}{{ m.test() }}')
-        assert t.render(foo=42) == '[|23]'
-        t = test_env.from_string('{% import "module" as m with context %}{{ m.test() }}')
-        assert t.render(foo=42) == '[42|23]'
-        t = test_env.from_string('{% from "module" import test %}{{ test() }}')
-        assert t.render(foo=42) == '[|23]'
-        t = test_env.from_string('{% from "module" import test without context %}{{ test() }}')
-        assert t.render(foo=42) == '[|23]'
-        t = test_env.from_string('{% from "module" import test with context %}{{ test() }}')
-        assert t.render(foo=42) == '[42|23]'
-
-    def test_trailing_comma(self):
-        test_env.from_string('{% from "foo" import bar, baz with context %}')
-        test_env.from_string('{% from "foo" import bar, baz, with context %}')
-        test_env.from_string('{% from "foo" import bar, with context %}')
-        test_env.from_string('{% from "foo" import bar, with, context %}')
-        test_env.from_string('{% from "foo" import bar, with with context %}')
-
-    def test_exports(self):
-        m = test_env.from_string('''
-            {% macro toplevel() %}...{% endmacro %}
-            {% macro __private() %}...{% endmacro %}
-            {% set variable = 42 %}
-            {% for item in [1] %}
-                {% macro notthere() %}{% endmacro %}
-            {% endfor %}
-        ''').module
-        assert m.toplevel() == '...'
-        assert not hasattr(m, '__missing')
-        assert m.variable == 42
-        assert not hasattr(m, 'notthere')
-
-
-class IncludesTestCase(JinjaTestCase):
-
-    def test_context_include(self):
-        t = test_env.from_string('{% include "header" %}')
-        assert t.render(foo=42) == '[42|23]'
-        t = test_env.from_string('{% include "header" with context %}')
-        assert t.render(foo=42) == '[42|23]'
-        t = test_env.from_string('{% include "header" without context %}')
-        assert t.render(foo=42) == '[|23]'
-
-    def test_choice_includes(self):
-        t = test_env.from_string('{% include ["missing", "header"] %}')
-        assert t.render(foo=42) == '[42|23]'
-
-        t = test_env.from_string('{% include ["missing", "missing2"] ignore missing %}')
-        assert t.render(foo=42) == ''
-
-        t = test_env.from_string('{% include ["missing", "missing2"] %}')
-        self.assert_raises(TemplateNotFound, t.render)
-        try:
-            t.render()
-        except TemplatesNotFound, e:
-            assert e.templates == ['missing', 'missing2']
-            assert e.name == 'missing2'
-        else:
-            assert False, 'thou shalt raise'
-
-        def test_includes(t, **ctx):
-            ctx['foo'] = 42
-            assert t.render(ctx) == '[42|23]'
-
-        t = test_env.from_string('{% include ["missing", "header"] %}')
-        test_includes(t)
-        t = test_env.from_string('{% include x %}')
-        test_includes(t, x=['missing', 'header'])
-        t = test_env.from_string('{% include [x, "header"] %}')
-        test_includes(t, x='missing')
-        t = test_env.from_string('{% include x %}')
-        test_includes(t, x='header')
-        t = test_env.from_string('{% include x %}')
-        test_includes(t, x='header')
-        t = test_env.from_string('{% include [x] %}')
-        test_includes(t, x='header')
-
-    def test_include_ignoring_missing(self):
-        t = test_env.from_string('{% include "missing" %}')
-        self.assert_raises(TemplateNotFound, t.render)
-        for extra in '', 'with context', 'without context':
-            t = test_env.from_string('{% include "missing" ignore missing ' +
-                                     extra + ' %}')
-            assert t.render() == ''
-
-    def test_context_include_with_overrides(self):
-        env = Environment(loader=DictLoader(dict(
-            main="{% for item in [1, 2, 3] %}{% include 'item' %}{% endfor %}",
-            item="{{ item }}"
-        )))
-        assert env.get_template("main").render() == "123"
-
-    def test_unoptimized_scopes(self):
-        t = test_env.from_string("""
-            {% macro outer(o) %}
-            {% macro inner() %}
-            {% include "o_printer" %}
-            {% endmacro %}
-            {{ inner() }}
-            {% endmacro %}
-            {{ outer("FOO") }}
-        """)
-        assert t.render().strip() == '(FOO)'
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(ImportsTestCase))
-    suite.addTest(unittest.makeSuite(IncludesTestCase))
-    return suite

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e28d1e3/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/inheritance.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/inheritance.py b/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/inheritance.py
deleted file mode 100644
index e0666e5..0000000
--- a/ambari-common/src/main/python/ambari_jinja2/ambari_jinja2/testsuite/inheritance.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    ambari_jinja2.testsuite.inheritance
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Tests the template inheritance feature.
-
-    :copyright: (c) 2010 by the Jinja Team.
-    :license: BSD, see LICENSE for more details.
-"""
-import os
-import time
-import tempfile
-import unittest
-
-from ambari_jinja2.testsuite import JinjaTestCase
-
-from ambari_jinja2 import Environment, DictLoader
-from ambari_jinja2.exceptions import TemplateSyntaxError
-
-
-LAYOUTTEMPLATE = '''\
-|{% block block1 %}block 1 from layout{% endblock %}
-|{% block block2 %}block 2 from layout{% endblock %}
-|{% block block3 %}
-{% block block4 %}nested block 4 from layout{% endblock %}
-{% endblock %}|'''
-
-LEVEL1TEMPLATE = '''\
-{% extends "layout" %}
-{% block block1 %}block 1 from level1{% endblock %}'''
-
-LEVEL2TEMPLATE = '''\
-{% extends "level1" %}
-{% block block2 %}{% block block5 %}nested block 5 from level2{%
-endblock %}{% endblock %}'''
-
-LEVEL3TEMPLATE = '''\
-{% extends "level2" %}
-{% block block5 %}block 5 from level3{% endblock %}
-{% block block4 %}block 4 from level3{% endblock %}
-'''
-
-LEVEL4TEMPLATE = '''\
-{% extends "level3" %}
-{% block block3 %}block 3 from level4{% endblock %}
-'''
-
-WORKINGTEMPLATE = '''\
-{% extends "layout" %}
-{% block block1 %}
-  {% if false %}
-    {% block block2 %}
-      this should workd
-    {% endblock %}
-  {% endif %}
-{% endblock %}
-'''
-
-env = Environment(loader=DictLoader({
-    'layout':       LAYOUTTEMPLATE,
-    'level1':       LEVEL1TEMPLATE,
-    'level2':       LEVEL2TEMPLATE,
-    'level3':       LEVEL3TEMPLATE,
-    'level4':       LEVEL4TEMPLATE,
-    'working':      WORKINGTEMPLATE
-}), trim_blocks=True)
-
-
-class InheritanceTestCase(JinjaTestCase):
-
-    def test_layout(self):
-        tmpl = env.get_template('layout')
-        assert tmpl.render() == ('|block 1 from layout|block 2 from '
-                                 'layout|nested block 4 from layout|')
-
-    def test_level1(self):
-        tmpl = env.get_template('level1')
-        assert tmpl.render() == ('|block 1 from level1|block 2 from '
-                                 'layout|nested block 4 from layout|')
-
-    def test_level2(self):
-        tmpl = env.get_template('level2')
-        assert tmpl.render() == ('|block 1 from level1|nested block 5 from '
-                                 'level2|nested block 4 from layout|')
-
-    def test_level3(self):
-        tmpl = env.get_template('level3')
-        assert tmpl.render() == ('|block 1 from level1|block 5 from level3|'
-                                 'block 4 from level3|')
-
-    def test_level4(sel):
-        tmpl = env.get_template('level4')
-        assert tmpl.render() == ('|block 1 from level1|block 5 from '
-                                 'level3|block 3 from level4|')
-
-    def test_super(self):
-        env = Environment(loader=DictLoader({
-            'a': '{% block intro %}INTRO{% endblock %}|'
-                 'BEFORE|{% block data %}INNER{% endblock %}|AFTER',
-            'b': '{% extends "a" %}{% block data %}({{ '
-                 'super() }}){% endblock %}',
-            'c': '{% extends "b" %}{% block intro %}--{{ '
-                 'super() }}--{% endblock %}\n{% block data '
-                 '%}[{{ super() }}]{% endblock %}'
-        }))
-        tmpl = env.get_template('c')
-        assert tmpl.render() == '--INTRO--|BEFORE|[(INNER)]|AFTER'
-
-    def test_working(self):
-        tmpl = env.get_template('working')
-
-    def test_reuse_blocks(self):
-        tmpl = env.from_string('{{ self.foo() }}|{% block foo %}42'
-                               '{% endblock %}|{{ self.foo() }}')
-        assert tmpl.render() == '42|42|42'
-
-    def test_preserve_blocks(self):
-        env = Environment(loader=DictLoader({
-            'a': '{% if false %}{% block x %}A{% endblock %}{% endif %}{{ self.x() }}',
-            'b': '{% extends "a" %}{% block x %}B{{ super() }}{% endblock %}'
-        }))
-        tmpl = env.get_template('b')
-        assert tmpl.render() == 'BA'
-
-    def test_dynamic_inheritance(self):
-        env = Environment(loader=DictLoader({
-            'master1': 'MASTER1{% block x %}{% endblock %}',
-            'master2': 'MASTER2{% block x %}{% endblock %}',
-            'child': '{% extends master %}{% block x %}CHILD{% endblock %}'
-        }))
-        tmpl = env.get_template('child')
-        for m in range(1, 3):
-            assert tmpl.render(master='master%d' % m) == 'MASTER%dCHILD' % m
-
-    def test_multi_inheritance(self):
-        env = Environment(loader=DictLoader({
-            'master1': 'MASTER1{% block x %}{% endblock %}',
-            'master2': 'MASTER2{% block x %}{% endblock %}',
-            'child': '''{% if master %}{% extends master %}{% else %}{% extends
-                        'master1' %}{% endif %}{% block x %}CHILD{% endblock %}'''
-        }))
-        tmpl = env.get_template('child')
-        assert tmpl.render(master='master2') == 'MASTER2CHILD'
-        assert tmpl.render(master='master1') == 'MASTER1CHILD'
-        assert tmpl.render() == 'MASTER1CHILD'
-
-    def test_scoped_block(self):
-        env = Environment(loader=DictLoader({
-            'master.html': '{% for item in seq %}[{% block item scoped %}'
-                           '{% endblock %}]{% endfor %}'
-        }))
-        t = env.from_string('{% extends "master.html" %}{% block item %}'
-                            '{{ item }}{% endblock %}')
-        assert t.render(seq=range(5)) == '[0][1][2][3][4]'
-
-    def test_super_in_scoped_block(self):
-        env = Environment(loader=DictLoader({
-            'master.html': '{% for item in seq %}[{% block item scoped %}'
-                           '{{ item }}{% endblock %}]{% endfor %}'
-        }))
-        t = env.from_string('{% extends "master.html" %}{% block item %}'
-                            '{{ super() }}|{{ item * 2 }}{% endblock %}')
-        assert t.render(seq=range(5)) == '[0|0][1|2][2|4][3|6][4|8]'
-
-
-class BugFixTestCase(JinjaTestCase):
-
-    def test_fixed_macro_scoping_bug(self):
-        assert Environment(loader=DictLoader({
-            'test.html': '''\
-        {% extends 'details.html' %}
-
-        {% macro my_macro() %}
-        my_macro
-        {% endmacro %}
-
-        {% block inner_box %}
-            {{ my_macro() }}
-        {% endblock %}
-            ''',
-            'details.html': '''\
-        {% extends 'standard.html' %}
-
-        {% macro my_macro() %}
-        my_macro
-        {% endmacro %}
-
-        {% block content %}
-            {% block outer_box %}
-                outer_box
-                {% block inner_box %}
-                    inner_box
-                {% endblock %}
-            {% endblock %}
-        {% endblock %}
-        ''',
-            'standard.html': '''
-        {% block content %}&nbsp;{% endblock %}
-        '''
-        })).get_template("test.html").render().split() == [u'outer_box', u'my_macro']
-
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(InheritanceTestCase))
-    suite.addTest(unittest.makeSuite(BugFixTestCase))
-    return suite


Mime
View raw message