Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add wrapper to use AMD or browser globals to load plugin (plus tests) #35

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions Tests/amd/Tests.htm
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html>

<head>
<meta charset='utf-8' />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta name="description" content="Knockout.viewmodel : " />
<script src="../../web/javascripts/prism.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" media="screen" href="../../web/stylesheets/stylesheet.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../web/stylesheets/prism.css">

<title>Knockout Viewmodel Plugin Unit Tests - AMD</title>
<link href="http://code.jquery.com/qunit/qunit-1.10.0.css" rel="stylesheet" />
<script data-main="main-qunit-tests" src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.5/require.min.js"></script>
</head>

<body class="language-javascript">
<!-- HEADER -->
<div id="header_wrap" class="outer">
<header class="inner">
<a id="forkme_banner" href="https://github.com/coderenaissance/knockout.viewmodel">View on GitHub</a>

<h1 id="project_title">Knockout Viewmodel Plugin </h1>
<h2 id="project_tagline">Cleaner, Faster, Better Knockout Mapping</h2>
<style type="text/css">
#qunit-userAgent {
display:none;
}
#qunit-header {
background:transparent;
position:absolute;
z-index:-1;
}
#qunit-header a, #qunit-header a:hover {
position:relative;
color:black;
top:-40px;
}
#qunit-banner {
height:30px;
}
.fail th {
background:white;
color:#222;
}
</style>
<section id="downloads">
<a class="zip_download_link" href="https://github.com/coderenaissance/knockout.viewmodel/zipball/master">Download this project as a .zip file</a>
<a class="tar_download_link" href="https://github.com/coderenaissance/knockout.viewmodel/tarball/master">Download this project as a tar.gz file</a>
</section>
</header>
</div>

