You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Kees van Dieren <ke...@gmail.com> on 2014/11/25 21:56:26 UTC

TagTester: assertions and find tags by style class names

Hi developers,

Currently we are doing a project that has most of its formatting based on
absence or presence on CSS class names. Some of testing is done using
TagTester.

We would like to have some features on TagTester to make unit-testing and
asserting things easier.

Basically those methods would be useful:

In WicketTester / BaseWicketTester class:

/**
 * Gives all tags that have the given css className. This includes tags
that have other classNames as well, e.g.
 * <pre>
 *     &lt;span class="foo bar"&gt;hi&lt;/span&gt;
 * </pre>
 * will be returned for:
 *
 * <pre>
 *     tester.getTagsByClassName(&quot;foo&quot;);
 * </pre>
 * @return
 *
 */
public List<TagTester> getTagsByClassName(String className);

        public TagTester getTagByClassName(String className);

In TagTester class:
/**
 * <p>Asserts that given <code>className</code> is set for this tag.</p>
 *
 *
 * <p>This tag might also have other class names. Given this tag:</p>
 * <pre>
 *     &lt;span class="foo bar"&gt;hi&lt;/span&gt;
 * </pre>
 * this assertion will pass:
 * <pre>
 *     tester.assertHasClassName(&quot;foo&quot;);
 * </pre>
 *
 */
public TagTester assertHasClass(String className) {
// TODO: implement this
return this;
}

public TagTester assertHasAttribute(String attribute) {
// TODO: implement this
return this;
}

public TagTester assertAttributeContains(String attribute, String
partialValue) {
// TODO: implement this
return this;
}

public TagTester assertAttributeIs(String attribute, String value) {
// TODO: implement this
return this;
}

These changes would have the following advantages for us:
* Wicket tests for our pages and panels gets more compact and more readable.
* Assertion failure messages can be much more informative.

Example of current assertion:
assertTrue(tagTester.attributeContains("class", "menuitem-active"))
(Assertion message not specific / informative)

New assertion:
tagTester.assertHasClass("menuitem-active");
Sample assertion failed message: <li class="menuitem"><a
href="/">home</a></li> expected to have style class 'menuitem-active'"

Does this make sense?

If wicket developers like the idea, I am willing to contribute those
features to Wicket.

Best regards,

Kees van Dieren

Re: TagTester: assertions and find tags by style class names

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

I like the idea !

I think we can go even further by using http://jsoup.org/ for most of
TagTester's internal work. But this will need more thinking. TagTester is
part of wicket-core and we will have to make jsoup an optional dependency.
Maybe for Wicket 8.x ... Or create a new project at WicketStuff, make it
functional and later merge it to Wicket if all goes well.


Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Tue, Nov 25, 2014 at 10:56 PM, Kees van Dieren <ke...@gmail.com>
wrote:

> Hi developers,
>
> Currently we are doing a project that has most of its formatting based on
> absence or presence on CSS class names. Some of testing is done using
> TagTester.
>
> We would like to have some features on TagTester to make unit-testing and
> asserting things easier.
>
> Basically those methods would be useful:
>
> In WicketTester / BaseWicketTester class:
>
> /**
>  * Gives all tags that have the given css className. This includes tags
> that have other classNames as well, e.g.
>  * <pre>
>  *     &lt;span class="foo bar"&gt;hi&lt;/span&gt;
>  * </pre>
>  * will be returned for:
>  *
>  * <pre>
>  *     tester.getTagsByClassName(&quot;foo&quot;);
>  * </pre>
>  * @return
>  *
>  */
> public List<TagTester> getTagsByClassName(String className);
>
>         public TagTester getTagByClassName(String className);
>
> In TagTester class:
> /**
>  * <p>Asserts that given <code>className</code> is set for this tag.</p>
>  *
>  *
>  * <p>This tag might also have other class names. Given this tag:</p>
>  * <pre>
>  *     &lt;span class="foo bar"&gt;hi&lt;/span&gt;
>  * </pre>
>  * this assertion will pass:
>  * <pre>
>  *     tester.assertHasClassName(&quot;foo&quot;);
>  * </pre>
>  *
>  */
> public TagTester assertHasClass(String className) {
> // TODO: implement this
> return this;
> }
>
> public TagTester assertHasAttribute(String attribute) {
> // TODO: implement this
> return this;
> }
>
> public TagTester assertAttributeContains(String attribute, String
> partialValue) {
> // TODO: implement this
> return this;
> }
>
> public TagTester assertAttributeIs(String attribute, String value) {
> // TODO: implement this
> return this;
> }
>
> These changes would have the following advantages for us:
> * Wicket tests for our pages and panels gets more compact and more
> readable.
> * Assertion failure messages can be much more informative.
>
> Example of current assertion:
> assertTrue(tagTester.attributeContains("class", "menuitem-active"))
> (Assertion message not specific / informative)
>
> New assertion:
> tagTester.assertHasClass("menuitem-active");
> Sample assertion failed message: <li class="menuitem"><a
> href="/">home</a></li> expected to have style class 'menuitem-active'"
>
> Does this make sense?
>
> If wicket developers like the idea, I am willing to contribute those
> features to Wicket.
>
> Best regards,
>
> Kees van Dieren
>