       expect(services.myService.establishData).toHaveBeenCalledWith({ a: 2 }, {})
       expect(modelPatches).toBeEmpty()
 
-    it "gathers service input data, visits nodes, and gives output to services", ->
+    it "gathers service input data, visits nodes, uses tools, and gives output to services", ->
       services = 
         myService:
           provideData: -> return { a: 1 }

          service: "@service:myService"

      # parameters: node, modelData, assets, actions, tools, services, log, inputServiceData = null, outputServiceData = null
      modelPatches = GE.stepLoop(layout, {}, {}, actions, {}, services)

      expect(services.myService.provideData).toHaveBeenCalledWith({})
      expect(services.myService.establishData).toHaveBeenCalledWith({ a: 2 }, {})


      spyOn(services.myService, "provideData").andCallThrough()

      tools = {
        testTool: (arg1, arg2) -> return {_1: arg1, _2: arg2};
      }

      actions = 
        incrementServiceData: 
          paramDefs:
            service: "" 
          update: -> 
            expect(tools.testTool(@params.service.a, 2)._1).toBe(1)
            @params.service.a++

      layout = 