<!-- MAIN CONTENT -->
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<div style="text-align: right; font-weight: bold; font-size: larger">Download Latest Version<br />
<a style="font-size:.8em" href="http://nuget.org/packages/knockout.viewmodel/">(also on Nuget)</a>
</div>
<div id="qunit"></div>
</section>
</div>
<!-- FOOTER -->
<div id="footer_wrap" class="outer">
<footer class="inner">
<p class="copyright">Knockout.viewmodel maintained by <a href="https://github.com/coderenaissance">coderenaissance</a></p>
<p>Published with <a href="http://pages.github.com">GitHub Pages</a></p>
</footer>
</div>
</body>
</html>
11 changes: 11 additions & 0 deletions Tests/amd/amd-qunit-tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
define(["knockout", "viewmodel"], function(ko) {
var run = function() {
module("AMD Tests");
test("Module Loading", function() {
ok(ko, "ko Defined");
ok(ko.viewmodel, "ko.viewmodel Defined");
ok(!window.ko, "Global ko Not Defined");
});
};
return {run: run};
});
42 changes: 42 additions & 0 deletions Tests/amd/array-qunit-tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
define(['knockout', 'viewmodel'], function (ko) {
var run = function () {
var model;
module("toModel Basic", {
setup: function () {
//ko.viewmodel.options.logging = true;
model = {
array: []
};
},
teardown: function () {
//ko.viewmodel.options.logging = false;
model = undefined;
}
});


test("array push pop", function () {
var viewmodel, result;

viewmodel = ko.viewmodel.fromModel(model);
viewmodel.array.push({ test: true });
result = viewmodel.array.pop();

assert(result.test(), true);

});

test("array push pop", function () {
var viewmodel, result;

viewmodel = ko.viewmodel.fromModel(model);
viewmodel.array.push({ test: true }, true);
result = viewmodel.array.pop();

assert(result.test, true);

});
};

return {run: run}
});
168 changes: 168 additions & 0 deletions Tests/amd/fromModel-Basic-qunit-tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
/// <reference path="FromTo-Mapping-qunit-tests.js" />
define(['knockout', 'viewmodel'], function (ko) {
var run = function () {
module("fromModel Basic", {
setup: function () {
//ko.viewmodel.options.logging = true;
if(ko.viewmodel.options.hasOwnProperty("makeChildArraysObservable")){
ko.viewmodel.options.makeChildArraysObservable = true;
}
},
teardown: function () {
//ko.viewmodel.options.logging = false;
}
});


test("Default simple types", function () {
var model, viewmodel;

model = {
stringProp: "test",
number: 5,
date: new Date("01/01/2001"),
emptyArray: []
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(viewmodel.stringProp(), model.stringProp, "String Test");
deepEqual(viewmodel.number(), model.number, "Number Test");
deepEqual(viewmodel.date(), model.date, "Date Test");
deepEqual(viewmodel.emptyArray(), model.emptyArray, "Array Test");
});


test("Default nested object", function () {
var model, viewmodel;

model = {
nestedObject: {
stringProp: "test",
number: 5,
date: new Date("01/01/2001"),
emptyArray: []
}
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(viewmodel.nestedObject.stringProp(), model.nestedObject.stringProp, "String Test");
deepEqual(viewmodel.nestedObject.number(), model.nestedObject.number, "Number Test");
deepEqual(viewmodel.nestedObject.date(), model.nestedObject.date, "Date Test");
deepEqual(viewmodel.nestedObject.emptyArray(), model.nestedObject.emptyArray, "Array Test");
});


test("Default object array", function () {
var model, viewmodel;

model = {
objectArray: [
{}
]
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(viewmodel.objectArray()[0], model.objectArray[0], "Object Test");
});


test("Default object array simple types", function () {
var model, viewmodel;

model = {
objectArray: [
{
stringProp: "test",
number: 5,
date: new Date("01/01/2001"),
emptyArray: []
}
]
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(viewmodel.objectArray()[0].stringProp(), model.objectArray[0].stringProp, "String Test");
deepEqual(viewmodel.objectArray()[0].number(), model.objectArray[0].number, "Number Test");
deepEqual(viewmodel.objectArray()[0].date(), model.objectArray[0].date, "Date Test");
deepEqual(viewmodel.objectArray()[0].emptyArray(), model.objectArray[0].emptyArray, "Array Test");
});


test("makeChildArraysObservable is false Mode Default nested array", function () {
var model, viewmodel;

model = {
nestedArray: [[]]
};

ko.viewmodel.options.makeChildArraysObservable = false;
viewmodel = ko.viewmodel.fromModel(model);

deepEqual(ko.viewmodel.options.makeChildArraysObservable, false);
deepEqual(viewmodel.nestedArray()[0], model.nestedArray[0], "Array Test");
});

test("makeChildArraysObservable is false double nested array", function () {
var model, viewmodel;

model = {
nestedArray: [[[]]]
};

ko.viewmodel.options.makeChildArraysObservable = false;
viewmodel = ko.viewmodel.fromModel(model);

deepEqual(ko.viewmodel.options.makeChildArraysObservable, false);
deepEqual(viewmodel.nestedArray()[0][0], model.nestedArray[0][0], "Array Test");
});

//if undefined then we are using facade around ko.mapping
//used to exclude tests that are incompatable with ko.mapping
if (ko.viewmodel.options.makeChildArraysObservable !== undefined) {
test("makeChildArraysObservable is true Default nested array", function () {
var model, viewmodel;

model = {
nestedArray: [[]]
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(ko.viewmodel.options.makeChildArraysObservable, true);
deepEqual(viewmodel.nestedArray()[0](), model.nestedArray[0], "Array Test");
});

test("makeChildArraysObservable is true double nested array", function () {
var model, viewmodel;

model = {
nestedArray: [[[]]]
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(ko.viewmodel.options.makeChildArraysObservable, true);
deepEqual(viewmodel.nestedArray()[0]()[0](), model.nestedArray[0][0], "Array Test");
});
}


test("Default string array", function () {
var model, viewmodel;

model = {
stringArray: ["Test", "Test"]
};

viewmodel = ko.viewmodel.fromModel(model);

deepEqual(viewmodel.stringArray()[0], model.stringArray[0], "String Array Test");
});
};

return {run: run}
});
Loading