Nested assert_selects Bug in Edge?

I just noticed that the shortcut mentioned in the Rails Edge API
documentation doesn't seem to actually work as specified; the nested
selector doesn't seem to be restricted to one of the returned elements.


<ol id="fruit_basket">
  <li><p class="type"></p></li>
  <li><p class="type"></p></li>
  <li><p class="type"></p></li>
  <li><p class="type"></p></li>

Okay, standard ordered list with four list items, within each item is a
p with class="apple".

According to the documentation, this should work:

assert_select "ol#fruit_basket>li" do
  assert_select "p.type", 1

This fails with "Expected at most 1 elements, found 4.

If I do it explicitly,

assert_select "ol#fruit_basket>li" do |fruits|
  fruits.each do |fruit|
    assert_select fruit, "p.type", 1

It passes.

Is this a core bug, or a documentation bug? If indeed this is a bug,
and I'm not just nuts, I'd be happy to work on a patch for either.


I guess its somewhat misleading documentation

As I understand it

      assert_select "ol>li" do |elements|
          elements.each do |element|
             assert_select element, "li"

says "For each li element that is a child of ol, assert that the
element is a li "


      assert_select "ol>li" do
           assert_select "li"

says "For the set of li elements that are children of ol, assert that
the set contains an li element"

The second form is more useful then, if you had something like

<ol id="fruit_basket">
  <li><p class="apple"></p></li>
  <li><p class="pear"></p></li>
  <li><p class="grape"></p></li>
  <li><p class="orange"></p></li>

and you want to be able to implement
"assert that the fruit basket contains an apple"