What's the best way to use hamcrest-AS3 to test for membership in an IList?

Posted by Chris R on Stack Overflow See other posts from Stack Overflow or by Chris R
Published on 2010-06-01T21:00:21Z Indexed on 2010/06/01 21:03 UTC
Read the original article Hit count: 161

Filed under:
|
|

I'm using Flex 3.3, with hamcrest-as3 used to test for item membership in a list as part of my unit tests:

var myList: IList = new ArrayCollection(['a', 'b', 'c']).list;
assertThat(myList, hasItems('a', 'b', 'c'));

The problem is that apparently the IList class doesn't support for each iteration; for example, with the above list, this will not trace anything:

for each (var i: * in myList) { trace (i); }

However, tracing either an Array or an ArrayCollection containing the same data will work just fine.

What I want to do is (without having to tear apart my existing IList-based interface) be able to treat an IList like an Array or an ArrayCollection for the purposes of testing, because that's what hamcrest does:

override public function matches(collection:Object):Boolean
{
    for each (var item:Object in collection)
    {
        if (_elementMatcher.matches(item))
        {
            return true;
        }
    }

    return false;
}

Is this simply doomed to failure? As a side note, why would the IList interface not be amenable to iteration this way? That just seems wrong.

© Stack Overflow or respective owner

Related posts about flex

Related posts about flex3