var test = require('tap').test var LRU = require('../') test('dump', function (t) { var cache = new LRU() t.equal(cache.dump().length, 0, "nothing in dump for empty cache") cache.set("a", "A") cache.set("b", "B") t.deepEqual(cache.dump(), [ { k: "b", v: "B", e: 0 }, { k: "a", v: "A", e: 0 } ]) cache.set("a", "A"); t.deepEqual(cache.dump(), [ { k: "a", v: "A", e: 0 }, { k: "b", v: "B", e: 0 } ]) cache.get("b"); t.deepEqual(cache.dump(), [ { k: "b", v: "B", e: 0 }, { k: "a", v: "A", e: 0 } ]) cache.del("a"); t.deepEqual(cache.dump(), [ { k: "b", v: "B", e: 0 } ]) t.end() }) test("do not dump stale items", function(t) { var cache = new LRU({ max: 5, maxAge: 50 }) //expires at 50 cache.set("a", "A") setTimeout(function () { //expires at 75 cache.set("b", "B") var s = cache.dump() t.equal(s.length, 2) t.equal(s[0].k, "b") t.equal(s[1].k, "a") }, 25) setTimeout(function () { //expires at 110 cache.set("c", "C") var s = cache.dump() t.equal(s.length, 2) t.equal(s[0].k, "c") t.equal(s[1].k, "b") }, 60) setTimeout(function () { //expires at 130 cache.set("d", "D", 40) var s = cache.dump() t.equal(s.length, 2) t.equal(s[0].k, "d") t.equal(s[1].k, "c") }, 90) setTimeout(function () { var s = cache.dump() t.equal(s.length, 1) t.equal(s[0].k, "d") }, 120) setTimeout(function () { var s = cache.dump() t.deepEqual(s, []) t.end() }, 155) }) test("load basic cache", function(t) { var cache = new LRU(), copy = new LRU() cache.set("a", "A") cache.set("b", "B") copy.load(cache.dump()) t.deepEquals(cache.dump(), copy.dump()) t.end() }) test("load staled cache", function(t) { var cache = new LRU({maxAge: 50}), copy = new LRU({maxAge: 50}), arr //expires at 50 cache.set("a", "A") setTimeout(function () { //expires at 80 cache.set("b", "B") arr = cache.dump() t.equal(arr.length, 2) }, 30) setTimeout(function () { copy.load(arr) t.equal(copy.get("a"), undefined) t.equal(copy.get("b"), "B") }, 60) setTimeout(function () { t.equal(copy.get("b"), undefined) t.end() }, 90) }) test("load to other size cache", function(t) { var cache = new LRU({max: 2}), copy = new LRU({max: 1}) cache.set("a", "A") cache.set("b", "B") copy.load(cache.dump()) t.equal(copy.get("a"), undefined) t.equal(copy.get("b"), "B") //update the last read from original cache cache.get("a") copy.load(cache.dump()) t.equal(copy.get("a"), "A") t.equal(copy.get("b"), undefined) t.end() }) test("load to other age cache", function(t) { var cache = new LRU({maxAge: 50}), aged = new LRU({maxAge: 100}), simple = new LRU(), arr, expired //created at 0 //a would be valid till 0 + 50 cache.set("a", "A") setTimeout(function () { //created at 20 //b would be valid till 20 + 50 cache.set("b", "B") //b would be valid till 20 + 70 cache.set("c", "C", 70) arr = cache.dump() t.equal(arr.length, 3) }, 20) setTimeout(function () { t.equal(cache.get("a"), undefined) t.equal(cache.get("b"), "B") t.equal(cache.get("c"), "C") aged.load(arr) t.equal(aged.get("a"), undefined) t.equal(aged.get("b"), "B") t.equal(aged.get("c"), "C") simple.load(arr) t.equal(simple.get("a"), undefined) t.equal(simple.get("b"), "B") t.equal(simple.get("c"), "C") }, 60) setTimeout(function () { t.equal(cache.get("a"), undefined) t.equal(cache.get("b"), undefined) t.equal(cache.get("c"), "C") aged.load(arr) t.equal(aged.get("a"), undefined) t.equal(aged.get("b"), undefined) t.equal(aged.get("c"), "C") simple.load(arr) t.equal(simple.get("a"), undefined) t.equal(simple.get("b"), undefined) t.equal(simple.get("c"), "C") }, 80) setTimeout(function () { t.equal(cache.get("a"), undefined) t.equal(cache.get("b"), undefined) t.equal(cache.get("c"), undefined) aged.load(arr) t.equal(aged.get("a"), undefined) t.equal(aged.get("b"), undefined) t.equal(aged.get("c"), undefined) simple.load(arr) t.equal(simple.get("a"), undefined) t.equal(simple.get("b"), undefined) t.equal(simple.get("c"), undefined) t.end() }, 100) })
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 19553 | swellard | Move and rename clients | ||
//guest/perforce_software/helix-web-services/main/source/clients/2016.1.0/javascript/node_modules/lru-cache/test/serialize.js | |||||
#1 | 18810 | tjuricek |
First-pass at JavaScript client SDK. JavaScript requires Node with Gulp to "browserfy" the library. It's the easiest way I found to use the swagger-js project; bundle up a wrapping method. There is no JavaScript reference guide. The swagger-js doesn't really document what they do very well, actually. Overall I'm not particularly impressed by swagger-js, it was hard to even figure out what the right method syntax was. We may want to invest time in doing it better. This required setting CORS response headers, which are currently defaulted to a fairly insecure setting. |