diff --git a/packages/spark/spark.js b/packages/spark/spark.js
index 5cc956d4c5..e1c706bcf9 100644
--- a/packages/spark/spark.js
+++ b/packages/spark/spark.js
@@ -122,7 +122,7 @@ Spark.render = function (htmlFunc) {
}
};
-Spark.setDataContext = function (html, dataContext) {
+Spark.setDataContext = function (dataContext, html) {
var renderer = Spark._currentRenderer.get();
if (!renderer)
return html;
diff --git a/packages/spark/spark_tests.js b/packages/spark/spark_tests.js
index 6a339580b4..1e49316497 100644
--- a/packages/spark/spark_tests.js
+++ b/packages/spark/spark_tests.js
@@ -4,7 +4,7 @@ Tinytest.add("spark - assembly", function (test) {
var doTest = function(calc) {
var frag = Spark.render(function() {
return calc(function(str, expected) {
- return Spark.setDataContext(str, null);
+ return Spark.setDataContext(null, str);
});
});
var groups = [];
@@ -55,7 +55,7 @@ Tinytest.add("spark - assembly", function (test) {
var frag = Spark.render(function() {
return '
Hello
';
});
var div = frag.firstChild;
@@ -390,3 +390,90 @@ Tinytest.add("spark - isolate", function(test) {
test.equal(num2.numListeners(), 0);
test.equal(num3.numListeners(), 0);
});
+
+Tinytest.add("spark - data context", function (test) {
+ var d1 = {x: 1};
+ var d2 = {x: 2};
+ var d3 = {x: 3};
+ var d4 = {x: 4};
+ var d5 = {x: 5};
+
+ var traverse = function (frag) {
+ var out = '';
+ var walkChildren = function (parent) {
+ for (var node = parent.firstChild; node; node = node.nextSibling) {
+ if (node.nodeType !== 8 /* COMMENT */) {
+ var data = Spark.getDataContext(node);
+ out += (data === null) ? "_" : data.x;
+ }
+ if (node.nodeType === 1 /* ELEMENT */)
+ walkChildren(node);
+ }
+ };
+ walkChildren(frag);
+ return out;
+ };
+
+ var testData = function (serialized, htmlFunc) {
+ test.equal(traverse(Spark.render(htmlFunc)), serialized);
+ }
+
+ testData("_", function () {
+ return "hi";
+ });
+
+ testData("__", function () {
+ return "hi
";
+ });
+
+ testData("_1", function () {
+ return "" + Spark.setDataContext(d1, "hi") + "
";
+ });
+
+ testData("21", function () {
+ return Spark.setDataContext(
+ d2, "" + Spark.setDataContext(d1, "hi") + "
");
+ });
+
+ testData("21", function () {
+ return Spark.setDataContext(
+ d2, "" +
+ Spark.setDataContext(d3,
+ Spark.setDataContext(d1, "hi")) +
+ "
");
+ });
+
+ testData("23", function () {
+ return Spark.setDataContext(
+ d2, "" +
+ Spark.setDataContext(d1,
+ Spark.setDataContext(d3, "hi")) +
+ "
");
+ });
+
+ testData("23", function () {
+ var html = Spark.setDataContext(
+ d2, "" +
+ Spark.setDataContext(d1,
+ Spark.setDataContext(d3, "hi")) +
+ "
");
+ return Spark.setDataContext(d4, html);
+ });
+
+ testData("1_2", function () {
+ return Spark.setDataContext(d1, "hi") + " " +
+ Spark.setDataContext(d2, "there");
+ });
+
+ testData("_122_3__45", function () {
+ return "" +
+ Spark.setDataContext(d1, "
") +
+ Spark.setDataContext(d2, "
") +
+ "
" +
+ Spark.setDataContext(d3, "
" +
+ Spark.setDataContext(d4, "" +
+ Spark.setDataContext(d5, "
") +
+ "
");
+ });
+});