text: # -*- coding: utf-8 -*-
  
  # Import Python libs
  from __future__ import absolute_import
  
  # Import Salt Testing libs
  from salttesting import skipIf, TestCase
  from salttesting.helpers import ensure_in_syspath
  
  ensure_in_syspath('../..')
  
  # Import Salt libs
  import salt.state
  from salt.config import minion_config
  from salt.template import compile_template_str
  from salt.serializers import yamlex
  
  basic_template = '''#!yamlex
  foo: bar
  '''
  
  complex_template = '''#!yamlex
  placeholder: {foo: !aggregate {foo: 42}}
  placeholder: {foo: !aggregate {bar: null}}
  placeholder: {foo: !aggregate {baz: inga}}
  '''
  
  SKIP_MESSAGE = '%s is unavailable, do prerequisites have been met?'
  
  
  class RendererMixin(object):
      def render(self, template, opts=None):
          _config = minion_config(None)
          _config['file_client'] = 'local'
          if opts:
              _config.update(opts)
          _state = salt.state.State(_config)
          return compile_template_str(template,
                                      _state.rend,
                                      _state.opts['renderer'])
  
  
  class RendererTests(TestCase, RendererMixin):
      @skipIf(not yamlex.available, SKIP_MESSAGE % 'yamlex')
      def test_basic(self):
          sls_obj = self.render(basic_template)
          assert sls_obj == {'foo': 'bar'}, sls_obj
  
      @skipIf(not yamlex.available, SKIP_MESSAGE % 'yamlex')
      def test_complex(self):
  
          sls_obj = self.render(complex_template)
          assert sls_obj == {
              'placeholder': {
                  'foo': {
                      'foo': 42,
                      'bar': None,
                      'baz': 'inga'
                  }
              }
          }, sls_obj
  
  if __name__ == '__main__':
      from integration import run_tests
      run_tests(RendererTests, needs_daemon=False)
  