diff --git a/strip-test-selectors.js b/strip-test-selectors.js index cb00248d..28e94ec4 100644 --- a/strip-test-selectors.js +++ b/strip-test-selectors.js @@ -4,6 +4,10 @@ let TEST_SELECTOR_PREFIX = /data-test-.*/; +function isTestSelector(attribute) { + return TEST_SELECTOR_PREFIX.test(attribute); +} + function StripTestSelectorsTransform() { this.syntax = null; } @@ -14,11 +18,15 @@ StripTestSelectorsTransform.prototype.transform = function(ast) { walker.visit(ast, function(node) { if (node.type === 'ElementNode') { node.attributes = node.attributes.filter(function(attribute) { - return !TEST_SELECTOR_PREFIX.test(attribute.name); + return !isTestSelector(attribute.name); }); } else if (node.type === 'MustacheStatement' || node.type === 'BlockStatement') { + node.params = node.params.filter(function(param) { + return !isTestSelector(param.original); + }); + node.hash.pairs = node.hash.pairs.filter(function(pair) { - return !TEST_SELECTOR_PREFIX.test(pair.key); + return !isTestSelector(pair.key); }); } }); diff --git a/tests/dummy/app/components/print-test-attributes.js b/tests/dummy/app/components/print-test-attributes.js new file mode 100644 index 00000000..0e5bb2f1 --- /dev/null +++ b/tests/dummy/app/components/print-test-attributes.js @@ -0,0 +1,11 @@ +import Ember from 'ember'; + +const { Component } = Ember; + +const component = Component.extend(); + +component.reopenClass({ + positionalParams: 'params' +}); + +export default component; diff --git a/tests/dummy/app/templates/components/print-test-attributes.hbs b/tests/dummy/app/templates/components/print-test-attributes.hbs index 990e1941..60bf5127 100644 --- a/tests/dummy/app/templates/components/print-test-attributes.hbs +++ b/tests/dummy/app/templates/components/print-test-attributes.hbs @@ -2,3 +2,4 @@
{{data-test-second}}
{{data-non-test}}
{{data-test}}
+
{{params.length}}
\ No newline at end of file diff --git a/tests/integration/strip-data-test-attributes-from-components-test.js b/tests/integration/strip-data-test-attributes-from-components-test.js index 43e59e90..aed650b3 100644 --- a/tests/integration/strip-data-test-attributes-from-components-test.js +++ b/tests/integration/strip-data-test-attributes-from-components-test.js @@ -9,6 +9,30 @@ moduleForComponent('print-test-attributes', 'StripTestSelectorsTransform plugin' if (config.stripTestSelectors) { + test('it strips data-test-* attributes from components with single positional params', function(assert) { + this.render(hbs`{{print-test-attributes data-test-should-not-be}}`); + + assert.equal(this.$('.data-test-positional-params').text(), 0, 'there should be no params'); + }); + + test('it strips data-test-* attributes from components with positional params data-test-* as first param', function(assert) { + this.render(hbs`{{print-test-attributes data-test-should-not-be "param1"}}`); + + assert.equal(this.$('.data-test-positional-params').text(), 1, 'there should be only one param'); + }); + + test('it strips data-test-* attributes from components with multiple positional params', function(assert) { + this.render(hbs`{{print-test-attributes "param1" data-test-should-not-be}}`); + + assert.equal(this.$('.data-test-positional-params').text(), 1, 'there should be only one param'); + }); + + test('it strips data-test-* attributes from components with block and multiple positional params', function(assert) { + this.render(hbs`{{#print-test-attributes "param1" data-test-should-not-be}}{{/print-test-attributes}}`); + + assert.equal(this.$('.data-test-positional-params').text(), 1, 'there should be only one param'); + }); + test('it strips data-test-* attributes from components', function(assert) { this.render(hbs`{{print-test-attributes data-test-first="foobar"}}`);