UNPKG

@ambers/lang

Version:

An implementation of the Smalltalk language that runs on top of the JS runtime.

1,343 lines (1,296 loc) 690 kB
define(["amber/boot", "require", "amber/core/Kernel-Objects", "amber/core/SUnit"], function($boot,requirejs){"use strict"; var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals; var $pkg = $core.addPackage("Kernel-Tests"); $pkg.transport = {"type":"amd","amdNamespace":"amber/core"}; $core.addClass("AnnouncementSubscriptionTest", $globals.TestCase, "Kernel-Tests"); $core.addMethod( $core.method({ selector: "testAddExtensionMethod", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testAddExtensionMethod\x0a\x09| method dirty |\x0a\x09dirty := self class package isDirty.\x0a\x09self class package beClean.\x0a\x09method := self class compile: 'doNothing' protocol: '**not-a-package'.\x0a\x09self deny: self class package isDirty.\x0a\x09\x0a\x09self class removeCompiledMethod: method.\x0a\x09dirty ifTrue: [ self class package beDirty ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["isDirty", "package", "class", "beClean", "compile:protocol:", "deny:", "removeCompiledMethod:", "ifTrue:", "beDirty"] }, function ($methodClass){ return function (){ var self=this,$self=this; var method,dirty; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); dirty=[$recv([$recv([$self._class() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["class"]=1 //>>excludeEnd("ctx"); ][0])._package() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["package"]=1 //>>excludeEnd("ctx"); ][0])._isDirty() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["isDirty"]=1 //>>excludeEnd("ctx"); ][0]; $recv([$recv([$self._class() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["class"]=2 //>>excludeEnd("ctx"); ][0])._package() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["package"]=2 //>>excludeEnd("ctx"); ][0])._beClean(); method=$recv([$self._class() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["class"]=3 //>>excludeEnd("ctx"); ][0])._compile_protocol_("doNothing","**not-a-package"); $self._deny_($recv([$recv([$self._class() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["class"]=4 //>>excludeEnd("ctx"); ][0])._package() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["package"]=3 //>>excludeEnd("ctx"); ][0])._isDirty()); $recv([$self._class() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["class"]=5 //>>excludeEnd("ctx"); ][0])._removeCompiledMethod_(method); if($core.assert(dirty)){ $recv($recv($self._class())._package())._beDirty(); } return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testAddExtensionMethod",{method:method,dirty:dirty})}); //>>excludeEnd("ctx"); }; }), $globals.AnnouncementSubscriptionTest); $core.addMethod( $core.method({ selector: "testHandlesAnnouncement", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testHandlesAnnouncement\x0a\x09| subscription announcementClass1 announcementClass2 classBuilder |\x0a\x09\x0a\x09classBuilder := ClassBuilder new.\x0a\x09announcementClass1 := classBuilder addSubclassOf: SystemAnnouncement named: 'TestAnnouncement1' slots: #() package: 'Kernel-Tests'.\x0a\x09\x0a\x09subscription := AnnouncementSubscription new announcementClass: SystemAnnouncement.\x0a\x09\x22Test whether the same class triggers the announcement\x22\x0a\x09self assert: (subscription handlesAnnouncement: SystemAnnouncement new) equals: true.\x0a\x09\x22Test whether a subclass triggers the announcement\x22\x0a\x09self assert: (subscription handlesAnnouncement: announcementClass1 new) equals: true.\x0a\x09\x22Test whether an unrelated class does not trigger the announcement\x22\x0a\x09self assert: (subscription handlesAnnouncement: Object new) equals: false.\x0a\x09\x0a\x09classBuilder basicRemoveClass: announcementClass1.", referencedClasses: ["ClassBuilder", "SystemAnnouncement", "AnnouncementSubscription", "Object"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["new", "addSubclassOf:named:slots:package:", "announcementClass:", "assert:equals:", "handlesAnnouncement:", "basicRemoveClass:"] }, function ($methodClass){ return function (){ var self=this,$self=this; var subscription,announcementClass1,announcementClass2,classBuilder; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); classBuilder=[$recv($globals.ClassBuilder)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=1 //>>excludeEnd("ctx"); ][0]; announcementClass1=$recv(classBuilder)._addSubclassOf_named_slots_package_($globals.SystemAnnouncement,"TestAnnouncement1",[],"Kernel-Tests"); subscription=$recv([$recv($globals.AnnouncementSubscription)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=2 //>>excludeEnd("ctx"); ][0])._announcementClass_($globals.SystemAnnouncement); [$self._assert_equals_([$recv(subscription)._handlesAnnouncement_([$recv($globals.SystemAnnouncement)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=3 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["handlesAnnouncement:"]=1 //>>excludeEnd("ctx"); ][0],true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_([$recv(subscription)._handlesAnnouncement_([$recv(announcementClass1)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=4 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["handlesAnnouncement:"]=2 //>>excludeEnd("ctx"); ][0],true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=2 //>>excludeEnd("ctx"); ][0]; $self._assert_equals_($recv(subscription)._handlesAnnouncement_($recv($globals.Object)._new()),false); $recv(classBuilder)._basicRemoveClass_(announcementClass1); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testHandlesAnnouncement",{subscription:subscription,announcementClass1:announcementClass1,announcementClass2:announcementClass2,classBuilder:classBuilder})}); //>>excludeEnd("ctx"); }; }), $globals.AnnouncementSubscriptionTest); $core.addClass("AnnouncerTest", $globals.TestCase, "Kernel-Tests"); $core.addMethod( $core.method({ selector: "testOnDo", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testOnDo\x0a\x09| counter announcer |\x0a\x09\x0a\x09counter := 0.\x0a\x09announcer := Announcer new.\x0a\x09announcer on: SystemAnnouncement do: [ counter := counter + 1 ].\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 2.", referencedClasses: ["Announcer", "SystemAnnouncement"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["new", "on:do:", "+", "announce:", "assert:equals:"] }, function ($methodClass){ return function (){ var self=this,$self=this; var counter,announcer; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); counter=(0); announcer=[$recv($globals.Announcer)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=1 //>>excludeEnd("ctx"); ][0]; $recv(announcer)._on_do_($globals.SystemAnnouncement,(function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); counter=$recv(counter).__plus((1)); return counter; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); })); [$recv(announcer)._announce_([$recv($globals.SystemAnnouncement)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=2 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["announce:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_(counter,(1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; $recv(announcer)._announce_($recv($globals.SystemAnnouncement)._new()); $self._assert_equals_(counter,(2)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testOnDo",{counter:counter,announcer:announcer})}); //>>excludeEnd("ctx"); }; }), $globals.AnnouncerTest); $core.addMethod( $core.method({ selector: "testOnDoFor", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testOnDoFor\x0a\x09| counter announcer |\x0a\x09\x0a\x09counter := 0.\x0a\x09announcer := Announcer new.\x0a\x09announcer on: SystemAnnouncement do: [ counter := counter + 1 ] for: self.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 2.\x0a\x09\x0a\x09announcer unsubscribe: self.\x0a\x09\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 2.", referencedClasses: ["Announcer", "SystemAnnouncement"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["new", "on:do:for:", "+", "announce:", "assert:equals:", "unsubscribe:"] }, function ($methodClass){ return function (){ var self=this,$self=this; var counter,announcer; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); counter=(0); announcer=[$recv($globals.Announcer)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=1 //>>excludeEnd("ctx"); ][0]; $recv(announcer)._on_do_for_($globals.SystemAnnouncement,(function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); counter=$recv(counter).__plus((1)); return counter; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }),self); [$recv(announcer)._announce_([$recv($globals.SystemAnnouncement)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=2 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["announce:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_(counter,(1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; [$recv(announcer)._announce_([$recv($globals.SystemAnnouncement)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=3 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["announce:"]=2 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_(counter,(2)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=2 //>>excludeEnd("ctx"); ][0]; $recv(announcer)._unsubscribe_(self); $recv(announcer)._announce_($recv($globals.SystemAnnouncement)._new()); $self._assert_equals_(counter,(2)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testOnDoFor",{counter:counter,announcer:announcer})}); //>>excludeEnd("ctx"); }; }), $globals.AnnouncerTest); $core.addMethod( $core.method({ selector: "testOnDoOnce", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testOnDoOnce\x0a\x09| counter announcer |\x0a\x09\x0a\x09counter := 0.\x0a\x09announcer := Announcer new.\x0a\x09announcer on: SystemAnnouncement doOnce: [ counter := counter + 1 ].\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.", referencedClasses: ["Announcer", "SystemAnnouncement"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["new", "on:doOnce:", "+", "announce:", "assert:equals:"] }, function ($methodClass){ return function (){ var self=this,$self=this; var counter,announcer; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); counter=(0); announcer=[$recv($globals.Announcer)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=1 //>>excludeEnd("ctx"); ][0]; $recv(announcer)._on_doOnce_($globals.SystemAnnouncement,(function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); counter=$recv(counter).__plus((1)); return counter; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); })); [$recv(announcer)._announce_([$recv($globals.SystemAnnouncement)._new() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["new"]=2 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["announce:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_(counter,(1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; $recv(announcer)._announce_($recv($globals.SystemAnnouncement)._new()); $self._assert_equals_(counter,(1)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testOnDoOnce",{counter:counter,announcer:announcer})}); //>>excludeEnd("ctx"); }; }), $globals.AnnouncerTest); $core.addClass("BlockClosureTest", $globals.TestCase, "Kernel-Tests"); $core.addMethod( $core.method({ selector: "localReturnOnDoCatch", protocol: "fixture", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "localReturnOnDoCatch\x0a [ ^ 2 ] on: Error do: [].\x0a ^ 3", referencedClasses: ["Error"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["on:do:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $early={}; try { $recv((function(){ throw $early=[(2)]; }))._on_do_($globals.Error,(function(){ })); return (3); } catch(e) {if(e===$early)return e[0]; throw e} //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"localReturnOnDoCatch",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "localReturnOnDoMiss", protocol: "fixture", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "localReturnOnDoMiss\x0a [ ^ 2 ] on: Class do: [].\x0a ^ 3", referencedClasses: ["Class"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["on:do:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $early={}; try { $recv((function(){ throw $early=[(2)]; }))._on_do_($globals.Class,(function(){ })); return (3); } catch(e) {if(e===$early)return e[0]; throw e} //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"localReturnOnDoMiss",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testCanClearInterval", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testCanClearInterval\x0a\x09self shouldnt: [ ([ Error new signal ] valueWithInterval: 0) clearInterval ] raise: Error", referencedClasses: ["Error"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["shouldnt:raise:", "clearInterval", "valueWithInterval:", "signal", "new"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._shouldnt_raise_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv($recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return $recv($recv($globals.Error)._new())._signal(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)}); //>>excludeEnd("ctx"); }))._valueWithInterval_((0)))._clearInterval(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }),$globals.Error); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testCanClearInterval",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testCanClearTimeout", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testCanClearTimeout\x0a\x09self shouldnt: [ ([ Error new signal ] valueWithTimeout: 0) clearTimeout ] raise: Error", referencedClasses: ["Error"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["shouldnt:raise:", "clearTimeout", "valueWithTimeout:", "signal", "new"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._shouldnt_raise_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv($recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return $recv($recv($globals.Error)._new())._signal(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)}); //>>excludeEnd("ctx"); }))._valueWithTimeout_((0)))._clearTimeout(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }),$globals.Error); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testCanClearTimeout",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testCompiledSource", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testCompiledSource\x0a\x09self assert: ([ 1+1 ] compiledSource includesSubString: 'function')", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:", "includesSubString:", "compiledSource", "+"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._assert_($recv($recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return (1).__plus((1)); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }))._compiledSource())._includesSubString_("function")); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testCompiledSource",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testCurrySelf", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testCurrySelf\x0a\x09| curriedMethod array |\x0a\x09curriedMethod := [ :selfarg :x | selfarg at: x ] currySelf asCompiledMethod: 'foo:'.\x0a\x09curriedMethod protocol: '**test helper'.\x0a\x09array := #(3 1 4).\x0a\x09Array addCompiledMethod: curriedMethod.\x0a\x09[ self assert: (array foo: 2) equals: 1 ]\x0a\x09ensure: [ Array removeCompiledMethod: curriedMethod ]", referencedClasses: ["Array"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["asCompiledMethod:", "currySelf", "at:", "protocol:", "addCompiledMethod:", "ensure:", "assert:equals:", "foo:", "removeCompiledMethod:"] }, function ($methodClass){ return function (){ var self=this,$self=this; var curriedMethod,array; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); curriedMethod=$recv($recv((function(selfarg,x){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv(selfarg)._at_(x); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({selfarg:selfarg,x:x},$ctx1,1)}); //>>excludeEnd("ctx"); }))._currySelf())._asCompiledMethod_("foo:"); $recv(curriedMethod)._protocol_("**test helper"); array=[(3), (1), (4)]; $recv($globals.Array)._addCompiledMethod_(curriedMethod); $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $self._assert_equals_($recv(array)._foo_((2)),(1)); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)}); //>>excludeEnd("ctx"); }))._ensure_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv($globals.Array)._removeCompiledMethod_(curriedMethod); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)}); //>>excludeEnd("ctx"); })); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testCurrySelf",{curriedMethod:curriedMethod,array:array})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testEnsure", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testEnsure\x0a\x09self assert: ([ 3 ] ensure: [ 4 ]) equals: 3", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:equals:", "ensure:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._assert_equals_($recv((function(){ return (3); }))._ensure_((function(){ return (4); })),(3)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testEnsure",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testEnsureRaises", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testEnsureRaises\x0a\x09self should: [ [Error new signal ] ensure: [ true ]] raise: Error", referencedClasses: ["Error"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["should:raise:", "ensure:", "signal", "new"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._should_raise_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return $recv($recv($globals.Error)._new())._signal(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)}); //>>excludeEnd("ctx"); }))._ensure_((function(){ return true; })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }),$globals.Error); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testEnsureRaises",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testExceptionSemantics", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testExceptionSemantics\x0a\x09\x22See https://lolg.it/amber/amber/issues/314\x22\x0a\x09self timeout: 100.\x0a\x09\x0a\x09(self async: [\x0a\x09\x09[\x0a\x09\x09\x09self assert: true.\x0a\x09\x09\x09Error signal.\x0a\x09\x09\x09\x22The following should *not* be run\x22\x0a\x09\x09\x09self deny: true.\x0a\x09\x09\x09self finished.\x0a\x09\x09] on: Error do: [ :ex | self finished ]\x0a\x09]) valueWithTimeout: 0", referencedClasses: ["Error"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["timeout:", "valueWithTimeout:", "async:", "on:do:", "assert:", "signal", "deny:", "finished"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._timeout_((100)); $recv($self._async_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); $self._assert_(true); $recv($globals.Error)._signal(); $self._deny_(true); return [$self._finished() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx3.sendIdx["finished"]=1 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)}); //>>excludeEnd("ctx"); }))._on_do_($globals.Error,(function(ex){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return $self._finished(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,3)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); })))._valueWithTimeout_((0)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testExceptionSemantics",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testLocalReturnOnDoCatch", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testLocalReturnOnDoCatch\x0a\x09self assert: self localReturnOnDoCatch equals: 2", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:equals:", "localReturnOnDoCatch"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._assert_equals_($self._localReturnOnDoCatch(),(2)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testLocalReturnOnDoCatch",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testLocalReturnOnDoMiss", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testLocalReturnOnDoMiss\x0a\x09self assert: self localReturnOnDoMiss equals: 2", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:equals:", "localReturnOnDoMiss"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._assert_equals_($self._localReturnOnDoMiss(),(2)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testLocalReturnOnDoMiss",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testNewWithValues", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testNewWithValues\x0a<inlineJS: '\x0a\x09function TestConstructor(arg1, arg2, arg3) {}\x0a\x09TestConstructor.prototype.name = \x22theTestPrototype\x22;\x0a\x0a\x09var wrappedConstructor = $recv(TestConstructor);\x0a\x09var result = wrappedConstructor._newWithValues_([1, 2, 3]);\x0a\x09$self._assert_(result instanceof TestConstructor);\x0a\x09$self._assert_equals_(result.name, \x22theTestPrototype\x22);\x0a\x0a\x09/* newWithValues: cannot help if the argument list is wrong, and should warn that a mistake was made. */\x0a\x09$self._should_raise_(function () {wrappedConstructor._newWithValues_(\x22single argument\x22);}, $globals.Error);\x0a'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09function TestConstructor(arg1, arg2, arg3) {}\x0a\x09TestConstructor.prototype.name = \x22theTestPrototype\x22;\x0a\x0a\x09var wrappedConstructor = $recv(TestConstructor);\x0a\x09var result = wrappedConstructor._newWithValues_([1, 2, 3]);\x0a\x09$self._assert_(result instanceof TestConstructor);\x0a\x09$self._assert_equals_(result.name, \x22theTestPrototype\x22);\x0a\x0a\x09/* newWithValues: cannot help if the argument list is wrong, and should warn that a mistake was made. */\x0a\x09$self._should_raise_(function () {wrappedConstructor._newWithValues_(\x22single argument\x22);}, $globals.Error);"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); function TestConstructor(arg1, arg2, arg3) {} TestConstructor.prototype.name = "theTestPrototype"; var wrappedConstructor = $recv(TestConstructor); var result = wrappedConstructor._newWithValues_([1, 2, 3]); $self._assert_(result instanceof TestConstructor); $self._assert_equals_(result.name, "theTestPrototype"); /* newWithValues: cannot help if the argument list is wrong, and should warn that a mistake was made. */ $self._should_raise_(function () {wrappedConstructor._newWithValues_("single argument");}, $globals.Error);; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testNewWithValues",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testNumArgs", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testNumArgs\x0a\x09self assert: [] numArgs equals: 0.\x0a\x09self assert: [ :a :b | ] numArgs equals: 2", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:equals:", "numArgs"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); [$self._assert_equals_([$recv((function(){ }))._numArgs() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["numArgs"]=1 //>>excludeEnd("ctx"); ][0],(0)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; $self._assert_equals_($recv((function(a,b){ }))._numArgs(),(2)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testNumArgs",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testOnDo", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testOnDo\x0a\x09self assert: ([ Error new signal ] on: Error do: [ :ex | true ])", referencedClasses: ["Error"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:", "on:do:", "signal", "new"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._assert_($recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv($recv($globals.Error)._new())._signal(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }))._on_do_($globals.Error,(function(ex){ return true; }))); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testOnDo",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testValue", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testValue\x0a\x09self assert: ([ 1+1 ] value) equals: 2.\x0a\x09self assert: ([ :x | x +1 ] value: 2) equals: 3.\x0a\x09self assert: ([ :x :y | x*y ] value: 2 value: 4) equals: 8.\x0a\x0a\x09\x22Arguments are optional in Amber. This isn't ANSI compliant.\x22\x0a\x0a\x09self assert: ([ :a :b :c | 1 ] value) equals: 1", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:equals:", "value", "+", "value:", "value:value:", "*"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); [$self._assert_equals_([$recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return [(1).__plus((1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["+"]=1 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }))._value() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["value"]=1 //>>excludeEnd("ctx"); ][0],(2)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_($recv((function(x){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv(x).__plus((1)); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)}); //>>excludeEnd("ctx"); }))._value_((2)),(3)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=2 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_($recv((function(x,y){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv(x).__star(y); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({x:x,y:y},$ctx1,3)}); //>>excludeEnd("ctx"); }))._value_value_((2),(4)),(8)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=3 //>>excludeEnd("ctx"); ][0]; $self._assert_equals_($recv((function(a,b,c){ return (1); }))._value(),(1)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testValue",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testValueWithPossibleArguments", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testValueWithPossibleArguments\x0a\x09self assert: ([ 1 ] valueWithPossibleArguments: #(3 4)) equals: 1.\x0a\x09self assert: ([ :a | a + 4 ] valueWithPossibleArguments: #(3 4)) equals: 7.\x0a\x09self assert: ([ :a :b | a + b ] valueWithPossibleArguments: #(3 4 5)) equals: 7.", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["assert:equals:", "valueWithPossibleArguments:", "+"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); [$self._assert_equals_([$recv((function(){ return (1); }))._valueWithPossibleArguments_([(3), (4)]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["valueWithPossibleArguments:"]=1 //>>excludeEnd("ctx"); ][0],(1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._assert_equals_([$recv((function(a){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return [$recv(a).__plus((4)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["+"]=1 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({a:a},$ctx1,2)}); //>>excludeEnd("ctx"); }))._valueWithPossibleArguments_([(3), (4)]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["valueWithPossibleArguments:"]=2 //>>excludeEnd("ctx"); ][0],(7)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=2 //>>excludeEnd("ctx"); ][0]; $self._assert_equals_($recv((function(a,b){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv(a).__plus(b); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,3)}); //>>excludeEnd("ctx"); }))._valueWithPossibleArguments_([(3), (4), (5)]),(7)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testValueWithPossibleArguments",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testWhileFalse", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testWhileFalse\x0a\x09| i |\x0a\x09i := 0.\x0a\x09[ i > 5 ] whileFalse: [ i := i + 1 ].\x0a\x09self assert: i equals: 6.\x0a\x0a\x09i := 0.\x0a\x09[ i := i + 1. i > 5 ] whileFalse.\x0a\x09self assert: i equals: 6", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["whileFalse:", ">", "+", "assert:equals:", "whileFalse"] }, function ($methodClass){ return function (){ var self=this,$self=this; var i; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); i=(0); $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return [$recv(i).__gt((5)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx[">"]=1 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }))._whileFalse_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); i=[$recv(i).__plus((1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["+"]=1 //>>excludeEnd("ctx"); ][0]; return i; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)}); //>>excludeEnd("ctx"); })); [$self._assert_equals_(i,(6)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; i=(0); $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); i=$recv(i).__plus((1)); return $recv(i).__gt((5)); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)}); //>>excludeEnd("ctx"); }))._whileFalse(); $self._assert_equals_(i,(6)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testWhileFalse",{i:i})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addMethod( $core.method({ selector: "testWhileTrue", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testWhileTrue\x0a\x09| i |\x0a\x09i := 0.\x0a\x09[ i < 5 ] whileTrue: [ i := i + 1 ].\x0a\x09self assert: i equals: 5.\x0a\x0a\x09i := 0.\x0a\x09[ i := i + 1. i < 5 ] whileTrue.\x0a\x09self assert: i equals: 5", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["whileTrue:", "<", "+", "assert:equals:", "whileTrue"] }, function ($methodClass){ return function (){ var self=this,$self=this; var i; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); i=(0); $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return [$recv(i).__lt((5)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["<"]=1 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }))._whileTrue_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); i=[$recv(i).__plus((1)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["+"]=1 //>>excludeEnd("ctx"); ][0]; return i; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)}); //>>excludeEnd("ctx"); })); [$self._assert_equals_(i,(5)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:equals:"]=1 //>>excludeEnd("ctx"); ][0]; i=(0); $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); i=$recv(i).__plus((1)); return $recv(i).__lt((5)); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)}); //>>excludeEnd("ctx"); }))._whileTrue(); $self._assert_equals_(i,(5)); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testWhileTrue",{i:i})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosureTest); $core.addClass("BooleanTest", $globals.TestCase, "Kernel-Tests"); $core.addMethod( $core.method({ selector: "testEquality", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testEquality\x0a\x09\x22We're on top of JS...just be sure to check the basics!\x22\x0a\x0a\x09self deny: 0 = false.\x0a\x09self deny: false = 0.\x0a\x09self deny: '' = false.\x0a\x09self deny: false = ''.\x0a\x0a\x09self assert: (true = true).\x0a\x09self deny: false = true.\x0a\x09self deny: true = false.\x0a\x09self assert: (false = false).\x0a\x0a\x09\x22JS may do some type coercing after sending a message\x22\x0a\x09self assert: (true yourself = true).\x0a\x09self assert: (true yourself = true yourself)", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["deny:", "=", "assert:", "yourself"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); [$self._deny_([(0).__eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=1 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._deny_([false.__eq((0)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=2 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=2 //>>excludeEnd("ctx"); ][0]; [$self._deny_(["".__eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=3 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=3 //>>excludeEnd("ctx"); ][0]; [$self._deny_([false.__eq("") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=4 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=4 //>>excludeEnd("ctx"); ][0]; [$self._assert_([true.__eq(true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=5 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._deny_([false.__eq(true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=6 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=5 //>>excludeEnd("ctx"); ][0]; $self._deny_([true.__eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=7 //>>excludeEnd("ctx"); ][0]); [$self._assert_([false.__eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=8 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:"]=2 //>>excludeEnd("ctx"); ][0]; [$self._assert_([$recv([true._yourself() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["yourself"]=1 //>>excludeEnd("ctx"); ][0]).__eq(true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=9 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:"]=3 //>>excludeEnd("ctx"); ][0]; $self._assert_($recv([true._yourself() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["yourself"]=2 //>>excludeEnd("ctx"); ][0]).__eq(true._yourself())); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testEquality",{})}); //>>excludeEnd("ctx"); }; }), $globals.BooleanTest); $core.addMethod( $core.method({ selector: "testIdentity", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testIdentity\x0a\x09\x22We're on top of JS...just be sure to check the basics!\x22\x0a\x0a\x09self deny: 0 == false.\x0a\x09self deny: false == 0.\x0a\x09self deny: '' == false.\x0a\x09self deny: false == ''.\x0a\x0a\x09self assert: true == true.\x0a\x09self deny: false == true.\x0a\x09self deny: true == false.\x0a\x09self assert: false == false.\x0a\x0a\x09\x22JS may do some type coercing after sending a message\x22\x0a\x09self assert: true yourself == true.\x0a\x09self assert: true yourself == true yourself", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["deny:", "==", "assert:", "yourself"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); [$self._deny_([(0).__eq_eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=1 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._deny_([false.__eq_eq((0)) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=2 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=2 //>>excludeEnd("ctx"); ][0]; [$self._deny_(["".__eq_eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=3 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=3 //>>excludeEnd("ctx"); ][0]; [$self._deny_([false.__eq_eq("") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=4 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=4 //>>excludeEnd("ctx"); ][0]; [$self._assert_([true.__eq_eq(true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=5 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:"]=1 //>>excludeEnd("ctx"); ][0]; [$self._deny_([false.__eq_eq(true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=6 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["deny:"]=5 //>>excludeEnd("ctx"); ][0]; $self._deny_([true.__eq_eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=7 //>>excludeEnd("ctx"); ][0]); [$self._assert_([false.__eq_eq(false) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=8 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:"]=2 //>>excludeEnd("ctx"); ][0]; [$self._assert_([$recv([true._yourself() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["yourself"]=1 //>>excludeEnd("ctx"); ][0]).__eq_eq(true) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["=="]=9 //>>excludeEnd("ctx"); ][0]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["assert:"]=3 //>>excludeEnd("ctx"); ][0]; $self._assert_($recv([true._yourself() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["yourself"]=2 //>>excludeEnd("ctx"); ][0]).__eq_eq(true._yourself())); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"testIdentity",{})}); //>>excludeEnd("ctx"); }; }), $globals.BooleanTest); $core.addMethod( $core.method({ selector: "testIfTrueIfFalse", protocol: "tests", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "testIfTrueIfFalse\x