def test_def_save_each(self): expect = { 'first': { 'items': [{ 'url': '/local/a', 'desc': 'first nav item' }, { 'url': '/local/b', 'desc': 'second nav item' }] }, 'second': { 'items': [{ 'url': 'http://ext.com/a', 'desc': 'first content link' }, { 'url': 'http://ext.com/b', 'desc': 'second content link' }] } } TMPL = """ def: simple $ li a save each : items | [href] ; : url | text ; : desc $ #first-ul simple ; : first $ #second-ul simple ; : second """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == expect TMPL = """ def: simple $ li a save each : items | [href] ; : url | text ; : desc $ #first-ul ; simple ; : first $ #second-ul ; simple ; : second """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == expect
def test_deep_save_alias(self): TMPL = """ : parent.value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['parent']['value'].html() == pq_doc.html()
def test_css_sub_ctx_save(self): TMPL = """ $ h1 | 0 text ; save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == 'Text in h1'
def test_multiple_inline_sub_ctx(self): TMPL = """ $ h1 ; | 0 ; | text ; : value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == 'Text in h1'
def test_attr_text_error(self): TMPL = """ $ h1 | [href] text save: fail """ with pytest.raises(UnexpectedTokenError): tt = TakeTemplate(TMPL)
def test_invalid_query_error(self): TMPL = """ .hm | [href] hm: fail """ with pytest.raises(InvalidDirectiveError): tt = TakeTemplate(TMPL)
def test_deep_save_each(self): TMPL = """ $ nav $ a save each: nav.items | [href] save: item.url | text save: item.text """ tt = TakeTemplate(TMPL) data = tt(html_fixture) expect = { 'nav': { 'items': [{ 'item': { 'url': '/local/a', 'text': 'first nav item' } },{ 'item': { 'url': '/local/b', 'text': 'second nav item' } } ] } } assert data == expect
def test_invalid_directive_statement_error(self): TMPL = """ $ h1 | [href] save fail """ with pytest.raises(InvalidDirectiveError): tt = TakeTemplate(TMPL)
def test_verbose_url_regexp(self): TMPL = """ accessor: url parts ``` (https?) (://) ([^/]+) (?:/(.+))? ``` set context $ #second-ul a save each : urls | [href] url parts rx match | 1 ; : protocol | 3 ; : domain | 4 ; : page """ tt = TakeTemplate(TMPL) data = tt(html_fixture) expect = [ { 'protocol': 'http', 'domain': 'ext.com', 'page': 'a' }, { 'protocol': 'http', 'domain': 'ext.com', 'page': 'b' } ] assert data['urls'] == expect
def test_save(self): TMPL = """ save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'].html() == pq_doc.html()
def test_css_sub_ctx_save_alias_nested(self): TMPL = """ $ h1 | 0 text ; : parent.value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['parent']['value'] == 'Text in h1'
def test_template_compiles(self): TMPL = """ $ h1 | text save: value """ tt = TakeTemplate(TMPL) assert tt
def test_neg_index(self): TMPL = """ $ a | -1 text save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == 'second content link'
def test_comments_id_selector(self): TMPL = """ $ #id-on-h1 | [id] save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == {'value': 'id-on-h1'}
def test_absent_neg_index(self): TMPL = """ $ notpresent | -1 text save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == ''
def test_save_absent_attr(self): TMPL = """ $ h1 | [mia] save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == None
def test_save_attr(self): TMPL = """ $ h1 | [id] save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == 'id-on-h1'
def test_query_deep_save(self): TMPL = """ $ h1 | text save: deep.value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == {'deep': {'value': 'Text in h1'}}
def test_inline_namespace(self): TMPL = """ $ li ; + : parent | 0 text ; : value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['parent']['value'] == 'first nav item'
def test_save_css_text_query(self): TMPL = """ $ h1 | text save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == {'value': 'Text in h1'}
def test_save_css_index_text_query(self): TMPL = """ $ a | 0 text save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == 'first nav item'
def test_alias_save_text(self): TMPL = """ + : parent $ h1 | 0 text ; : value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['parent']['value'] == 'Text in h1'
def test_save_css_index_query(self): TMPL = """ $ a | 0 save: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'].html() == pq_doc('a').eq(0).html()
def test_save_css_query_hard_tabs(self): TMPL = """ t\t$ h1 t\t\tsave: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'].html() == pq_doc('h1').html()
def test_sub_ctx_save_hard_tabs(self): TMPL = """ t\t$ section t\t\t\t$ ul\t|\t\t[id] t\t\t\t\t\tsave: \t \tvalue """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == {'value': 'second-ul'}
def test_sub_ctx_save_alias(self): TMPL = """ $ section $ ul | [id] : value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == {'value': 'second-ul'}
def test_sub_ctx_save_alias_empty(self): TMPL = """ $ nav $ ul | 1 [id] : value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data == {'value': None}
def test_invalid_save_each_context(self): TMPL = """ $ li save each: items $ h1 save: fail """ with pytest.raises(TakeSyntaxError): tt = TakeTemplate(TMPL)
def test_basic_own_text(self): TMPL = """ $ #not-all-own-text | text ; save: full_text | own_text ; save: own_text """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['full_text'] == 'own text not own text more own text' assert data['own_text'] == 'own text more own text'
def test_merge_only_prop(self): TMPL = """ def: simple $ li | 0 text save: value simple merge: value """ tt = TakeTemplate(TMPL) data = tt(html_fixture) assert data['value'] == 'first nav item'