Bjorn, I think this is a hack but it looks like a pretty awesome hack
and I'm definitely going to use it. Thank you very much for posting
it! I think this is part of the best path to creating a mock test
framework for AS3. Adam

--- In [email protected], Bjorn Schultheiss
<[EMAIL PROTECTED]> wrote:
>
> Hey Dave and Adam,
> 
> 
> That way a quick reply i sent yesterday without much thought.
> Currently to convert a generic object to a typed instance i've been  
> using a utility provided by Darron Schall.
> http://www.darronschall.com/weblog/archives/000247.cfm
> 
> basically the method looks like this,
> 
> public static function objectToInstance( object:Object, clazz:Class ):*
>       {
>               var bytes:ByteArray = new ByteArray();
>               bytes.objectEncoding = ObjectEncoding.AMF0;
>               
>               // Find the objects and byetArray.writeObject them, adding in 
> the
>               // class configuration variable name -- essentially, we're  
> constructing
>               // and AMF packet here that contains the class information so 
> that
>               // we can simplly byteArray.readObject the sucker for the 
> translation
>               
>               // Write out the bytes of the original object
>               var objBytes:ByteArray = new ByteArray();
>               objBytes.objectEncoding = ObjectEncoding.AMF0;
>               objBytes.writeObject( object );
>                               
>               // Register all of the classes so they can be decoded via AMF
>               var typeInfo:XML = describeType( clazz );
>               var fullyQualifiedName:String = [EMAIL PROTECTED]().replace 
> ( /::/, "." );
>               registerClassAlias( fullyQualifiedName, clazz );
>               
>               // Write the new object information starting with the class  
> information
>               var len:int = fullyQualifiedName.length;
>               bytes.writeByte( 0x10 );  // 0x10 is AMF0 for "typed object 
> (class  
> instance)"
>               bytes.writeUTF( fullyQualifiedName );
>               // After the class name is set up, write the rest of the object
>               bytes.writeBytes( objBytes, 1 );
>               
>               // Read in the object with the class property added and return 
> that
>               bytes.position = 0;
>               
>               // This generates some ReferenceErrors of the object being 
> passed in
>               // has properties that aren't in the class instance, and 
> generates  
> TypeErrors
>               // when property values cannot be converted to correct values 
> (such  
> as false
>               // being the value, when it needs to be a Date instead).  
> However,  
> these
>               // errors are not thrown at runtime (and only appear in trace 
> ouput  
> when
>               // debugging), so a try/catch block isn't necessary.  I'm not 
> sure  
> if this
>               // classifies as a bug or not... but I wanted to explain why if 
> you  
> debug
>               // you might seem some TypeError or ReferenceError items appear.
>               var result:* = bytes.readObject();
>               return result;
>       }
> 
> 
> regards,
> 
> Bjorn
> 
> 
> 
> 
> 
> On 18/10/2007, at 10:40 AM, dave_defusion wrote:
> 
> > Bjorn,
> >
> > I have been looking at this (as I would like a mocking framework for
> > Flex too) this evening and I've had no luck either.
> >
> > The the registerClassAlias() does add the alias to a given class I
> > can't then get anything to accept it as being of that type
> > - I'm not sure what the alias is, but dumping the describeType()
> > results shows it as an alias property on the type and not as an
> > implementsInterface node, which is what we need.
> >
> > I may not have been fully understood what registerClassAlias though.
> >
> > But it looks (ok, it's late and I'm tired so it may just be that which
> > is causing my negativity) as if trying to get a class to implement an
> > interface (or at least appear to implement an interface) dynamically
> > at run time is a futile effort.
> >
> > Any thoughts?
> >
> > -D
> >
> > --- In [email protected], Bjorn Schultheiss
> > <bjorn.mailinglists@> wrote:
> > >
> > > try add
> > > flash.net.registerClassAlias( "attempt.TestInterface",  
> > TestInterface );
> > > prior to your cast attempt.
> > >
> > >
> > > regards,
> > >
> > > Bjorn
> > >
> > >
> > > On 17/10/2007, at 1:06 PM, aduston1976 wrote:
> > >
> > > > lus I see a number of places on the web where the idea is  
> > mentioned,
> > > > e.g. http://www.herrodius.com/blog/?m=200704 . However I cannot  
> > find
> > > > any mock frameworks for AS3.
> > > >
> > > > This evening I spent some time trying to mock one up on my own  
> > (ok,
> > > > sorry for the pun!) but I ran into troubles. Is anyone  
> > interested in
> > > > thinking about this problem with me?
> > > >
> > > > Here is what I did during my 20 minutes of playing:
> > > >
> > > > Define an interface:
> > > >
> > > > public interface TestInterface
> > > > {
> > > > function setSomething(something : String) : void;
> > > > }
> > > >
> > > > Run the following code:
> > > >
> > > > public function flexmock() {
> > > > var i : TestInterface;
> > > > var c : Class =
> > > > flash.utils.getDefinitionByName("attempt.TestInterface") as Class;
> > > > var desc : XML = flash.utils.describeType(c);
> > > > var str : String = desc.toString();
> > > > var a : Object = new Object();
> > > > a["setSomething"] = function(something : String) : void {
> > > > trace(something); };
> > > > // will fail on the following line, since a does not implement
> > > > TestInterface.
> > > > i = TestInterface(a);
> > > > i.setSomething("blah");
> > > > }
> > > >
> > > > AS3 doesn't support duck typing like Ruby, and I believe there  
> > is no
> > > > way to get an object in memory that implements the TestInterface
> > > > interface that my other objects can use as a mock.
> > > >
> > > > Any thoughts about this? Am I doomed to use elbow grease or code
> > > > generation to create these things?
> > > >
> > > > BTW, this message is also posted on the ActionScript 3 FlexUnit
> > > > Library forum in Google Groups. Hopefully that isn't some kind of
> > > > forum faux pas.
> > > >
> > > > Thank you for any comments,
> > > > Adam
> > > >
> > > >
> > > >
> > >
> >
> >
> >
>


Reply via email to