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