Preparing for User Testing
The problem I was addressing this week was how InferredTypes keep track of how they're being used so they can limit what can be assigned to them. Previously I had added some catches on creation of AssignmentExpressions and MethodInvocation. I got rid of those in favor of adding a listener to the TransactionHistory. For the most part, this has worked out. One problem is that it doesn't automatically refresh the methods pane for a local variable when it loses the ability to call it. Another problem comes out when trying to load a saved world. I haven't been able to find a good place to add the listener when the world is being decoded, and I plan on talking with Dennis next week to get to the bottom of this.
I went in and fixed how methods are determined to be equivalent for an inferred type. For awhile now, there's been a TODO reminding me to check more than just names of methods when checking if all models in a type have it. Now the program checks the parameters of the method to ensure they have the same number, type and name.
Looking forward, I'm looking at what I need to complete in order to put my project in front of users. I also need to determine what exactly I would be testing. For the first part, the most glaring thing I need to complete is when trying to assign a value to a variable, explaining why certain values are unavailable because they don't have a method that's already being used. For what exactly I'm testing, I am not 100% certain. The scenario I'm trying to help is when a user has different models with similar behavior, they can use that behavior in for loops and each in together blocks. Essentially models can have the same behavior without being the same type. For instance, in the Underwater Treasure Hunt, I would be able to add multiple badGuy Fish and deal with them all in one place rather than treat them separately. I don't think this desire would come up naturally for a first time user just sitting down to Looking Glass, so I'm unsure about how to test it. I'll need to brainstorm more and discuss with the group about what to do.