recordset.html revision 9953a3f753a2e339b567f75c2566788b828ac1d9
36983956d7c3d9e294903eeda29548f67ac17daeBob Halley<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
40d01ce8f3a1889f5799d9b22b26d5398fa75a1bBob Halley<html>
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt<head>
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt<title>Recordset Tests</title>
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt<script type="text/javascript" src="/build/yui/yui-debug.js"></script>
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson</head>
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt<body class="yui3-skin-sam">
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt<h1>Recordset Tests</h1>
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt<script type="text/javascript">
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt(function() {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt YUI({
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson base: "/build/",
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt filters: {recordset:"debug"},
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt logInclude:{"TestRunner":true},
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt useConsole: true
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson }).use("console", "test", "dump", "recordset", function(Y) {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // Set up the page
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var ASSERT = Y.Assert,
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson ARRAYASSERT = Y.ArrayAssert,
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt BTNRUN = Y.get("#btnRun");
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson BTNRUN.set("disabled", false);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt Y.on("click", function(e){
16803617e47c83272013e45ba8eb83a3b11983edAndreas Gustafsson Y.Test.Runner.run();
b90dd6c0a9df584619d3c47be7c9417f55d5ccf6Bob Halley }, BTNRUN);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var myConsole = new Y.Console().render();
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b90dd6c0a9df584619d3c47be7c9417f55d5ccf6Bob Halley
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var testBasic = new Y.Test.Case({
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt name: "API Tests",
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt initialData: [{a:3, b:2, c:1}, {a:9, b:8, c:7}, {a:1, b:2, c:3}],
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //---------------------------------------------
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // Setup and tear down
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //---------------------------------------------
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt setUp : function () {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //create recordset
40d01ce8f3a1889f5799d9b22b26d5398fa75a1bBob Halley this.rs = new Y.Recordset({records:this.initialData});
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //Some Ways to access recordset properties
b497531c76ea5f9aeed0c1707b6156c104c633ddEvan Hunt //Y.log(rs.getRecord(0).getValue('a'));
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //Y.log(rs.get('records').length);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt },
b497531c76ea5f9aeed0c1707b6156c104c633ddEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt tearDown : function () {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt delete this.rs;
62714accee7c8d96e02f40d58751422972e2ed41Evan Hunt },
06a05efc07ac7b6ff1973a6463291f5d48ece6ebMark Andrews
06a05efc07ac7b6ff1973a6463291f5d48ece6ebMark Andrews //---------------------------------------------
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // Event Helpers
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //---------------------------------------------
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt recordsetChangedEventTest: function(i) {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt this.rs.on('recordsetChangedEvent', function() {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //Y.Assert.areEqual(e.index, i);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt });
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt },
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt recordsetEmptiedEventTest: function() {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var flag = false;
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt this.rs.on('recordsetEmptiedEvent', function() {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt flag = true;
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt Y.Assert.isTrue(flag);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt });
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt },
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt recordsetUpdatedEventTest: function(newRecords, delRecords, testIndex) {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // var iD = this.initialData, i=0;
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // this.rs.on('recordsetUpdatedEvent', function(e) {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // for(; i<newRecords.length; i++) {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // Y.ObjectAssert.areEqual(newRecords, e.data.updated.getValue(), "new record values match up");
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // }
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // i=0;
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt // for(; i<delRecords.length; i++) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt // Y.ObjectAssert.areEqual(delRecords, e.data.overwritten.getValue(), "old record values match up");
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt // }
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt //
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt // Y.Assert.areEqual(testIndex, e.index, "Index match up");
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt //});
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt },
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //---------------------------------------------
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // Add Records
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //---------------------------------------------
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt testGetRecords: function() {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var newRecord;
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //Single Record
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt newRecord = this.rs.getRecord(1);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt Y.ObjectAssert.areEqual(newRecord.getValue(), this.initialData[1]);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt //Multiple Records
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt newRecord = this.rs.getRecords(1,2);
dc3ac7e79aee3821d1877a41adcd6d6eec5a4395Evan Hunt Y.ObjectAssert.areEqual(newRecord[0].getValue(), this.initialData[1]);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt Y.ObjectAssert.areEqual(newRecord[1].getValue(), this.initialData[2]);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var oRec = new Y.Record({a:'234'});
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt var obj = {b: '324'};
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt if (obj instanceof Y.Record) {
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // console.log(oRec);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // console.log(oRec.constructor.NAME);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt // console.log(obj);
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt Y.Assert.fail();
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt }
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt },
b751788932cf1a6d98ae83355f38a080125c2f3eEvan Hunt
06a05efc07ac7b6ff1973a6463291f5d48ece6ebMark Andrews
e4c4cf5177d23e144897e0e26ae210cfdb9612ebEvan Hunt //---------------------------------------------
e4c4cf5177d23e144897e0e26ae210cfdb9612ebEvan Hunt // Add Records
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testAddSingleRecordToEnd: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var recToAdd = {a:'8', b:'9', c:'10'};
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.add(recToAdd);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Test Recordset Length
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(4, this.rs.get('records').length, "Array lengths not equal.");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Assert on last object
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //This is indirectly checking to make sure that the record that got added has the identical data as the object literal that was passed in.
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(recToAdd, this.rs.getRecord(3).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(retval.data[0].getValue(), recToAdd);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(3);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testAddSingleRecordToIndex: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var recToAdd, i=2;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt recToAdd = {a:'8', b:'9', c:'10'};
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.add(recToAdd,i);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(recToAdd, this.rs.getRecord(i).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //assertion with output
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(retval.data[0].getValue(), recToAdd);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(i);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testAddMultipleRecordsToEnd: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var recsToAdd = [{a:'11', b:'22', c:'33'}, {a:'44', b:'55', c:'66'}];
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.add(recsToAdd);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Assertions with recordset
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(recsToAdd[0], this.rs.getRecord(3).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(recsToAdd[1], this.rs.getRecord(4).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //assertions with output
e4c4cf5177d23e144897e0e26ae210cfdb9612ebEvan Hunt Y.ObjectAssert.areEqual(retval.data[0].getValue(), recsToAdd[0]);
40d01ce8f3a1889f5799d9b22b26d5398fa75a1bBob Halley Y.ObjectAssert.areEqual(retval.data[1].getValue(), recsToAdd[1]);
40d01ce8f3a1889f5799d9b22b26d5398fa75a1bBob Halley
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(3);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testAddMultipleRecordsToIndex: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var recsToAdd, i;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt recsToAdd = [{a:'11', b:'22', c:'33'}, {a:'44', b:'55', c:'66'}];
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt i = 1;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.add(recsToAdd, i);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Assertions with recordset
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(recsToAdd[0], this.rs.getRecord(1).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(recsToAdd[1], this.rs.getRecord(2).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(i);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt // Delete Records
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testDeleteSingleRecordFromEnd: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(2);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.remove();
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(this.initialData[2], retval.data[0].getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(2, retval.index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testDeleteSingleRecordFromIndex: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(1);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.remove(1);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(this.initialData[1], retval.data[0].getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(1, retval.index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testDeleteRangeOfRecords: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Delete 2 records from index 1
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetChangedEventTest(1);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.remove(1,2);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(this.initialData[1], retval.data[0].getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(this.initialData[2], retval.data[1].getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(1, retval.index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt // Empty Recordset
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testEmptyRecordSet: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.recordsetEmptiedEventTest(0);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.empty();
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(0, this.rs.get('records').length);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt // GetValuesByKey
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testGetValuesByKey: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var key, retval, i;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt key = 'a';
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.getValuesByKey(key);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt for (i=0; i < this.initialData.length; i++) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(this.initialData[i][key], retval[i]);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt }
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testGetValuesByKeyWithInvalidKey: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var key = 'd';
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt retval = this.rs.getValuesByKey(key);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt for (i=0; i < this.initialData.length; i++) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.isUndefined(retval[i]);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt }
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt // Update Records - without overwriteFlag
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //---------------------------------------------
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testUpdateRecordAtIndexWithoutOverwriteFlag: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var newRecord, index=1, oldRecord;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Update record at given index with new record
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecord = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt oldRecord = this.rs.getRecord(index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.on('recordsetUpdatedEvent', function(e) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(newRecord, e.data.updated[0], 'Updated record is != to new record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record is != to old record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(1, e.data.overwritten.length, 'overwritten array is not of expected length');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(index, e.index, "correct index was modified");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.update(newRecord, index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(newRecord.getValue(), this.rs.getRecord(index).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testUpdateRecordsAtIndexWithoutOverwriteFlag: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var newRecords = [], index=0, oldRecord, a, b;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt oldRecord = this.rs.getRecord(index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt a = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt b = new Y.Record({data:{a:'newD', b:'newE', c:'newF'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecords.push(a);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecords.push(b);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.on('recordsetUpdatedEvent', function(e) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(newRecords, e.data.updated, 'Updated record is != to new record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record is != to old record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(1, e.data.overwritten.length, 'overwritten array is not of expected length');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(index, e.index, "correct index was modified");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.update(newRecords, index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //check that the two elements in the recordset are the same as the ones pushed in
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(a.getValue(), this.rs.getRecord(0).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(b.getValue(), this.rs.getRecord(1).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(this.initialData[1], this.rs.getRecord(2).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //3 initial records + 1 more added (the other was just over-written)= 4 total records in recordset
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(4, this.rs.get('records').length);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testUpdateRecordAtIndexWithOverwriteFlag: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var newRecord, oldRecord, index=1;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecord = new Y.Record({data: {a:'newG', b:'newH', c:'newI'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt oldRecord = this.rs.getRecord(index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.on('recordsetUpdatedEvent', function(e) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //console.log(e.data);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(newRecord, e.data.updated[0], 'Updated record is != to new record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record is != to old record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(1, e.data.overwritten.length, 'overwritten array is not of expected length');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(1, e.data.updated.length);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(index, e.index, "correct index was modified");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.update(newRecord, index, true);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(newRecord.getValue(), this.rs.getRecord(index).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testUpdateRecordsAtIndexWithOverwriteFlag: function() {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var newRecords = [], index=0, oldRecords=[], a, b, c;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt oldRecords = this.rs.getRecords(index,3);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //console.log(oldRecords);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt a = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt b = new Y.Record({data:{a:'newD', b:'newE', c:'newF'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt c = new Y.Record({data:{a:'newG', b:'newH', c:'newI'}});
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecords.push(a);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecords.push(b);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt newRecords.push(c);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.on('recordsetUpdatedEvent', function(e) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt console.log(e.data);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(newRecords, e.data.updated, 'Updated record is != to new record');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt for(var i=0; i < oldRecords.length; i++) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //Y.ObjectAssert.areEqual(oldRecords[i].getValue(), e.data.overwritten[i].getValue(), 'Overwritten record is != to old record');
276a77c22af98c78403883b16a82646a0d5b29abPaul Vixie }
c5e2e93f62e83ff6e3d85ea05ab5a9f468300a32Mark Andrews
c5e2e93f62e83ff6e3d85ea05ab5a9f468300a32Mark Andrews Y.Assert.areEqual(3, e.data.overwritten.length, 'overwritten array is not of expected length');
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(index, e.index, "correct index was modified");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
151bab91952de38e6b7cadf29d391a2790df5fddEvan Hunt
413d5565ba2af24f12dc54d6e6807af7f1a39867Andreas Gustafsson this.rs.update(newRecords, index, true);
413d5565ba2af24f12dc54d6e6807af7f1a39867Andreas Gustafsson
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //check that the two elements in the recordset are the same as the ones pushed in
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(a.getValue(), this.rs.getRecord(0).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(b.getValue(), this.rs.getRecord(1).getValue());
413d5565ba2af24f12dc54d6e6807af7f1a39867Andreas Gustafsson Y.ObjectAssert.areEqual(c.getValue(), this.rs.getRecord(2).getValue());
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //3 initial records - all 3 overwritten
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Assert.areEqual(3, this.rs.get('records').length);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
413d5565ba2af24f12dc54d6e6807af7f1a39867Andreas Gustafsson },
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testUpdateRecordWithData: function() {
36983956d7c3d9e294903eeda29548f67ac17daeBob Halley var oData = {a:'newJ', b:'newK', c:'newL'}, oldRecord, index=2;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt oldRecord = this.rs.getRecord(index);
68dacf121428ad8d1160d19d018e028f676ae47aMark Andrews this.rs.on('recordsetUpdatedEvent', function(e) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt //console.log(e.data);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oData, e.data.updated[0].getValue(), 'Updated record != equal to new record');
306b36adb61f375b697419a9775e33398eb21563Evan Hunt Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record != equal to old record');
413d5565ba2af24f12dc54d6e6807af7f1a39867Andreas Gustafsson Y.Assert.areEqual(1, e.data.overwritten.length, 'overwritten array is not of expected length');
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt Y.Assert.areEqual(1, e.data.updated.length);
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt Y.Assert.areEqual(index, e.index, "correct index was modified");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt this.rs.update(oData, index);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oData, this.rs.getRecord(index).getValue());
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt //initialData: [{a:3, b:2, c:1}, {a:9, b:8, c:7}, {a:1, b:2, c:3}],
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt testFilterByValidator: function() {
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var validator = function(item) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt if (item.b === 2) {
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt return true;
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt }
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt else {
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt return false;
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt }
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt },
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt oRecs = [];
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt oRecs = this.rs.filter(validator);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oRecs[0], this.rs.getRecord(0));
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt Y.ObjectAssert.areEqual(oRecs[1], this.rs.getRecord(2));
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.ObjectAssert.areEqual(oRecs.length, 2);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt }
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt var suite = new Y.Test.Suite({name:"Recordset Test Suite"});
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt suite.add(testBasic);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt Y.Test.Runner.setName("Recordset Test Runner");
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Test.Runner.add(suite);
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt Y.Test.Runner.run();
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt });
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt})();
3b1b34f762cf4a9a4e09d3ef03becc0d08acddb9Evan Hunt</script>
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt</body>
b375b22fb0342f549d6d3a428644292e7c812e3aEvan Hunt</html>
413d5565ba2af24f12dc54d6e6807af7f1a39867Andreas Gustafsson