Files
ansible/test/units/template/test_native_concat.py
Martin Krizek 58e38044fe Fix when evaluation on Native Jinja and Python 3.10 (#75202)
* Fix when evaluation on Native Jinja and Python 3.10

* Add unit test

* Add explaining comment

* Enable jinja2_native before tests

Co-Authored-By: Matt Martz <matt@sivel.net>

* Sanity

* Return native template module instead of modifying globals

Co-authored-by: Matt Martz <matt@sivel.net>
2021-07-30 17:27:49 +02:00

50 lines
1.7 KiB
Python

# Copyright: (c) 2019, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import importlib
import sys
import pytest
from ansible import constants as C
from ansible.errors import AnsibleUndefinedVariable
from ansible.playbook.conditional import Conditional
from units.mock.loader import DictDataLoader
@pytest.fixture
def native_template_mod(monkeypatch):
monkeypatch.delitem(sys.modules, 'ansible.template')
monkeypatch.setattr(C, 'DEFAULT_JINJA2_NATIVE', True)
return importlib.import_module('ansible.template')
# https://github.com/ansible/ansible/issues/52158
def test_undefined_variable(native_template_mod):
fake_loader = DictDataLoader({})
variables = {}
templar = native_template_mod.Templar(loader=fake_loader, variables=variables)
assert isinstance(templar.environment, native_template_mod.AnsibleNativeEnvironment)
with pytest.raises(AnsibleUndefinedVariable):
templar.template("{{ missing }}")
def test_cond_eval(native_template_mod):
fake_loader = DictDataLoader({})
# True must be stored in a variable to trigger templating. Using True
# directly would be caught by optimization for bools to short-circuit
# templating.
variables = {"foo": True}
templar = native_template_mod.Templar(loader=fake_loader, variables=variables)
assert isinstance(templar.environment, native_template_mod.AnsibleNativeEnvironment)
cond = Conditional(loader=fake_loader)
cond.when = ["foo"]
assert cond.evaluate_conditional(templar, variables)