blob: 9bc0ed7d2b393d45ee473b4398872d8df9bce4f8 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var mercury = require('mercury');
var test = require('prova');
var freeze = require('../../../../src/lib/mercury/freeze');
test('freeze observ-array', function(t) {
var mutableObsArray = mercury.array(['foo']);
var immutableObsArray = freeze(mutableObsArray);
assertIsImmutableArray(t, immutableObsArray);
// new observables returned by methods like map, filter are immutable
var mappedResult = immutableObsArray.map(function(item ) {
return item;
});
assertIsImmutableArray(t, mappedResult, 'result of map is immutable');
// it can be observed when source is mutated
immutableObsArray(function(result) {
t.equals(result[1], 'bar', 'observable');
t.end();
});
mutableObsArray.push('bar');
});
function assertIsImmutableArray(t, obs) {
// no mutable method exists
t.ok(obs.set === undefined, 'no set method');
t.ok(obs.splice === undefined, 'no splice method');
t.ok(obs.put === undefined, 'no put method');
// immutable methods are still there
['concat', 'slice', 'every', 'filter', 'forEach', 'indexOf',
'join', 'lastIndexOf', 'map', 'reduce', 'reduceRight',
'some', 'toString', 'toLocaleString' ].forEach(function(name) {
t.ok(obs[name] !== undefined, name + ' method exists.');
});
}