Merge remote-tracking branch 'origin/open1256' into open-1336

This commit is contained in:
larkin 2015-06-25 12:44:23 -07:00
commit 270cb48db0
5 changed files with 62 additions and 17 deletions

View File

@ -4,12 +4,12 @@
{
"key": "mctInclude",
"implementation": "MCTInclude.js",
"depends": [ "templates[]" ]
"depends": [ "templates[]", "$sce" ]
},
{
"key": "mctRepresentation",
"implementation": "MCTRepresentation.js",
"depends": [ "representations[]", "views[]", "representers[]", "$q", "$log" ]
"depends": [ "representations[]", "views[]", "representers[]", "$q", "$sce", "$log" ]
}
],
"gestures": [
@ -51,4 +51,4 @@
}
]
}
}
}

View File

@ -53,17 +53,17 @@ define(
* @param {TemplateDefinition[]} templates an array of
* template extensions
*/
function MCTInclude(templates) {
function MCTInclude(templates, $sce) {
var templateMap = {};
// Prepopulate templateMap for easy look up by key
templates.forEach(function (template) {
var key = template.key,
path = [
path = $sce.trustAsResourceUrl([
template.bundle.path,
template.bundle.resources,
template.templateUrl
].join("/");
].join("/"));
// First found should win (priority ordering)
templateMap[key] = templateMap[key] || path;
});
@ -91,4 +91,4 @@ define(
return MCTInclude;
}
);
);

View File

@ -52,7 +52,7 @@ define(
* representation extensions
* @param {ViewDefinition[]} views an array of view extensions
*/
function MCTRepresentation(representations, views, representers, $q, $log) {
function MCTRepresentation(representations, views, representers, $q, $sce, $log) {
var representationMap = {},
gestureMap = {};
@ -69,11 +69,11 @@ define(
// Get a path to a representation
function getPath(representation) {
return [
return $sce.trustAsResourceUrl([
representation.bundle.path,
representation.bundle.resources,
representation.templateUrl
].join("/");
].join("/"));
}
// Look up a matching representation for this domain object
@ -237,4 +237,4 @@ define(
return MCTRepresentation;
}
);
);

View File

@ -31,6 +31,7 @@ define(
describe("The mct-include directive", function () {
var testTemplates,
mockSce,
mctInclude;
beforeEach(function () {
@ -46,7 +47,14 @@ define(
templateUrl: "z/template.html"
}
];
mctInclude = new MCTInclude(testTemplates);
mockSce = jasmine.createSpyObj(
'$sce',
['trustAsResourceUrl']
);
mockSce.trustAsResourceUrl.andCallFake(function (url) {
return url;
});
mctInclude = new MCTInclude(testTemplates, mockSce);
});
it("has a built-in template, with ng-include src=inclusion", function () {
@ -69,6 +77,12 @@ define(
expect(scope.inclusion).toEqual("x/y/z/template.html");
});
it("trusts template URLs", function () {
mctInclude.controller({ key: "xyz" });
expect(mockSce.trustAsResourceUrl)
.toHaveBeenCalledWith("x/y/z/template.html");
});
});
}
);
);

View File

@ -38,6 +38,7 @@ define(
testViews,
mockRepresenters,
mockQ,
mockSce,
mockLog,
mockScope,
mockElement,
@ -95,8 +96,16 @@ define(
});
mockQ = { when: mockPromise };
mockSce = jasmine.createSpyObj(
'$sce',
['trustAsResourceUrl']
);
mockLog = jasmine.createSpyObj("$log", LOG_FUNCTIONS);
mockSce.trustAsResourceUrl.andCallFake(function (url) {
return url;
});
mockScope = jasmine.createSpyObj("scope", [ "$watch" ]);
mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS);
mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS);
@ -108,6 +117,7 @@ define(
testViews,
mockRepresenters,
mockQ,
mockSce,
mockLog
);
});
@ -125,9 +135,18 @@ define(
it("watches scope when linked", function () {
mctRepresentation.link(mockScope, mockElement);
expect(mockScope.$watch).toHaveBeenCalledWith("key", jasmine.any(Function));
expect(mockScope.$watch).toHaveBeenCalledWith("domainObject", jasmine.any(Function));
expect(mockScope.$watch).toHaveBeenCalledWith("domainObject.getModel().modified", jasmine.any(Function));
expect(mockScope.$watch).toHaveBeenCalledWith(
"key",
jasmine.any(Function)
);
expect(mockScope.$watch).toHaveBeenCalledWith(
"domainObject",
jasmine.any(Function)
);
expect(mockScope.$watch).toHaveBeenCalledWith(
"domainObject.getModel().modified",
jasmine.any(Function)
);
});
it("recognizes keys for representations", function () {
@ -152,6 +171,18 @@ define(
expect(mockScope.inclusion).toEqual("x/y/z/template.html");
});
it("trusts template URLs", function () {
mctRepresentation.link(mockScope, mockElement);
mockScope.key = "xyz";
// Trigger the watch
mockScope.$watch.calls[0].args[1]();
expect(mockSce.trustAsResourceUrl)
.toHaveBeenCalledWith("x/y/z/template.html");
});
it("loads declared capabilities", function () {
mctRepresentation.link(mockScope, mockElement);
@ -202,4 +233,4 @@ define(
});
});
}
);
);