Chi
8 years ago
7 changed files with 377 additions and 1 deletions
@ -0,0 +1,124 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace Drupal\Tests\twig_tweak\Functional; |
||||||
|
|
||||||
|
use Drupal\Tests\BrowserTestBase; |
||||||
|
|
||||||
|
/** |
||||||
|
* Tests twig_tweak twig extension. |
||||||
|
* |
||||||
|
* @group twig_tweak |
||||||
|
*/ |
||||||
|
class TwigTweakTest extends BrowserTestBase { |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public static $modules = [ |
||||||
|
'twig_tweak', |
||||||
|
'twig_tweak_test', |
||||||
|
'views', |
||||||
|
'node', |
||||||
|
'block', |
||||||
|
'image', |
||||||
|
]; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public function setUp() { |
||||||
|
parent::setUp(); |
||||||
|
$this->createContentType(['type' => 'page']); |
||||||
|
$this->createNode(['title' => 'Alpha']); |
||||||
|
$this->createNode(['title' => 'Beta']); |
||||||
|
$this->createNode(['title' => 'Gamma']); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Tests output produced by the twig extension. |
||||||
|
*/ |
||||||
|
public function testOutput() { |
||||||
|
$this->drupalGet('<front>'); |
||||||
|
|
||||||
|
// Test default views display. |
||||||
|
$xpath = '//div[@class = "tt-view-default"]'; |
||||||
|
$xpath .= '//div[contains(@class, "view-twig-tweak-test") and contains(@class, "view-display-id-default")]'; |
||||||
|
$xpath .= '/div[@class = "view-content"]//ul[count(./li) = 3]/li'; |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/1") and . = "Alpha"]'); |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/2") and . = "Beta"]'); |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/3") and . = "Gamma"]'); |
||||||
|
|
||||||
|
// Test page_1 view display. |
||||||
|
$xpath = '//div[@class = "tt-view-page_1"]'; |
||||||
|
$xpath .= '//div[contains(@class, "view-twig-tweak-test") and contains(@class, "view-display-id-page_1")]'; |
||||||
|
$xpath .= '/div[@class = "view-content"]//ul[count(./li) = 3]/li'; |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/1") and . = "Alpha"]'); |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/2") and . = "Beta"]'); |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/3") and . = "Gamma"]'); |
||||||
|
|
||||||
|
// Test view argument. |
||||||
|
$xpath = '//div[@class = "tt-view-page_1-with-argument"]'; |
||||||
|
$xpath .= '//div[contains(@class, "view-twig-tweak-test")]'; |
||||||
|
$xpath .= '/div[@class = "view-content"]//ul[count(./li) = 1]/li'; |
||||||
|
$this->assertByXpath($xpath . '//a[contains(@href, "/node/1") and . = "Alpha"]'); |
||||||
|
|
||||||
|
// Test entity default view mode. |
||||||
|
$xpath = '//div[@class = "tt-entity-default"]'; |
||||||
|
$xpath .= '/article[contains(@class, "node") and not(contains(@class, "node--view-mode-teaser"))]'; |
||||||
|
$xpath .= '/h2/a/span[. = "Alpha"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test entity teaser view mode. |
||||||
|
$xpath = '//div[@class = "tt-entity-teaser"]'; |
||||||
|
$xpath .= '/article[contains(@class, "node") and contains(@class, "node--view-mode-teaser")]'; |
||||||
|
$xpath .= '/h2/a/span[. = "Alpha"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test loading entity from url. |
||||||
|
$xpath = '//div[@class = "tt-entity-from-url" and . = ""]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
$this->drupalGet('/node/2'); |
||||||
|
$xpath = '//div[@class = "tt-entity-from-url"]'; |
||||||
|
$xpath .= '/article[contains(@class, "node")]'; |
||||||
|
$xpath .= '/h2/a/span[. = "Beta"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test field. |
||||||
|
$xpath = '//div[@class = "tt-field"]/div[contains(@class, "field--name-body")]/p[. != ""]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test block. |
||||||
|
$xpath = '//div[@class = "tt-block"]'; |
||||||
|
$xpath .= '/div[@id="block-powered-by-drupal"]/span[contains(., "Powered by Drupal")]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test token. |
||||||
|
$xpath = '//div[@class = "tt-token" and . = "Drupal"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test config. |
||||||
|
$xpath = '//div[@class = "tt-config" and . = "Anonymous"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test token replacement. |
||||||
|
$xpath = '//div[@class = "tt-token-replace" and . = "Site name: Drupal"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test preg replacement. |
||||||
|
$xpath = '//div[@class = "tt-preg-replace" and . = "foo-bar"]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
|
||||||
|
// Test image style. |
||||||
|
$xpath = '//div[@class = "tt-image-style" and contains(., "styles/thumbnail/public/images/ocean.jpg")]'; |
||||||
|
$this->assertByXpath($xpath); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Checks that an element specified by a the xpath exists on the current page. |
||||||
|
*/ |
||||||
|
public function assertByXpath($xpath) { |
||||||
|
$this->assertSession()->elementExists('xpath', $xpath); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
langcode: en |
||||||
|
status: true |
||||||
|
dependencies: |
||||||
|
module: |
||||||
|
- system |
||||||
|
id: powered_by_drupal |
||||||
|
region: main |
||||||
|
weight: 10 |
||||||
|
provider: null |
||||||
|
plugin: system_powered_by_block |
||||||
|
settings: |
||||||
|
id: system_powered_by_block |
||||||
|
label: 'Powered by Drupal' |
||||||
|
provider: system |
||||||
|
label_display: '0' |
||||||
|
visibility: { } |
@ -0,0 +1,193 @@ |
|||||||
|
langcode: en |
||||||
|
status: true |
||||||
|
dependencies: |
||||||
|
module: |
||||||
|
- node |
||||||
|
- user |
||||||
|
id: twig_tweak_test |
||||||
|
label: 'Twig tweak test' |
||||||
|
module: views |
||||||
|
description: '' |
||||||
|
tag: '' |
||||||
|
base_table: node_field_data |
||||||
|
base_field: nid |
||||||
|
core: 8.x |
||||||
|
display: |
||||||
|
default: |
||||||
|
display_plugin: default |
||||||
|
id: default |
||||||
|
display_title: Master |
||||||
|
position: 0 |
||||||
|
display_options: |
||||||
|
access: |
||||||
|
type: perm |
||||||
|
options: |
||||||
|
perm: 'access content' |
||||||
|
cache: |
||||||
|
type: tag |
||||||
|
options: { } |
||||||
|
query: |
||||||
|
type: views_query |
||||||
|
options: |
||||||
|
disable_sql_rewrite: false |
||||||
|
distinct: false |
||||||
|
replica: false |
||||||
|
query_comment: '' |
||||||
|
query_tags: { } |
||||||
|
exposed_form: |
||||||
|
type: basic |
||||||
|
options: |
||||||
|
submit_button: Apply |
||||||
|
reset_button: false |
||||||
|
reset_button_label: Reset |
||||||
|
exposed_sorts_label: 'Sort by' |
||||||
|
expose_sort_order: true |
||||||
|
sort_asc_label: Asc |
||||||
|
sort_desc_label: Desc |
||||||
|
pager: |
||||||
|
type: none |
||||||
|
options: |
||||||
|
offset: 0 |
||||||
|
style: |
||||||
|
type: html_list |
||||||
|
row: |
||||||
|
type: fields |
||||||
|
options: |
||||||
|
default_field_elements: true |
||||||
|
inline: { } |
||||||
|
separator: '' |
||||||
|
hide_empty: false |
||||||
|
fields: |
||||||
|
title: |
||||||
|
id: title |
||||||
|
table: node_field_data |
||||||
|
field: title |
||||||
|
entity_type: node |
||||||
|
entity_field: title |
||||||
|
label: '' |
||||||
|
alter: |
||||||
|
alter_text: false |
||||||
|
make_link: false |
||||||
|
absolute: false |
||||||
|
trim: false |
||||||
|
word_boundary: false |
||||||
|
ellipsis: false |
||||||
|
strip_tags: false |
||||||
|
html: false |
||||||
|
hide_empty: false |
||||||
|
empty_zero: false |
||||||
|
settings: |
||||||
|
link_to_entity: true |
||||||
|
plugin_id: field |
||||||
|
relationship: none |
||||||
|
group_type: group |
||||||
|
admin_label: '' |
||||||
|
exclude: false |
||||||
|
element_type: '' |
||||||
|
element_class: '' |
||||||
|
element_label_type: '' |
||||||
|
element_label_class: '' |
||||||
|
element_label_colon: true |
||||||
|
element_wrapper_type: '' |
||||||
|
element_wrapper_class: '' |
||||||
|
element_default_classes: true |
||||||
|
empty: '' |
||||||
|
hide_alter_empty: true |
||||||
|
click_sort_column: value |
||||||
|
type: string |
||||||
|
group_column: value |
||||||
|
group_columns: { } |
||||||
|
group_rows: true |
||||||
|
delta_limit: 0 |
||||||
|
delta_offset: 0 |
||||||
|
delta_reversed: false |
||||||
|
delta_first_last: false |
||||||
|
multi_type: separator |
||||||
|
separator: ', ' |
||||||
|
field_api_classes: false |
||||||
|
filters: { } |
||||||
|
sorts: |
||||||
|
nid: |
||||||
|
id: nid |
||||||
|
table: node_field_data |
||||||
|
field: nid |
||||||
|
relationship: none |
||||||
|
group_type: group |
||||||
|
admin_label: '' |
||||||
|
order: ASC |
||||||
|
exposed: false |
||||||
|
expose: |
||||||
|
label: '' |
||||||
|
entity_type: node |
||||||
|
entity_field: nid |
||||||
|
plugin_id: standard |
||||||
|
title: 'Twig tweak test' |
||||||
|
header: { } |
||||||
|
footer: { } |
||||||
|
empty: { } |
||||||
|
relationships: { } |
||||||
|
arguments: |
||||||
|
nid: |
||||||
|
id: nid |
||||||
|
table: node_field_data |
||||||
|
field: nid |
||||||
|
relationship: none |
||||||
|
group_type: group |
||||||
|
admin_label: '' |
||||||
|
default_action: ignore |
||||||
|
exception: |
||||||
|
value: all |
||||||
|
title_enable: false |
||||||
|
title: All |
||||||
|
title_enable: false |
||||||
|
title: '' |
||||||
|
default_argument_type: fixed |
||||||
|
default_argument_options: |
||||||
|
argument: '' |
||||||
|
default_argument_skip_url: false |
||||||
|
summary_options: |
||||||
|
base_path: '' |
||||||
|
count: true |
||||||
|
items_per_page: 25 |
||||||
|
override: false |
||||||
|
summary: |
||||||
|
sort_order: asc |
||||||
|
number_of_records: 0 |
||||||
|
format: default_summary |
||||||
|
specify_validation: false |
||||||
|
validate: |
||||||
|
type: none |
||||||
|
fail: 'not found' |
||||||
|
validate_options: { } |
||||||
|
break_phrase: false |
||||||
|
not: false |
||||||
|
entity_type: node |
||||||
|
entity_field: nid |
||||||
|
plugin_id: node_nid |
||||||
|
display_extenders: { } |
||||||
|
cache_metadata: |
||||||
|
max-age: -1 |
||||||
|
contexts: |
||||||
|
- 'languages:language_content' |
||||||
|
- 'languages:language_interface' |
||||||
|
- url |
||||||
|
- 'user.node_grants:view' |
||||||
|
- user.permissions |
||||||
|
tags: { } |
||||||
|
page_1: |
||||||
|
display_plugin: page |
||||||
|
id: page_1 |
||||||
|
display_title: Page |
||||||
|
position: 1 |
||||||
|
display_options: |
||||||
|
display_extenders: { } |
||||||
|
path: twig-tweak-test |
||||||
|
cache_metadata: |
||||||
|
max-age: -1 |
||||||
|
contexts: |
||||||
|
- 'languages:language_content' |
||||||
|
- 'languages:language_interface' |
||||||
|
- url |
||||||
|
- 'user.node_grants:view' |
||||||
|
- user.permissions |
||||||
|
tags: { } |
@ -0,0 +1,15 @@ |
|||||||
|
<div class="tt-test" style="background-color: lavender"> |
||||||
|
<div class="tt-view-default">{{ drupal_view('twig_tweak_test') }}</div> |
||||||
|
<div class="tt-view-page_1">{{ drupal_view('twig_tweak_test', 'page_1') }}</div> |
||||||
|
<div class="tt-view-page_1-with-argument">{{ drupal_view('twig_tweak_test', 'page_1', 1) }}</div> |
||||||
|
<div class="tt-entity-default">{{ drupal_entity('node', 1) }}</div> |
||||||
|
<div class="tt-entity-teaser">{{ drupal_entity('node', 1, 'teaser') }}</div> |
||||||
|
<div class="tt-entity-from-url">{{ drupal_entity('node') }}</div> |
||||||
|
<div class="tt-field">{{ drupal_field('body', 'node', 1) }}</div> |
||||||
|
<div class="tt-block">{{ drupal_block('powered_by_drupal') }}</div> |
||||||
|
<div class="tt-token">{{ drupal_token('site:name') }}</div> |
||||||
|
<div class="tt-config">{{ drupal_config('user.settings', 'anonymous') }}</div> |
||||||
|
<div class="tt-token-replace">{{ 'Site name: [site:name]' | token_replace }}</div> |
||||||
|
<div class="tt-preg-replace">{{ 'foo' | preg_replace('(foo)', '$1-bar') }}</div> |
||||||
|
<div class="tt-image-style">{{ 'public://images/ocean.jpg' | image_style('thumbnail') }}</div> |
||||||
|
</div> |
@ -0,0 +1,8 @@ |
|||||||
|
name: Twig tweak test |
||||||
|
type: module |
||||||
|
description: Support module for Tweak twig testing. |
||||||
|
package: Testing |
||||||
|
core: 8.x |
||||||
|
dependencies: |
||||||
|
- twig_tweak |
||||||
|
- node |
@ -0,0 +1,20 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Primary module hooks for Twig Tweak test module. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_page_bottom(). |
||||||
|
*/ |
||||||
|
function twig_tweak_test_page_bottom(array &$page_bottom) { |
||||||
|
$page_bottom['twig_tweak_test']['#theme'] = 'twig_tweak_test'; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_theme(). |
||||||
|
*/ |
||||||
|
function twig_tweak_test_theme() { |
||||||
|
return ['twig_tweak_test' => ['variables' => []]]; |
||||||
|
} |
Loading…
Reference in new issue