diff options
| -rw-r--r-- | lib/utils.coffee | 4 | ||||
| -rw-r--r-- | tests/unit_tests/utils_test.coffee | 23 | 
2 files changed, 27 insertions, 0 deletions
| diff --git a/lib/utils.coffee b/lib/utils.coffee index 9969811a..31f4bec6 100644 --- a/lib/utils.coffee +++ b/lib/utils.coffee @@ -236,6 +236,10 @@ Utils =    # Like Nodejs's nextTick.    nextTick: (func) -> @setTimeout 0, func +  # Make an idempotent function. +  makeIdempotent: (func) -> +    (args...) -> ([previousFunc, func] = [func, null])[0]? args... +  # Utility for parsing and using the custom search-engine configuration.  We re-use the previous parse if the  # search-engine configuration is unchanged.  SearchEngines = diff --git a/tests/unit_tests/utils_test.coffee b/tests/unit_tests/utils_test.coffee index 67c3b333..9b71ca72 100644 --- a/tests/unit_tests/utils_test.coffee +++ b/tests/unit_tests/utils_test.coffee @@ -102,3 +102,26 @@ context "compare versions",      assert.equal -1, Utils.compareVersions("1.40.1", "1.40.2")      assert.equal -1, Utils.compareVersions("1.40.1", "1.41")      assert.equal 1, Utils.compareVersions("1.41", "1.40") + +context "makeIdempotent", +  setup -> +    @count = 0 +    @func = Utils.makeIdempotent (n = 1) => @count += n + +  should "call a function once", -> +    @func() +    assert.equal 1, @count + +  should "call a function once with an argument", -> +    @func 2 +    assert.equal 2, @count + +  should "not call a function a second time", -> +    @func() +    assert.equal 1, @count + +  should "not call a function a second time", -> +    @func() +    assert.equal 1, @count +    @func() +    assert.equal 1, @count | 
