// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ==========================================================================

/*globals module test equals createCookie readCookie eraseCookies */

var setCookies = ['cookie', 'cookie2', 'cookie-hashincreate', 'cookie-number', 'cookie-usingset', 'cookie-2-1', 'cookie-2-2', 'cookie-2-3', 'cookie-expires', 'cookie-destroy', 'cookie-find']; eraseCookies(); setCookies = [];

if (document.cookie !== “”) {

SC.Logger.warn("document.cookie not empty -- test results may be contaminated -- %@".fmt(document.cookie));

}

module(“SC.Cookie”, {

setup: function() {
  setCookies = [];
},
teardown: function() {
  eraseCookies();
}

});

// functions borrowed from www.quirksmode.org/js/cookies.html // should be good to test against

function createCookie(name,value,days) {

var expires;
      if (days) {
              var date = new Date();
              date.setTime(date.getTime()+(days*24*60*60*1000));
              expires = "; expires="+date.toGMTString();
      }
      else expires = "";
      document.cookie = name+"="+value+expires+"; path=/";

}

function readCookie(name) {

var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));
}
return null;

}

function eraseCookies() {

setCookies.forEach(function(cookie) {
  createCookie(cookie, "", -1);
});

}

test(“Setting a cookie - hash in create”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-hashincreate", value: "testing value", expires: date}).write();

var result = readCookie('cookie-hashincreate');
equals(result, "testing value", "value from document.cookie should match what we set");

setCookies = ["cookie-hashincreate"];

});

test(“Setting a cookie - using set”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({expires: date}).set('name', 'cookie-usingset').set('value', "testing value").write();

var result = readCookie('cookie-usingset');
equals(result, "testing value", "value from document.cookie should match what we set");

setCookies = ["cookie-usingset"];

});

test(“Setting a cookie - no write”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-nowrite", value: "testing value", expires: date});

var result = readCookie('cookie-nowrite');
equals(result, null, "value from document.cookie should be null");

setCookies = ["cookie-nowrite"];

});

test(“Setting a cookie - using an numeral expires”, function() {

var cookie = SC.Cookie.create({name: "cookie-number", value: "testing value", expires: 1}).write();
var result = readCookie('cookie-number');
equals(result, "testing value", "value from document.cookie should be 'testing value'");

setCookies = ["cookie-number"];

});

test(“Setting 2 cookies”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-2-1", value: "testing value", expires: date}).write();
var cookie2 = SC.Cookie.create({name: "cookie-2-2", value: "testing value for second", expires: date}).write();

var value = readCookie('cookie-2-1');
equals(value, "testing value", "value from first cookie");
var value2 = readCookie('cookie-2-2');
equals(value2, "testing value for second", "value from second cookie");

setCookies = ['cookie-2-1', 'cookie-2-2'];

});

test(“Setting 2 cookies - overwriting”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-2-3", value: "testing value", expires: date}).write();

var value = readCookie('cookie-2-3');
equals(value, "testing value", "value from first cookie");

var cookie2 = SC.Cookie.create({name: "cookie-2-3", value: "testing value for second", expires: date}).write();

var value2 = readCookie('cookie-2-3');
equals(value2, "testing value for second", "value from second cookie");

setCookies = ['cookie-2-3'];

});

test(“Destroying a cookie - expires”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-expires", value: "testing value", expires: date}).write();

var result = readCookie('cookie-expires');
equals(result, "testing value", "value from document.cookie should match what we set");

cookie.set('expires', -1).write();

var result2 = readCookie('cookie-expires');
equals(result2, null, "value from document.cookie should be null");

setCookies = ["cookie-expires"]; // make sure we get rid of it

});

test(“Destroying a cookie - destroy”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-destroy", value: "testing value", expires: date}).write();

var result = readCookie('cookie-destroy');
equals(result, "testing value", "value from document.cookie should match what we set");

cookie.destroy();

var result2 = readCookie('cookie-destroy');
equals(result2, null, "value from document.cookie should be null");

setCookies = ["cookie-destroy"]; // make sure we get rid of it

});

test(“find”, function() {

var date = new Date();
date.setTime(date.getTime() + 1000);
var cookie = SC.Cookie.create({name: "cookie-find", value: "testing value", expires: date}).write();

var result = SC.Cookie.find("cookie-find");
equals(result.get('name'), cookie.get('name'), "cookie names should be equal");
equals(result.get('value'), cookie.get('value'), "cookie values should be equal");

setCookies = ["cookie-find"];

});

test(“Coooooooookie”, function() {

var cookie = SC.Cookie.create({name: "yummy!"}),
    FakeCookie = SC.Object.extend();

ok(SC.CookieMonster.nomNomNom(cookie) == null, "SC.CookieMonster nom nomed cookie");
equals(SC.CookieMonster.nomNomNom(FakeCookie.create()), NO, "SC.CookieMonster doesn't like fake cookies!");

});