Browse Source

Shape into Axxord, step 3.

Herbert Vojčík 6 years ago
parent
commit
e227741785
3 changed files with 521 additions and 0 deletions
  1. 414 0
      src/Axxord-Tests.js
  2. 106 0
      src/Axxord-Tests.st
  3. 1 0
      testing.js

+ 414 - 0
src/Axxord-Tests.js

@@ -0,0 +1,414 @@
+define(["amber/boot", "amber_core/SUnit", "axxord/Axxord"], function($boot){"use strict";
+if(!$boot.nilAsReceiver)$boot.nilAsReceiver=$boot.nil;
+if(!("nilAsValue" in $boot))$boot.nilAsValue=$boot.nilAsReceiver;
+var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals;
+if(!$boot.nilAsClass)$boot.nilAsClass=$boot.dnu;
+$core.addPackage("Axxord-Tests");
+$core.packages["Axxord-Tests"].innerEval = function (expr) { return eval(expr); };
+$core.packages["Axxord-Tests"].transport = {"type":"amd","amdNamespace":"axxord"};
+
+$core.addClass("PlainConsumeTransformTest", $globals.TestCase, [], "Axxord-Tests");
+$core.addMethod(
+$core.method({
+selector: "testModelTransformSentToAxon",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result,axon;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (3)]], "baz"],"moo","zoo"]);
+axon=$recv($globals.TestSpyAxon)._new();
+$recv(axon)._registerIn_(model);
+$recv(model)._axes_transform_(["foo", (2)],(function(r){
+return "new";
+
+}));
+$self._assert_equals_($recv(axon)._changedAspectLog(),[["foo", (2)]]);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testModelTransformSentToAxon",{model:model,result:result,axon:axon},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testModelTransformSentToAxon\x0a| model result axon |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.\x0aaxon := TestSpyAxon new.\x0aaxon registerIn: model.\x0amodel axes: #(foo 2) transform: [:r | #new].\x0aself assert: axon changedAspectLog equals: #((foo 2))",
+referencedClasses: ["TestSpyAxon"],
+//>>excludeEnd("ide");
+messageSends: ["new", "registerIn:", "axes:transform:", "assert:equals:", "changedAspectLog"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testNontrivialModelGetsAppropriateValueForTransform",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (5)]], "baz"],"moo","zoo"]);
+$recv(model)._axes_transform_(["foo", (2)],(function(r){
+result=r;
+return result;
+
+}));
+$self._assert_equals_([(1), [(2), (5)]],result);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testNontrivialModelGetsAppropriateValueForTransform",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testNontrivialModelGetsAppropriateValueForTransform\x0a| model result |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 5)) 'baz'). 'moo' -> 'zoo' }.\x0amodel axes: #(foo 2) transform: [:r | result := r].\x0aself assert: #(1 #(2 5)) equals: result",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["axes:transform:", "assert:equals:"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testNontrivialModelReturnsAppropriateValue",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (3)]], "baz"],"moo","zoo"]);
+$recv(model)._axes_consume_(["foo", (2)],(function(r){
+result=r;
+return result;
+
+}));
+$self._assert_equals_([(1), [(2), (3)]],result);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testNontrivialModelReturnsAppropriateValue",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testNontrivialModelReturnsAppropriateValue\x0a| model result |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.\x0amodel axes: #(foo 2) consume: [:r | result := r].\x0aself assert: #(1 #(2 3)) equals: result",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["axes:consume:", "assert:equals:"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testNontrivialModelTransformsAppropriateValue",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (3)]], "baz"],"moo","zoo"]);
+$recv(model)._axes_transform_(["foo", (2)],(function(r){
+return "new";
+
+}));
+$recv(model)._axes_consume_(["foo", (2)],(function(r){
+result=r;
+return result;
+
+}));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["axes:consume:"]=1;
+//>>excludeEnd("ctx");
+$self._assert_equals_("new",result);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["assert:equals:"]=1;
+//>>excludeEnd("ctx");
+$recv(model)._axes_consume_([],(function(r){
+result=r;
+return result;
+
+}));
+$self._assert_equals_($globals.HashedCollection._newFromPairs_(["foo",["bar", "new", "baz"],"moo","zoo"]),result);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testNontrivialModelTransformsAppropriateValue",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testNontrivialModelTransformsAppropriateValue\x0a| model result |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.\x0amodel axes: #(foo 2) transform: [:r | #new].\x0amodel axes: #(foo 2) consume: [:r | result := r].\x0aself assert: #new equals: result.\x0amodel axes: #() consume: [:r | result := r].\x0aself assert: #{ 'foo' -> #('bar' #new 'baz'). 'moo' -> 'zoo' } equals: result",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["axes:transform:", "axes:consume:", "assert:equals:"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testRootModelCannotTransform",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=[(1), [(2), (3)]];
+$self._should_raise_((function(){
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx2) {
+//>>excludeEnd("ctx");
+return $recv(model)._axes_transform_([],(function(r){
+return $globals.HashedCollection._newFromPairs_(["foo",[(4), (5), (6)]]);
+
+}));
+//>>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,"testRootModelCannotTransform",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testRootModelCannotTransform\x0a| model result |\x0aresult := nil.\x0amodel := #(1 #(2 3)).\x0aself should: [ model axes: #() transform: [:r | #{'foo'->#(4 5 6)}] ] raise: Error",
+referencedClasses: ["Error"],
+//>>excludeEnd("ide");
+messageSends: ["should:raise:", "axes:transform:"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testRootModelReturnsDirectRoot",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=[(1), [(2), (4)]];
+$recv(model)._axes_consume_([],(function(r){
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx2) {
+//>>excludeEnd("ctx");
+return $recv(r)._at_put_((2),nil);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx2) {$ctx2.fillBlock({r:r},$ctx1,1)});
+//>>excludeEnd("ctx");
+}));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["axes:consume:"]=1;
+//>>excludeEnd("ctx");
+$recv(model)._axes_consume_([],(function(r){
+result=r;
+return result;
+
+}));
+$self._assert_equals_([(1), nil],result);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testRootModelReturnsDirectRoot",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testRootModelReturnsDirectRoot\x0a| model result |\x0aresult := nil.\x0amodel := #(1 #(2 4)).\x0amodel axes: #() consume: [:r | r at: 2 put: nil].\x0amodel axes: #() consume: [:r | result := r].\x0aself assert: #(1 nil) equals: result",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["axes:consume:", "at:put:", "assert:equals:"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testRootModelReturnsRoot",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=[(1), [(2), (3)]];
+$recv(model)._axes_consume_([],(function(r){
+result=r;
+return result;
+
+}));
+$self._assert_equals_([(1), [(2), (3)]],result);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testRootModelReturnsRoot",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testRootModelReturnsRoot\x0a| model result |\x0aresult := nil.\x0amodel := #(1 #(2 3)).\x0amodel axes: #() consume: [:r | result := r].\x0aself assert: #(1 #(2 3)) equals: result",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["axes:consume:", "assert:equals:"]
+}),
+$globals.PlainConsumeTransformTest);
+
+$core.addMethod(
+$core.method({
+selector: "testRootTransformBlockIsNotRun",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+var model,result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+result=nil;
+model=[(2), [(1), (0)]];
+$recv((function(){
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx2) {
+//>>excludeEnd("ctx");
+return $recv(model)._axes_transform_([],(function(r){
+result=r;
+return result;
+
+}));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
+//>>excludeEnd("ctx");
+}))._on_do_($globals.Error,(function(){
+
+}));
+$self._assert_($recv(result)._isNil());
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testRootTransformBlockIsNotRun",{model:model,result:result},$globals.PlainConsumeTransformTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testRootTransformBlockIsNotRun\x0a| model result |\x0aresult := nil.\x0amodel := #(2 #(1 0)).\x0a[model axes: #() transform: [:r | result := r]] on: Error do: [].\x0aself assert: result isNil",
+referencedClasses: ["Error"],
+//>>excludeEnd("ide");
+messageSends: ["on:do:", "axes:transform:", "assert:", "isNil"]
+}),
+$globals.PlainConsumeTransformTest);
+
+
+
+$core.addClass("TestSpyAxon", $globals.DumbAxon, ["changedAspectLog"], "Axxord-Tests");
+//>>excludeStart("ide", pragmas.excludeIdeData);
+$globals.TestSpyAxon.comment="I am an axon that logs changed aspects. I am useful in tests.";
+//>>excludeEnd("ide");
+$core.addMethod(
+$core.method({
+selector: "changed:",
+protocol: "action",
+fn: function (anAspect){
+var self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+$recv(self["@changedAspectLog"])._add_(anAspect);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"changed:",{anAspect:anAspect},$globals.TestSpyAxon)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["anAspect"],
+source: "changed: anAspect\x0a\x09changedAspectLog add: anAspect",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["add:"]
+}),
+$globals.TestSpyAxon);
+
+$core.addMethod(
+$core.method({
+selector: "changedAspectLog",
+protocol: "accessing",
+fn: function (){
+var self=this;
+var $1;
+$1=self["@changedAspectLog"];
+return $1;
+
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "changedAspectLog\x0a\x09^ changedAspectLog",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: []
+}),
+$globals.TestSpyAxon);
+
+$core.addMethod(
+$core.method({
+selector: "changedAspectLog:",
+protocol: "accessing",
+fn: function (anObject){
+var self=this;
+self["@changedAspectLog"]=anObject;
+return self;
+
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["anObject"],
+source: "changedAspectLog: anObject\x0a\x09changedAspectLog := anObject",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: []
+}),
+$globals.TestSpyAxon);
+
+$core.addMethod(
+$core.method({
+selector: "initialize",
+protocol: "initialization",
+fn: function (){
+var self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+(
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.supercall = true, 
+//>>excludeEnd("ctx");
+$globals.TestSpyAxon.superclass.fn.prototype._initialize.apply($recv(self), []));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.supercall = false;
+//>>excludeEnd("ctx");;
+self["@changedAspectLog"]=[];
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.TestSpyAxon)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "initialize\x0a\x09super initialize.\x0a\x0a\x09changedAspectLog := #()",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["initialize"]
+}),
+$globals.TestSpyAxon);
+
+
+});

+ 106 - 0
src/Axxord-Tests.st

@@ -0,0 +1,106 @@
+Smalltalk createPackage: 'Axxord-Tests'!
+TestCase subclass: #PlainConsumeTransformTest
+	instanceVariableNames: ''
+	package: 'Axxord-Tests'!
+
+!PlainConsumeTransformTest methodsFor: 'tests'!
+
+testModelTransformSentToAxon
+| model result axon |
+result := nil.
+model := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
+axon := TestSpyAxon new.
+axon registerIn: model.
+model axes: #(foo 2) transform: [:r | #new].
+self assert: axon changedAspectLog equals: #((foo 2))
+!
+
+testNontrivialModelGetsAppropriateValueForTransform
+| model result |
+result := nil.
+model := #{ 'foo' -> #('bar' #(1 #(2 5)) 'baz'). 'moo' -> 'zoo' }.
+model axes: #(foo 2) transform: [:r | result := r].
+self assert: #(1 #(2 5)) equals: result
+!
+
+testNontrivialModelReturnsAppropriateValue
+| model result |
+result := nil.
+model := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
+model axes: #(foo 2) consume: [:r | result := r].
+self assert: #(1 #(2 3)) equals: result
+!
+
+testNontrivialModelTransformsAppropriateValue
+| model result |
+result := nil.
+model := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
+model axes: #(foo 2) transform: [:r | #new].
+model axes: #(foo 2) consume: [:r | result := r].
+self assert: #new equals: result.
+model axes: #() consume: [:r | result := r].
+self assert: #{ 'foo' -> #('bar' #new 'baz'). 'moo' -> 'zoo' } equals: result
+!
+
+testRootModelCannotTransform
+| model result |
+result := nil.
+model := #(1 #(2 3)).
+self should: [ model axes: #() transform: [:r | #{'foo'->#(4 5 6)}] ] raise: Error
+!
+
+testRootModelReturnsDirectRoot
+| model result |
+result := nil.
+model := #(1 #(2 4)).
+model axes: #() consume: [:r | r at: 2 put: nil].
+model axes: #() consume: [:r | result := r].
+self assert: #(1 nil) equals: result
+!
+
+testRootModelReturnsRoot
+| model result |
+result := nil.
+model := #(1 #(2 3)).
+model axes: #() consume: [:r | result := r].
+self assert: #(1 #(2 3)) equals: result
+!
+
+testRootTransformBlockIsNotRun
+| model result |
+result := nil.
+model := #(2 #(1 0)).
+[model axes: #() transform: [:r | result := r]] on: Error do: [].
+self assert: result isNil
+! !
+
+DumbAxon subclass: #TestSpyAxon
+	instanceVariableNames: 'changedAspectLog'
+	package: 'Axxord-Tests'!
+!TestSpyAxon commentStamp!
+I am an axon that logs changed aspects. I am useful in tests.!
+
+!TestSpyAxon methodsFor: 'accessing'!
+
+changedAspectLog
+	^ changedAspectLog
+!
+
+changedAspectLog: anObject
+	changedAspectLog := anObject
+! !
+
+!TestSpyAxon methodsFor: 'action'!
+
+changed: anAspect
+	changedAspectLog add: anAspect
+! !
+
+!TestSpyAxon methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+
+	changedAspectLog := #()
+! !
+

+ 1 - 0
testing.js

@@ -2,6 +2,7 @@ define([
     './deploy',
     'amber_core/SUnit',
     // --- packages used only during automated testing begin here ---
+    'axxord/Axxord-Tests'
     // --- packages used only during automated testing end here ---
 ], function (amber) {
     return amber;