>' + result.selector;\n\t\tmsg += '\\n' + result.err.message;\n\t\tmsg += '\\n' + result.err.stack;\n\t\treturn msg;\n\t}).join('\\n---------\\n');\n\tresultText.setFill(Color.red);\n\tresultText.setTextString(failStr);\n} /* runFinished */\nsuite.runAll();\n\n}","funcProperties":{"__isSmartRef__":true,"id":107},"__SourceModuleName__":"Global","__LivelyClassName__":"lively.Closure"},"106":{"this":{"__isSmartRef__":true,"id":39}},"107":{},"108":{"submorphs":[],"scripts":[],"id":4677,"shape":{"__isSmartRef__":true,"id":109},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":true,"fixedHeight":false,"allowsInput":true,"_FontFamily":"Arial, sans-serif","registeredForMouseEvents":true,"_Position":{"__isSmartRef__":true,"id":113},"_MaxTextWidth":798,"_MaxTextHeight":null,"textColor":{"__isSmartRef__":true,"id":112},"showsHalos":false,"_FontSize":14,"__SourceModuleName__":"Global.lively.morphic.TextCore","_Rotation":0,"name":"issueDescription1","partsBinMetaInfo":{"__isSmartRef__":true,"id":114},"textChunks":[{"__isSmartRef__":true,"id":115},{"__isSmartRef__":true,"id":117},{"__isSmartRef__":true,"id":119},{"__isSmartRef__":true,"id":121},{"__isSmartRef__":true,"id":123}],"_ClipMode":"visible","priorExtent":{"__isSmartRef__":true,"id":125},"priorSelectionRange":[676,676],"charsReplaced":"","lastFindLoc":1192,"prevScroll":[0,0],"owner":{"__isSmartRef__":true,"id":0},"_Scale":1,"_Align":"left","__LivelyClassName__":"lively.morphic.Text"},"109":{"fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":110},"_Extent":{"__isSmartRef__":true,"id":111},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":112},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"110":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"111":{"x":798,"y":462,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"112":{"r":0,"g":0,"b":0,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"113":{"x":28,"y":476,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"114":{"partsSpaceName":"PartsBin/NewWorld","__SourceModuleName__":"Global.lively.PartsBin","__LivelyClassName__":"lively.PartsBin.PartsBinMetaInfo"},"115":{"style":{"__isSmartRef__":true,"id":116},"morph":{"__isSmartRef__":true,"id":108},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"The issue currently is that in method-to-method/attribute connections there is a pull not a push semantics. This is defined in AttributeConnection>>addConnectionWrapper when the connection has a method as source. The previous requirement was that\n","__LivelyClassName__":"lively.morphic.TextChunk"},"116":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"117":{"style":{"__isSmartRef__":true,"id":118},"morph":{"__isSmartRef__":true,"id":108},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"var obj1 = {m1: function() { return 3 }};\n var obj2 = {m2: function(val) { return val + 2 }};\n connect(obj1, 'm1', obj2, 'm2');\nvar result = obj1.m1();","__LivelyClassName__":"lively.morphic.TextChunk"},"118":{"__SourceModuleName__":"Global.lively.morphic.TextCore","fontFamily":"Courier ","__LivelyClassName__":"lively.morphic.TextEmphasis"},"119":{"style":{"__isSmartRef__":true,"id":120},"morph":{"__isSmartRef__":true,"id":108},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"\nhas ","__LivelyClassName__":"lively.morphic.TextChunk"},"120":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"121":{"style":{"__isSmartRef__":true,"id":122},"morph":{"__isSmartRef__":true,"id":108},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"result == 5","__LivelyClassName__":"lively.morphic.TextChunk"},"122":{"__SourceModuleName__":"Global.lively.morphic.TextCore","fontFamily":"Courier ","__LivelyClassName__":"lively.morphic.TextEmphasis"},"123":{"style":{"__isSmartRef__":true,"id":124},"morph":{"__isSmartRef__":true,"id":108},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":".\nThis was useful when replacing the old models with connects (still used in lively.Network). Also when e.g. a generic getMenu() method should instead use a specific getMenu() method (used in the browser to display different menus for each pane) this is useful.\n\nOn the other hand, sometimes it is required to have a push instead of a pull semantics, e.g. obj1.setFill also triggers obj2.setBorderColor. One idea would be to define explicitly that a connection should be a method connection and that it should push or pull. For now I did not implement this.\n\nMethod connections are still experimental and should not be used in \"production code\". For now I think it is best to leave everything as it is to not break old code and instead think more about specific \"connection points\" that specify an official interface to an object. These would then probably not include methods.","__LivelyClassName__":"lively.morphic.TextChunk"},"124":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"125":{"x":798,"y":462,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"126":{"submorphs":[],"scripts":[],"id":405,"shape":{"__isSmartRef__":true,"id":127},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":true,"fixedHeight":false,"allowsInput":true,"_FontFamily":"Courier ","registeredForMouseEvents":true,"_Position":{"__isSmartRef__":true,"id":131},"_MaxTextWidth":800,"_MaxTextHeight":null,"textColor":{"__isSmartRef__":true,"id":130},"showsHalos":false,"_FontSize":14,"__SourceModuleName__":"Global.lively.morphic.TextCore","_Rotation":0,"name":"issueDescription2","partsBinMetaInfo":{"__isSmartRef__":true,"id":132},"textChunks":[{"__isSmartRef__":true,"id":133},{"__isSmartRef__":true,"id":136}],"_ClipMode":"visible","priorExtent":{"__isSmartRef__":true,"id":138},"priorSelectionRange":[7,7],"charsReplaced":"// assert('FOO' == obj.z, 'z');","lastFindLoc":317,"prevScroll":[0,0],"owner":{"__isSmartRef__":true,"id":0},"_Scale":1,"__LivelyClassName__":"lively.morphic.Text"},"127":{"fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":128},"_Extent":{"__isSmartRef__":true,"id":129},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":130},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"128":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"129":{"x":800,"y":242,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"130":{"r":0,"g":0,"b":0,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"131":{"x":31,"y":202,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"132":{"partsSpaceName":"PartsBin/NewWorld","__SourceModuleName__":"Global.lively.PartsBin","__LivelyClassName__":"lively.PartsBin.PartsBinMetaInfo"},"133":{"style":{"__isSmartRef__":true,"id":134},"morph":{"__isSmartRef__":true,"id":126},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"// run it","__LivelyClassName__":"lively.morphic.TextChunk"},"134":{"__SourceModuleName__":"Global.lively.morphic.TextCore","doit":{"__isSmartRef__":true,"id":135},"__LivelyClassName__":"lively.morphic.TextEmphasis"},"135":{"code":"eval(this.textString)","context":{"__isSmartRef__":true,"id":126}},"136":{"style":{"__isSmartRef__":true,"id":137},"morph":{"__isSmartRef__":true,"id":126},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"\nvar obj = {\n setX: function(value) { this.x = value },\n setY: function(value) { this.y = value; return 'ERROR' },\n setZ: function(value) { this.z = value },\n};\nconnect(obj, 'setX', obj, 'setY');\nconnect(obj, 'setX', obj, 'setZ');\nobj.setX('FOO');\nassert('FOO' == obj.y, 'y: ' + obj.y);\nassert('FOO' == obj.z, 'z: ' + obj.z);","__LivelyClassName__":"lively.morphic.TextChunk"},"137":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"138":{"x":800,"y":242,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"139":{"submorphs":[],"scripts":[],"id":23,"shape":{"__isSmartRef__":true,"id":140},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":true,"fixedHeight":false,"allowsInput":true,"_FontFamily":"Arial, sans-serif","registeredForMouseEvents":true,"_Position":{"__isSmartRef__":true,"id":144},"_MaxTextWidth":318,"_MaxTextHeight":null,"textColor":{"__isSmartRef__":true,"id":143},"showsHalos":false,"_FontSize":16,"__SourceModuleName__":"Global.lively.morphic.TextCore","_Rotation":0,"name":"issueDescription3","partsBinMetaInfo":{"__isSmartRef__":true,"id":145},"textChunks":[{"__isSmartRef__":true,"id":146},{"__isSmartRef__":true,"id":148},{"__isSmartRef__":true,"id":151}],"_ClipMode":"visible","priorExtent":{"__isSmartRef__":true,"id":153},"priorSelectionRange":[0,34],"charsReplaced":"When doing multiple connection the input of one connections is the output of the other. Since connection composition should be transparent this is a bug.\n\nOne could argue that in the following code both obj.y and obj.z should be 'FOO'. Instead y is currently undefined and z == 'ERROR'.","lastFindLoc":-286,"prevScroll":[0,0],"_Align":"left","owner":{"__isSmartRef__":true,"id":0},"_Scale":1,"__LivelyClassName__":"lively.morphic.Text"},"140":{"fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":141},"_Extent":{"__isSmartRef__":true,"id":142},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":143},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"141":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"142":{"x":318,"y":24,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"143":{"r":0,"g":0,"b":0,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"144":{"x":568,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"145":{"partsSpaceName":"PartsBin/NewWorld","__SourceModuleName__":"Global.lively.PartsBin","__LivelyClassName__":"lively.PartsBin.PartsBinMetaInfo"},"146":{"style":{"__isSmartRef__":true,"id":147},"morph":{"__isSmartRef__":true,"id":139},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"(I consider this as ","__LivelyClassName__":"lively.morphic.TextChunk"},"147":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"148":{"style":{"__isSmartRef__":true,"id":149},"morph":{"__isSmartRef__":true,"id":139},"storedString":"fixed","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"149":{"__SourceModuleName__":"Global.lively.morphic.TextCore","fontWeight":"bold","color":{"__isSmartRef__":true,"id":150},"__LivelyClassName__":"lively.morphic.TextEmphasis"},"150":{"r":0,"g":0.8,"b":0,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"151":{"style":{"__isSmartRef__":true,"id":152},"morph":{"__isSmartRef__":true,"id":139},"storedString":" for now)","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"152":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"153":{"x":318,"y":45,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"154":{"submorphs":[],"scripts":[],"id":226,"shape":{"__isSmartRef__":true,"id":155},"grabbingEnabled":false,"droppingEnabled":false,"showsMorphMenu":false,"halosEnabled":false,"registeredForMouseEvents":true,"_world":{"__isSmartRef__":true,"id":0},"_Position":{"__isSmartRef__":true,"id":159},"owner":{"__isSmartRef__":true,"id":0},"__SourceModuleName__":"Global.lively.morphic.Events","carriesGrabbedMorphs":false,"_Rotation":0,"_Scale":1,"__LivelyClassName__":"lively.morphic.HandMorph"},"155":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":156},"_Extent":{"__isSmartRef__":true,"id":157},"_Fill":{"__isSmartRef__":true,"id":158},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"156":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"157":{"x":2,"y":2,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"158":{"r":0.8,"g":0,"b":0,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"159":{"x":1205,"y":398,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"160":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":161},"_Extent":{"__isSmartRef__":true,"id":162},"_Fill":{"__isSmartRef__":true,"id":163},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"161":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"162":{"x":2800,"y":2900,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"163":{"r":1,"g":1,"b":1,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"164":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"165":{"name":"Local code","__LivelyClassName__":"ChangeSet","__SourceModuleName__":"Global.lively.ChangeSet"},"isSimplifiedRegistry":true}}]]>